以前の続きです。Raspberry PiでプログラミングをしてRaspberry Pi Picoをコントロールすることにチャレンジしていますが、これまで、MicroPython(Thonnyを使用)でのプログラミングに挑戦して、Lチカの次に音楽演奏までやってみました。次のステップとして、Lチカのときと同じようにビジュアルプログラミングでも音楽演奏ができるのか試してみたいと思います。今回もRPi 3とRPi 400を使ってやってみようと思ったのですが、普段使っているMacBook Proで確認してからRaspberry Piでやってみることにしました。
〈Piper Makeの場合〉
Picoのビジュアルプログラミングに特化した「Piper Make」ならばきっとできると思い込んで、半ば楽観的な気持ちで試し始めたのですが、それらしいブロックを探していくうちに段々と雲行きが怪しくなってきました。「#Value」の中に「note[A4]」(音階を選ぶことができる)を発見してぬか喜びをしてみたり、「duration[sixteenth]」(音符(音の長さ)を選ぶことができる)と組み合わせてできることがないかと試行錯誤してみたりしましたが、どれもうまくいきませんでした。いくら探してもGPIO PinにOUTする方法が見当たらないのです。
もしかしてと、いつも使っている「CREATIVE」モードではなく「STORY」モードにそれらしいものがあるのではないかと考えて探してみました。Piper Makeを開いた画面の下側に「EXPEDITION TELEPORT MENU」というメニュー一覧があり、デフォルトが「BASE」となっているのですが、その中から「SENSORS」を選ぶと音楽に関係しているようなSTORYが現れます。(「SHOW ALL」をクリックしても見つけられます)これを使って音楽を演奏させてみると、MacBook Pro(PCなどでやっても同じです)から音が出ました。この方法だと、Picoはセンサーとして働くようにプログラムするようになっていて、Picoにスピーカーをつないで音を出すという当初の目的は達成できないことになります。
どうもこの辺りで手詰まりとなってしまいました。
〈BIPESの場合〉
気を取り直して、Picoのビジュアルプログラミングで以前使ったことのある、「BIPES」でスピーカーから音を出すプログラムが作れないかやってみます。BIPESは、Picoに限らずさまざまなマイコンボードに対応しているビジュアルプログラミング環境です。ESP8266系のマイコンボードやESP32系のマイコンボードにも対応しているし、中には、私も持っているものもあります。(そのうち動作確認してみたいと思っています。思っています)また、M5Stackやmicro:bitにも対応しているので、英語表記の精神的な壁を乗り越えてしまえば、かなり使えるツールだと思います。
そう思って確認していくと、選択するマイコンボードによって使えるメニューやブロックが変わるということがわかってきました。マイコンボードを選択する窓で、先述のESP…やM5…などのマイコンボードを選んだときには、「Outputs/Actuators」というメニュー項目が現れて、「Sounds」メニューから音(音楽)を鳴らすブロックを選択することが可能になるのですが、Arduino系のマイコンボードやPicoを選ぶと、「Actuators」だけのメニュー項目に変わってしまい、「Sounds」メニューは出てこなくなります。うぅむ、一筋縄ではいかないですね。
仕方がないので、Thonnyで作ったMicroPythonのプログラムを基に、GPIO PinにPWMを出力するブロックがないか探しました。「Machine」メニューの中に「In/Out Pins」というメニューがあり、その中に「RPi Pico PWM…」というそれらしいものが見つかりました。とりあえずこれを並べてみれば音楽演奏っぽいことができそうだと当たりをつけてやってみました。作ったプログラムは、以下のとおりです。
第一段階として、こんなプログラムで音楽演奏ができることはわかりました。とは言え、プログラムとしては、正直にいうとスマートとは言えないなぁと思ってしまいました。また、Frequencyに入力する数値は、整数値しか受け付けないようで、無理やり整数の近似値を入れているので、出てくる音にも違和感があります。これをベースにしながら、よりスマートに応用範囲の広いプログラムに改良していきたいと考えています。
〈関連情報〉
下準備として、PicoでMicroPythonが使えるようにするファームウェアの設定作業は、過去の拙Blogの記事を参考にしてください。公式WebサイトのPicoでMicroPythonの情報もご確認ください。