気の向くままに辿るIT/ICT/IoT
webzoit.net
IoT・電子工作

しゃべるESP-01/12/ESP32音声合成・再生デモ

ウェブ造ホーム前へ次へ
サイト内検索
カスタム検索
ESP8266って?

しゃべるESP-01/12/ESP32音声合成・再生デモ

しゃべるESP-01/12/ESP32音声合成・再生デモ

2018/09/15

 しゃべるESP8266/ESP-WROOM-02/ESP-WROOM-32(音声合成・テキスト読み上げ)のデモンストレーションをしてみるページ。

 WiFiもBluetoothもBLEも使わないなんてESPらしくはないが、先日のしゃべるArduinoデモに続くESP版なんていうのもありかなと。

Rasbee ESP8266 ESP-01 LWIP AP+STA シリアル WIFI無線モジュール

 今回は、ESP8266の内、ESP-01を使ったが、これでいけるということは、上位モジュールESP-02〜ESP-12〜ESP-14、ESP-WROOM-02、ESP32/ESP-WROOM-32でもいけるということで。

 と言いつつ、ESPシリーズの内、日本の技適を通っているのは、いまのところ、ESP-WROOM-02/ESP-WROOM-32(とこれらを搭載した開発ボード)のみだけど。

 ただ、ESP-WROOM-02については、わからないし、Amazonでは見かけないが、Aliexpressなどを見ているとESP-WROOM-32については、日本の技適を通っていない(通る前の製品?)も存在するので技適マークの有無は確認した方がよい。

HiLetgo ESP32 ESP-32S NodeMCU開発ボード2.4GHz WiFi + Bluetoothデュアルモード

waves ESP32-DevKitC ESP-WROOM-32 ESP32 DevKitC V2 WiFi BLE 技適取得済 国内発送

waves ESP-WROOM-32 + 開発基盤 セット 国内発送

waves ESP8266 WiFiモジュール(技適取得済み) ESP-WROOM-02 キット 赤基盤

[スイッチサイエンス] ESP-WROOM-02ピッチ変換済みモジュール《シンプル版》

[スイッチサイエンス] ESP-WROOM-02ピッチ変換済みモジュール《フル版》

HiLetgo 2個セット ESP8285 ESP-M2 CH340開発ボード WIFIシリアルポートモジュール CH340 ESP8266に対応

HiLetgo® 2個セット ESP8266 NodeMCU LUA CP2102 ESP-12E モノのインターネット開発ボード ESP8266 無線受信発信モジュール WIFIモジュール Arduinoに適用 [並行輸入品]

HiLetgo OTA WeMos D1 CH340 WiFi 開発ボード ESP8266 ESP-12F Arduino IDE UNO R3に対応 

Rasbee WeMos D1 R3 簡易デザイン WiFi 開発ボード NODEMCU LUA ESP8266 Arduino UNO 適用 1個 [並行輸入品]

Rasbee OTA WeMos D1 CH340 WiFi 開発ボード ESP8266 ESP-12F For IDE UNO R3 Arduino用 1個 [並行輸入品]

Rasbee アップグレード版 WeMos D1 R2 WiFi UNO 開発板 ESP8266 Arduino 1個 [並行輸入品]

前提

 Arduino IDEが利用できることは、もちろん、ESP8266やESP32をArduino IDEで使えるようにしておくこと。

 ESP-01なら、Arduino IDEの[ツール] => [ボード]から[Generic ESP8266 Module]を選択、ESPにスケッチをアップロードできる状態であること。

 ESP32なら、同じく、[espressif/arduino-esp32]を選択、ESPにスケッチをアップロードできる状態であること。

 ちなみにこれらArduino IDEの環境設定で追加する方法の場合、カンマ区切りで複数指定可能。

 参考までに自身の使用しているOSは、Debian(Linux)、Arduino IDEのバージョンは、1.8.6(1.8.6を素直に起動できない場合、起動方法参照)。

ESP8266SAMライブラリ

$ cd ~/適切なパス/libraries
$ git clone https://github.com/earlephilhower/ESP8266Audio
$ git clone https://github.com/Gianbacchio/ESP8266_Spiram
$ git clone https://github.com/earlephilhower/ESP8266SAM

 今回は、earlephilhower/ESP8266SAMのサンプルスケッチSpeak.inoをそのまま使わせて頂いた。

 リンク先にもあるように、これを使うにあたり、earlephilhower/ESP8266Audioも必要とのこと。

 ESP8266Audioライブラリは、機能が豊富でサンプルスケッチだけでもミキサーサンプル、PROGMEMからAAC再生、PROGMEMからDACにFLAC再生、SPIFFSからMIDI再生、PROGMEMからDACにMOD再生、SPIFFSからMP3再生、I2S DACにRTTTL再生、PROGMEMからWAV再生、HTTPからMP3ストリーム、HTTP_SPI RAMからMP3ストリーム、WebRadioと今の自身には、何を言っているのかよくわからないものもあるが、実に多彩。

 そこでESP8266SAMライブラリには不要そうも、そのページにある通り、Gianbacchio/ESP8266_Spiramもgit clone( or ダウンロード・展開)しておいた。

 また、例えば、ESP8266の場合、Arduino IDEの[ツール]メニューから[lwIP]を[v1.4 Open Source]か[V2 Higher Bandwidth]、CPU Frequencyを[160MHz]にする必要があるとのことなので、それぞれデフォルトの[V2 Low Memory]から[V2 Higher Bandwidth]、[80MHz]から[160MHz]に変更してみた。

 ESP8266Audioには、ESP32も対応しているかのような記述もあり、試してはいないが、ESP8266SAMもそのままいけるのかもしれない。

