Arduino IDE 2.0がリリースされたので、早速使ってみた。
ESP32 Devボードでシンセサイザーを作って、音楽を鳴らしてみた。
使用環境はZorin OS 16.1 Core。
Zorin OSはUbuntu 20.04をベースとしたWindows 7風なユーザーインターフェイスなLinux.
Ubuntuのノウハウが使えて、シンプルなGUIが魅力。机の上にゴミ箱がないのもいい。
Arduino IDEは電子工作用の定番アプリ。
Arduino_unoやESP32などの組み込みCPU開発に使える。
最新版Arduino IDE 2.0をダウンロードした。
V2ではユーザーインターフェイスが改善され、Visual Studio Codeのようなコード補間機能が使える。
まずはESP32 開発ボードでブザーを鳴らす。
GPIO PIN 13にパッシブブザー、PIN4にボタンスイッチを接続。
Arduino IDEの組み込み関数tone()を使って鳴らしてみる。
tone関数の引数は、Pin番号、音階ノート(周波数)、音の継続時間の3つ。
これでsetup()でドレミ音階、loop()でボタンを押すとベートーベンメドレーを鳴らした。
運命の冒頭、第九の歓喜の歌、エリーゼのために。
実際に鳴らしてみると音は出るがあんまり面白くない。
それで、シンプルなRCローパスフィルターを経由してアンプとスピーカーで鳴らすことにした。
tone()関数による出力はPWM制御によるDuty比率50%の矩形波なので、フィルターで高調波を除去してサイン波に変換。
RCの値は手持ちの220Ω抵抗、0.47μFコンデンサ、直流成分をカットするための100μF電解コンデンサを出力に直列に入れた。
ESP32-DEVボードではPIN12,13,14,32等がPWM制御出力に使える。
これで鳴らしたら見違える(聞き違える)ほど良くなった。
簡単なローパスフィルタでも効果は絶大。抵抗やコンデンサの定数値はありあわせの適当なものでもよいみたい。
次はESP32Servoライブラリを使って複数のポートで鳴らしてみよう。
PIN 12,13,14,32の4つのポートを使ってみる。
各ポートに220Ωの抵抗を接続して、コンデンサに接続する。
ESP32PWM::WriteNote()関数を使うと同時に和声が鳴らせるかと思ったがそうはいかなかった。
どうも、tone()関数と同じく、APIでは複数のポートから同時に鳴らすことはできないようだ。
しかたなく各ポートを順番に鳴らしてみた。