M-BUS Module of AquesTalk pico LSI for M5Stack
市販の音声合成専用LSI「AquesTalk pico LSI」(別売)をM-BUSモジュールとしてM5Stackに取り付けるための半完成基板です。
AquesTalk pico LSIの詳細は、データシートを参照ください。
Data Sheet: 音声合成 LSI 「AquesTalk pico LSI」ATP3011
Data Sheet: 音声合成 LSI 「AquesTalk pico LSI」ATP3012
2022年10月末から基板V04を提供しています。詳細は、スピーカーの接続の項を参照ください。
- ハンダジャンパJP8, JP9を追加しました。
- ランドJ5を追加しました。
(スイッチサイエンス扱い)M5Stack用 AquesTalk pico LSI モジュール基板
(YouTube)"AquesTalk pico LSI" speaks date and time
(YouTube)M-Bus Module of AquesTalk pico LSI drives the built-in speaker of M5Stack
(YouTube)M-Bus Module of AquesTalk pico LSI for M5Stack
(YouTube)M-Bus Module of AquesTalk pico LSI for M5Stack on Core2
組み立てにはハンダ付けが必要です。
左側: ATP3011を搭載、音声アナログ信号をGPIO35に入力するためJP5をショート
右側: ATP3012を搭載、音声アナログ信号をGPIO35に入力するためJP6をショート
写真右: M5Stack 取り付け例、J4に外部スピーカを接続
- AquesTalk pico LSI(28ピンDIPタイプ)1個を搭載できます。
- ATP3011, ATP3012の両方に対応しています。
- パワーアンプ(LM4871)を内蔵し、スピーカーを直接駆動できます。
- AquestTalk pico LSIを3.3Vで動作させ、M-BUSに直結できます。
- プロトモジュールのモールド(別売)を流用し、M5Stackに取り付けできます。
- スピーカー以外のケーブル接続が不要です。
- DIP スイッチで動作モード・通信モードを設定できます。
- インタフェースをI2C, UART, SPIから選べます。
- AquesTalk pico LSIの音声出力をM-BUSから取り込めます。
- M5StackのリセットでAquesTalk pico LSIをリセットします。
- スタンドアロンモードのためのランドがあります。
DIP: Dual In-line Package
I2C: Inte-Integrated Circuit
UART: Universal Asynchronous Receiver Transmitter
SPI: Serial Peripheral Interface
- M-BUS モジュール基板(半完成品)1枚
- スピーカーケーブル 1組(2ピンPH相当コネクタ付き、20cm片端ストリップ済)
(秋月電子通商扱い)コネクタ付コード2P(A)(赤白)DG01032-0045-01(C5679) - 説明書 1部
※ AquesTalk pico LSIは付属しません。
※ プロトモジュールのモールドは付属しません。
※ スピーカーは付属しません。
- AquesTalk pico LSI(秋月電子通商扱い)
音声合成LSI ATP3011F1-PU(ゆっくりな女性の音声) ATP3011F1-PU
音声合成LSI ATP3011F4-PU(かわいい女性の音声) ATP3011F4-PU
音声合成LSI ATP3011M6-PU(男性の音声) ATP3011M6-PU
音声合成LSI ATP3012F6-PU(女性の音声明瞭版) ATP3012F6-PU
音声合成LSI ATP3012R5-PU(小型ロボットの音声) ATP3012R5-PU - プロトモジュール
(スイッチサイエンス扱い)M5Stack用プロトモジュール - スピーカー
4~8Ω程度、1W以上が望ましいです。 - 工具
ハンダ、ハンダごて、ニッパー、六角レンチ(1.5mm)、カッター、ピンセットなど - M5Stack
サンプルプログラムは、主にM5Stack Core Basicで動作を確認しています。 - Arudino-IDEが動作する環境
別売のAquestTalk pico LSI(28ピンDIPタイプ)1個を取り付けます。ATP3011とATP3012とでは挿入する穴が異なります。基板上のシルク印刷に従ってピンを挿入しハンダ付けします。モジュール基板裏面から飛び出しているピンを短く切ってください。
ICソケットを使用すると、プロトモジュールのモールドには収まらなくなります。収まらなくなることを承知の上で1列タイプのICソケットを使用するとATP3011とATP3012を差し換えることができます。モジュール基板裏面からのピンの飛び出しの対処も大変になります。
- ICソケット(秋月電子通商扱い)
丸ピンIC用ソケット (シングル14P) 1×14 6604S-14
丸ピンIC用ソケット (シングル14P) 1×14 JS-11791SFTD-14 ※在庫限り
プロトモジュールのモールドおよびネジ4本(別売)を流用して、M5StackのM-BUSモジュールに仕立てることができます。モールドを基板に取り付ける前に、ボリュームやスピーカー出力コネクタの部分をモールドから切り取ります。
- 付属のケーブルでJ4とスピーカー(付属せず)を接続します。GNDには接続しないでください。
- (基板V4)J5にスピーカーを接続することができます。GNDには接続しないでください。
- (基板V4)M5Stack(Core1)の内蔵スピーカーを使用できます。ATP3011の場合はJP8を、ATP3012の場合はJP9をショートしてください。M5Stack本体からGPIO25を使用しないでください。Core2は内蔵スピーカーの回路構成が異なるため、この方法は使えません。
左側: ATP3011を搭載、GPIO25, 35に接続するためJP8, JP5をショート(基板V4)
右側: ATP3012を搭載、GPIO35に接続するためJP6をショート、J5にスピーカを接続(基板V4)
参考:写真のスピーカーは以下を両面テープで固定しています。ATP3012の場合かろうじて収まります。上に重ねるモジュールやボトムによっては収まりません。
(秋月電子通商扱い)
マイクロスピーカー 赤/黒リード付 8Ω
マイクロスピーカー 青/白リード付 8Ω
M-BUSのGPIO25は、M5Stack内部のオーディオアンプを通して内蔵スピーカーに繋がっています。AquesTalk pico LSIからの音声出力をGPIO25に入力すれば、内蔵スピーカーから音声を出すことができます。ボリューム(VR)の出力を用いることで音量調節が可能です。以下の写真は、ATP3011を載せたモジュールにおいてGPIO25とボリューム出力を導線で接続した例です。ATP3012の場合は、ボリューム出力は1つ左側のピンです。基板V4のJP8, JP9はこれらの導線を埋め込んだものです。M5Stack自身がGPIO25を使わないことが前提です。Core2は内蔵スピーカーの回路構成が異なるため、この方法は使えません。
VR: Variable Resistor
-
J2は、ICSPです。コネクタ等は実装していません。使用にはピンヘッダをハンダ付けするなどの処置が必要です。ICSPのVCCはAquesTalk pico LSIの電源端子に繋がっているほか、M-BUSの3.3Vにも繋がっています。ICSPは、モジュール基板をM5Stackから切り離し、単体にして接続してください。
ICSP: In Circuit Serial Programming -
J3は、スタンドアロンモードで使用するPC0-3およびGNDの端子です。コネクタ等は実装していません。使用には信号ケーブルを直接ハンダ付けするなどの処置が必要です。
M5Stack用 AquesTalk pico LSIモジュールをM-Busエクステンションに載せ、ダイオードマトリクススイッチ16基板を接続しています。M5Stackの電源とリセットを使用しています。
(スイッチサイエンス扱い)M-Busエクステンション基板キット
(スイッチサイエンス扱い)ダイオードマトリクススイッチ16基板
動作モードおよび使用するインタフェース(通信モード)に合わせて、モジュール基板上のDIPスイッチを設定します。設定にはピンセットなどが必要です。おすすめはI2C接続です。出荷時の設定は、セーフモード・I2C接続です。DIPスイッチの設定はリセット時に反映されます。AquesTalk pico LSIのリセットはM5Stackのリセットに繋がっています。
1 | 2 | 3 | 4 | 動作モード | 通信モード | 備考 |
---|---|---|---|---|---|---|
OFF | OFF | OFF | ON | コマンド入力モード | I2C | I2CアドレスはEEPROMに設定した値(初期値0x2E) |
OFF | ON | OFF | ON | セーフモード | I2C | I2Cアドレスは強制的に0x2E |
OFF | OFF | OFF | OFF | コマンド入力モード | UART | 設定されたスピードで動作 (*1) |
OFF | ON | OFF | OFF | セーフモード | UART | 強制的に9600bpsで動作 |
OFF | - | ON | OFF | - | SPI mode 3 | - |
OFF | - | ON | ON | - | SPI mode 0 | サンプルプログラムはSPI mode 0で動作 |
ON | OFF | - | - | スタンドアロンモード | - | PC0-3の信号入力によりプリセットメッセージを選択して再生 |
ON | ON | - | - | デモモード | - | プリセットメッセージを順番に自動再生 |
※ 1, 2, 3, 4は、DIPスイッチの番号。DIPスイッチはON=GNDのため、ON=0, OFF=1です。
(*1) ATP3011の場合、SLEEP解除後の'?'送信で自動設定します。ATP3012の場合EEPROMに設定します。
モジュール基板裏面のジャンパJP1-JP9をハンダで短絡(クローズ)することにより、GPIOとAquesTalk pico LSIの信号ピンを接続できます。
ジャンパ | GPIO(Core1) | GPIO(Core2) | AquesTalk pico LSI | 出荷時 |
---|---|---|---|---|
JP1 | 16 | 13 | UART-TX | オープン |
JP2 | 19 | 38 | SPI-MISO | オープン |
JP3 | 5 | 33 | SPI-SS | オープン |
JP4 | 13 | 19 | SLEEP | オープン |
JP5 | 35 | 35 | Analog Out of ATP3011 | オープン |
JP6 | 35 | 35 | Analog Out of ATP3012 | オープン |
JP7 | GND | GND | Shut Down of Power Amplifier | クローズ |
JP8 | 25 | 25 | Analog VR Out of ATP3011 | オープン |
JP9 | 25 | 25 | Analog VR Out of ATP3012 | オープン |
使用するインタフェースに合わせてJP1, JP2, JP3をハンダで短絡(クローズ)します。I2Cの場合はJP1, JP2, JP3を全てオープンのままで使用できます。他の用途に影響がなければJP1, JP2, JP3を短絡(クローズ)することで全てのインタフェースを使用可能です。出荷時はオープンです。
インタフェース | JP1 | JP2 | JP3 | AquestTalk pico LSIピン=GPIO(Core1) | AquestTalk pico LSIピン=GPIO(Core1) |
---|---|---|---|---|---|
I2C | - | - | - | SDA=21, SCL=22 | SDA=21, SCL=22 |
UART | クローズ | - | - | TX=16, RX=17 | TX=13, RX=14 |
SPI | - | クローズ | クローズ | SCK=18, MISO=19, MOSI=23, SS = 5 | SCK=18, MISO=38, MOSI=23, SS = 33 |
SDA: Serial DAta
SCL: Serial CLock
RX: Receive
TX: Transmit
MISO: Master In Slave Out
MOSI: Master Out Slave In
SCK: Serial ClocK
SS: Slave Select
AquesTalk pico LSIのSLEEPピンをGPIO13(Core2ではGPIO19)に接続できます。SLEEP=LowでAquesTalk pico LSIがスリープ状態になります。ATP3011のUART接続において9600bpsより速い速度が必要な場合、「セーフモード」ではなく「コマンド入力モード」に設定し、速度設定のためにSLEEPを使用します。出荷時はオープンです。
AquesTalk pico LSIの音声出力をGPIO35経由でM5Stackに取り込むことができます。ATP3011の場合はJP5を、ATP3012の場合はJP6をハンダで短絡(クローズ)します。出荷時はオープンです。
JP7がクローズ(短絡)の場合、パワーアンプのシャットダウン(SD: Shut Down)信号をGNDに接続しパワーアンプを常に動作状態とします。JP7のハンダを取り除く(オープン)にすると、AquesTalk pico LSIのPLAY信号(負極性)がシャットダウン信号となり、パワーアンプの消費電力を減らすことができます。この設定では音声再生の前後でノイズが発生します。出荷時はクローズ(短絡)です。
AquesTalk pico LSIの音声出力をボリューム調節後にGPIO25経由でM5Stack内蔵アンプ・スピーカーに接続することができます。ATP3011の場合はJP8を、ATP3012の場合はJP9をハンダで短絡(クローズ)します。出荷時はオープンです。
AquesTalk pico LSIをM5Stackに接続し、I2C(Wire), UART(Serial), SPIで動作させるプログラムです。デモの内容は同じです。Arduino-IDE環境で使用します。モジュール基板の設定を予め使用するインタフェースに合わせておく必要があります。
AqeusTalk pico LSIをI2Cで動作させるサンプルプログラムです。
AqeusTalk pico LSIをUARTで動作させるサンプルプログラムです。
AqeusTalk pico LSIをSPIで動作させるサンプルプログラムです。
Core2にモジュールを装着して、AqeusTalk pico LSIをI2Cで動作させるサンプルプログラムです。M5Stack Core1との違いは以下です
- includeするヘッダーファイル
- WireのGPIOピン番号、SleepのGPIOピン番号
ボタンを押すと、ソースコードのpreset_msgを発声します。初期値はpreset_msg[0]です。
M5 | ボタン | 停止中 | 発声中 |
---|---|---|---|
M5Stack | A | 1つ前のpreset_msgを発声 | 発声を中断して1つ前のpreset_msgを発声 |
M5Stack | B | 現在のpreset_msgを発声 | 発声を中断して停止 |
M5Stack | C | 1つ後のpreset_msgから連続して発声 | 発声を中断して1つ後のpreset_msgから連続して発生 |
-
SLEEP ピンをHighにする(デフォルト: 実行する)
JP4をクローズ(短絡)すると、GPIO13(Core2ではGPIO19)とAquesTalk pico LSIのSLEEPピンとが接続します。SLEEPをHIGHにしてSLEEPでない状態にします。 -
UARTスピードを設定(ATP3011が対象。UARTのみ。デフォルト: 実行しない)
AquesTalk pico LSI (ATP3011) のUARTスピードを設定します。GPIO13(Core2ではGPIO19)がAquesTalk pico LSIのSLEEPピンと接続している必要があります。 -
UARTスピードを書き換え(ATP3012が対象。UARTのみ。デフォルト: 実行しない)
AquesTalk pico LSI (ATP3012) のUARTスピードを書き換えます。 -
I2Cアドレスを書き換え(I2Cのみ。デフォルト: 実行しない)
AquesTalk pico LSIのI2Cアドレスを書き換えます。 -
プリセットメッセージを書き込む(デフォルト: 実行しない)
AquesTalk pico LSIにプリセットメッセージとして、ソースコード内のpreset_msgデータを書き込みます。時間がかかります。 -
EEPROMデータをダンプ(デフォルト: 実行しない)
AquesTalk pico LSIのEEPROMデータをシリアルモニタに表示します。時間がかかります。 -
AquesTalk pico LSIのバージョンをシリアルモニタに表示
-
チャイムJを発声
-
チャイムKを発声
AquesTalk pico LSIを使用するためのライブラリです。
I2C, UART, SPI共通の基本クラスです。接続するインタフェースに依ってI2C(Wire), UART(Serial), SPIのいずれかの派生クラスを使用する必要があります。
AquesTalk pico LSIに文字列msgを送信します。送信の様子をシリアルモニタに出力します。純粋仮想関数として定義し、使用するインタフェースに合わせて派生クラスで実装します。
AquesTalk pico LSIから文字列を受信します。受信完了は、'>'または'*'で判断します。純粋仮想関数として定義し、使用するインタフェースに合わせて派生クラスで実装します。
発声中などAquesTalk pico LSIが処理中の場合trueを応答します。falseの場合発声が終了したと判断できます。純粋仮想関数として定義し、使用するインタフェースに合わせて派生クラスで実装します。I2C, SPIではおのずとポーリングができますが、UARTではSend()による明示的なポーリングが必要です。
AquesTalk pico LSIからの応答をシリアルモニタに出力します。res_length_to_showに2を渡すと、応答が1文字以下の場合にシリアルモニタへの出力を抑止できます。I2C、SPIのポーリングによる応答が正常('>', 1文字)の場合のシリアルモニタへの出力を省略できます。
AquesTalk pico LSIのEEPROM (アドレス0x000-0x3FF) の値をシリアルモニタに出力します。
AquesTalk pico LSIのEEPROMにデータを書き込みます。
AquesTalk pico LSIのEEPROMにプリセットメッセージを書き込みます。書き込みの様子をシリアルモニタに出力します。
発話速度をEEPROMに設定します。50~300を設定できます。デフォルトは100です。
文末ポーズの長さをEEPROMに設定します。256~65535を設定できます。65535を設定すると自動になります。デフォルトは65535です。
AquesTalk pico LSI (ATP3012) のシリアル通信速度を書き換えます。デフォルトは9600です。
AquesTalk pico LSIのI2Cアドレスを書き換えます。デフォルトは0x2Eです。
AquesTalk pico LSIとI2Cでインタフェースする派生クラスです。
AquesTalk pico LSIを接続するI2CとI2Cアドレスを指定します。
AquesTalk pico LSIとUARTでインタフェースする派生クラスです。
AquesTalk pico LSIを接続するUARTを指定します。
AquesTalk pico LSIとSPIでインタフェースする派生クラスです。
AquesTalk pico LSIを接続するSPIとSSとして使用するGPIOを指定します。
M5StackのLCDに日付・時刻を表示する置時計のデモです。
- リセット後はsetupの状況を表示します。setupが完了しボタンCを押すと時計表示になります。
- ボタンBで日付を音声で読み上げます。ボタンCで時刻を音声で読み上げます。
WiFi動作中に発声すると電圧低下を検出してリブートすることがあります。