必要なモノ

 前述の通り、今回のケースでは、WiFiモジュールはどれでもよいが、ESP-01を使った。

 今回使ったスピーカーは、100均セリアで買った1つでモノラル、2つでステレオになるというもの、USBケーブルもセリア、Nano互換機は、Amazonマーケットプレイス直で買ったもので全部で800〜900円といったところかと。

 スピーカーを使う場合、スピーカーにつながっているステレオ(ミニ)プラグの根元にマイナス、他の極にプラスをつなげば、音を出す準備は完了。(電源を要するものは電源も入れる。)

 出力については、スピーカーでなくとも、ヘッドフォンやパッシブブザーでもいけるが、圧電ブザーを使う場合は、ワニグチクリップは不要な代わりに別途ブレッドボードが必要となったり、スケッチに該当するプログラム行の追記が必要になる。

 また、ヘッドホンだと聴こえすぎるほど大きく、スピーカーは、少し小さいが聴こえるには聴こえる、一方、ブザーだと耳を当てないと聴こえないほど、ちょっと音が小さいのでトランジスタを噛ませた方がよいかもしれない。

 ESP32開発ボードを使う場合には、FTDIシリアルUSB変換モジュールやminiUSB-USB Aケーブルは不要な一方、microUSB-USB Aケーブルが必要。

Rasbee ESP8266 ESP-01 LWIP AP+STA シリアル WIFI無線モジュール

Rasbeeオリジナル FT232RL互換 3.3V/5V FTDI/USB/TTL変換アダプタ

iBUFFALO USB2.0ケーブル (A to miniB) スリムタイプ ホワイト 1m BSUAMNSM210WH

iBUFFALO PC用スピーカー USB電源 ブラック BSSP29UBK

パイオニア Pioneer SE-A611 ヘッドホン オープン型/オンイヤー ブラック SE-A611 【国内正規品】

Rasbee 400穴 ブレッドボード 8.5*5.5cm 1個

HiLetgo 400穴 ブレッドボード 8.5*5.5cm 5個セット

HiLetgo 400穴 ブレッドボード 8.5*5.5cm 10個セット

KKHMF 3本 20CM セット ブレッドボード・ジャンパーワイヤー ジャンパー線/ケーブル オス-オス/オス-メス/メス-メス Arduino Raspberry pi 用

ESP-01/ESP-12Fへのスケッチのアップロード準備

 ESP-01や開発ボード以外のESP-12Fにプログラムをアップロードするには、USBポートを備えたCP2102やFTDI系のシリアルUSB変換モジュールを併用する必要がある。

 尚、USBポートを備えた開発ボードではないESP-01〜ESP-14単体及びブレイクアウトボード(≒ピッチ変換基板)との組み合わせは、全て同様にシリアルUSB変換モジュールを要する。

 ESP-01の定格電圧は3.3VなのでシリアルUSB変換モジュールも3.3V専用か3.3V/5V兼用なら3.3Vに切り替えて接続する。

Rasbeeオリジナル FT232RL互換 3.3V/5V FTDI/USB/TTL変換アダプタ

 尚、ESP-01や開発ボード以外のESP-12Fは、プログラム書き込み時と実行時、ESP-01では、RSTとGPIO0のHIGH/LOWを巧みに切り替える、ESP-12では、GPIO00/GPIO15をLOWにする一方、実行時には、GPIO00はHIGHにしておく必要があるが、RTS/DTRピン(ホール)のあるFTDIモジュールなら、これらにESP-01のRST/GPIO0をそれぞれ、ESP-12ではRESETを接続することで自動でアップロードできる為、これを使うことをおすすめする。

 ただ、これらRTS/DTR、ブレッドボード上でピンホールにジャンパワイヤを挿す場合、ピンヘッダや3.3V/5V切り替え用ジャンパピンのハンダ部が隆起しているのだが、ピンホールが、この付近にある為、USBシリアル変換モジュール並びに挿したジャンパワイヤを手でうまく押さえる必要はあるだろう。

 なんなら、手で持った方が、安定するだろう。

 ちなみにESP-01については、SPIFFSを使おうにもフラッシュメモリ容量の関係でArduinoOTAは難しい模様。

