ESP32でYMF825音源のデモ(音色データ、音階、和音)

ヤマハのFM音源YMF825をArduino UNOで制御できましたので、ESP32に移植しました。
ESP32で使うと何がうれしいか !! —- >> タッチセンサーとBLEが使えます。

Arduino UNOの例は下記の記事を参照してください。
http://keisoku-lab.mond.jp/2018/02/09/ヤマハfm音源lsi-ymf825搭載モジュールのデモプログラム/

ESP32は3.3V系ですから、5V系のUNOで使っていたYMF825モジュールを接続するのはちょっと注意が必要です。ウダ電子の公式ページでは5Vと3.3V電源を接続し、抵抗を外し、ハンダを盛ってジャンパーする旨書かれています。3.3V単独電源になるなら頑張れますが、5Vも供給しなければいけないのは面倒ですから、YMF825モジュールは5Vのままで、SPIの信号を調整する方向で考えます。信号線はSCK, MISO, MOSI, SSとリセット信号の5本です。ESP32から出力する信号は3.3VなのでそのままでもYMF825に伝わりますので気にしないことにします。ESP32に5V信号が入ってくると壊れてしまいますが、入力はMISOだけです。MISOはレジスタの値を読み取る時に使われますが、読まないと決めればつなぐ必要がないことに気がつきました。SPIライブラリの中ではMISOも指定しないとエラーになりますのでMISOも割り当てますが、配線はしません。

OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA

但し、後日何か問題が起こった時に配線チェックをして、抜けている線を発見すると反射的に結線してしまう可能性がありますので注意が必要です。何気なくMISOを結線するとESP32を壊してしまいます。Vfが2VぐらいのLEDの+側をYMF825のMISO、-側をESP32のMISO入力端子に接続しておけば、思い出すきっかけにもなりますし、破壊する心配も無くなります。

ESP32のSPIでYMF825を使う方法は
ywabikoさんの記事がたいへん参考になりました。

YMF825モジュール <<—->> ESP32
RST_N <<—->> IO32
5V <<—->> USB 5V
GND <<—->> USB GNDとESP32 GND
SCK <<—->> IO18
MISO <<—->> 接続しない (IO19)
MOSI <<—->> IO23
SS <<—->> IO5

(180213)

 

ESP32(MH-ET LIVE ESP32 MiniKIT)のタッチセンサー

ESP32には10本ものタッチセンサーがあります。しかも、インタラプト関数が用意されているので便利に使えそうです。

OLYMPUS DIGITAL CAMERA

ESP32の安価でコンパクトなボードを購入したので試しに使ってみようと思います。特にアフィリエイトが得られるわけではありませんが、購入先は下記URLです。

https://ja.aliexpress.com/item/MH-ET-LIVE-D1-mini-ESP32-ESP-32-WiFi-Bluetooth-Internet-of-Things-development-board-based/32816658883.html?spm=a2g0s.9042311.0.0.u50SMy

このボードはLチカ用LEDが付いているのが原因だと思いますが、T2は使えません。また、T8とT9が入れ替わっているようです。

T0–IO04
T1–IO0
T3–TDO
T4–TCK
T5–TDI
T6–TMS
T7–IO27
T8–IO32
T9–IO33

フラットケーブルを使ったら60ぐらいあったタッチセンサーの出力が20ぐらいまで低下して、検知できるギリギリですがなんとか使えています。

(18.02.11)

 

ヤマハFM音源LSI YMF825搭載モジュールのデモプログラム

Arduino UNO互換機でYMF825を動作させてみました。

複数の音色パラメータから音色データを生成して、西洋音階で和音を鳴らします。ヘッドフォンアンプが付いていますが、スピーカーにつないでいます。

購入先はスイッチサイエンスです。
https://www.switch-science.com/catalog/3399/

OLYMPUS DIGITAL CAMERA

音の雰囲気が伝わるように動画を作りました。
https://www.facebook.com/koji.ohashi.12/videos/1635981226477849/

音色パラメータが4種類入っているのでプログラムが長くなっていますが、実際に使えるものを作ろうとするとこのぐらいの機能は必要になるのでまとめてみました。

lineNo.304-307にバグがありましたので修正しました。(180213)

(18.02.09)

参考にさせてもらったサイト

https://kanpapa.com/today/2017/08/ymf825-fm-board.html

https://sites.google.com/site/himagine201206/home/arduino/ymf825/030

 

NeoPixelのDemo

ArduinoのNeoPixelライブラリのサンプルは参考になりますが、盛りだくさん過ぎて分かりにくい印象があります。

OLYMPUS DIGITAL CAMERA

シンプルでカラフルに書いてみました。

ついでに、「グルグル巻けば円筒ディスプレイ」用のDemoプログラムも紹介します。10mmピッチのLEDを200個φ60mm(よりも少し太い)のボトルに巻きつけました。一周21個で縦に9個の(狙いは20個✖️10個でしたが、)円筒ディスプレイです。

 

ESP32のArduino IDEでBLEを試してみました

ESP32はWiFiに加えてBLEも使えるということで注目されています。Arduino IDEでは、2017年の10月頃からBLEがサポートされ始めました。

ボードも入手しやすくなってMH-ET LIVE D1 mini ESP32という小型のボードは$7.5ぐらいでAliExpressで購入できました。

https://ja.aliexpress.com/item/MH-ET-LIVE-D1-mini-ESP32-ESP-32-WiFi-Bluetooth-Internet-of-Things-development-board-based/32816658883.html?spm=a2g0s.9042311.0.0.Zbsxqj

今回はそのESP32を2個使って、サーバーとクライアントで動作させてみました。どちらもArduino IDEでプログラミングできるので楽なのではないかと思います。サーバーには照度センサーNJL7502Lがあり、クライアントが接続すると照度のデータを送ります。クライアントが接続している間はゆらゆら人形が揺れます。クライアントはデータをもらってシリアルでPCにデータを表示します。

電気回路:
3.3Vを照度センサの+側(長い足)、照度センサの-側(短い足)は10kΩでGNDに接続して、短い足の電圧をアナログ入力AI6(IO34)に接続します。データシートを見ると1000luxで3Vの出力になるようです。ゆらゆら人形はIO5とGNDに接続します。ゆらゆら人形はDaisoのソーラーゆらゆらを改造して、コイル両端を回路から外して外部に取り出します。
クライアント側はUSBでPCに接続します。

BLEライブラリの導入には以下のURLの情報を参考にしました。
「Arduino IDEでESP32 BLEライブラリを導入」
https://qiita.com/tomorrow56/items/afa06e206eec9fafcc7a

 

OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA

BLEライブラリはArduinoっぽくないので、「山勘で書いて、動いた」というレベルですのでもっと良いサンプルを誰かが書いてくれると思います。現状で分かっている問題点としては、サーバーが電源OFFで停止するとクライアントがハングアップして、クライアントの電源をOFF-ONしないと復帰しない点です。

 

サーバー側のスケッチ(ベースにしたのはBLE_notify)

 

クライアント側のスケッチ(ベースにしたのはBLE_client)