ESP-12FTDI別電源
RXTX-
TXRX-
RESETRTS-
GPIO00-マイナス
GPIO02-プラス
GPIO15-マイナス
CH_PC-3.3V
VCC-3.3V
GNDマイナス
ESP-01FTDI別電源
RXTX-
TXRX-
RSTRTS-
GPIO0DTR-
CH_PD-3.3V
VCC-3.3V
GNDマイナス

 また、パソコンのUSBは最大500mAと大丈夫そうに思えるし、実際、たいていの場合、書き込みできるが、往々にしてWiFiモジュールは多くの電流を必要とすることがあり、ESP8266も300mAを超えることもあるとのことなのでそれらが要する電流量不足やパソコンのUSBポートの損傷回避などを考慮し、実行時はもちろんのこと、書き込み時も念の為、別電源をとった方がよさ気。

 尚、検証・運用時には、元電源が3.3Vだと過電流により2V程度まで電圧降下し、ESP8266にリセットがかかり、WiFi接続が途切れるなどの状況になる可能性があるので5Vから降圧、更に電圧降下に耐え得るよう、より短時間で通常電圧に戻る負荷過渡応答特性に優れた電圧レギュレータを使う必要がありそう。

 全ての回路で同じとは限らないが、とある回路を作って9V電池で動かしてみたところ、7V切ったあたりで動作が不安定になり、電池を交換したら正常になった。

EasyWordMall 3.3V 5V MB102ブレッドボード用 電源モジュール パワーモジュール

KKHMF MB102ブレッドボード電源モジュール3.3V 5V Arduino Boardハンダ無しブレッドボード用

9V 電池ボックス DCケース5.5*2.1  スイッチ&背面カバーとプラグイン

uxcell バッテリコネクタ 5.5x2.1mm 9Vバッテリー用 接続バッテリー 4個入り

アルカリ乾電池 9V 1本 6LR61/B1P/V

SUCCUL ACアダプター 12V 1A センタープラス スイッチング式 最大出力12W 出力プラグ外径5.5mm(内径2.1mm)PSE取得品

回路・スケッチ

ESP-01/ESP-12スピーカー
ヘッドホン
圧電ブザー
別電源
RXプラス-
TX--
GPIO0/RESET-(マイナスでリセット)
-/GPIO00-プラス
CH_PD-3.3V
VCC-3.3V
GNDマイナス

 スケッチは、ESP8266SAMライブラリのサンプルスケッチSpeak.ino。

 ESP-01の信号出力用ピンには、ESP8266Audioライブラリの説明にある通り、RXピンを使った。

 シリアルモニタで確認するわけでもない為、運用・実行時には、USBシリアル変換モジュールは、不要。

実行

 配線すれば、再生されるはずだが、そうでない場合には、リセットする。

備考

 Speak.inoについては、Arduinoのデモと比べると雑音が多いようで、かなり聴き取りづらい感は否めないが、確かに"Can you hear me now?"、"I can't hear you!"と言っているようだ。

おまけ

 ここで入れたESP8266Audioライブラリのサンプル動かないなぁ...、イマイチ回路もわからないし、...他に何か必要なのか?と思いつつ、ぐぐっていると...kghrlabo/esp32_simple_wav_playerを発見し、試させて頂くことにした。

kghrlabo/esp32_simple_wav_player

 ただ、このesp32_simple_wav_playerライブラリ、ページ末尾にLicenseがTBD(≒「未定」≒「決め兼ねている」≒「後で決める」という意味らしい)とあったので、なんとなく、新たにページを起こすのは控え、ここに追記することにした。

 と言ってもESP8266AudioにもあったのでGPIO25/GPIO26が出力なのもスピーカーやヘッドホンのオーディオプラグの接続もわかるが、やはり、回路がイマイチよくわからないと思っていた中、github.com内を眺めていて目に止まったh-nari/ESP32_bt_speakerの後段にある回路が明快で、そのままいけそうだったので使わせて頂いたところ、ESP32とkghrlabo/esp32_simple_wav_playerで再生できた。

 結果、日本語で「これは、4KHzのモノラル、これは、8KHzのモノラル、これは、16KHzのモノラル、これは、22.05KHzのモノラル」という音声が繰り返された。

 コンデンサには、0.1μFではなく、1μFを、2K(202)の半固定抵抗は、中央あたりにし、調整した際の差異は、よくわからなかったが、いずれにしても、4KHzはロボットっぽいものの、それ以外は、人間の女性らしい自然な声ではっきりと再生されるのを確認できた。

 よって再生するにあたり、音声フォーマットからテキスト変換後、16進数に変換できれば、言語は関係なさそう。

 ちなみに音声合成やテキスト読み上げは、Speech Synthesisだけでなく、Text to Speechもキーワードにして検索してみるのがよさ気。

関連リンク

ウェブ造ホーム前へ次へ