🎹
Raspberry Pi Picoで簡易的なシンセをつくりたい
はじめに
この記事は、「Day1:Circuit Python環境構築 -> Lチカ」の転載です。あまりにも読まれないので(悲しい...)、宣伝用に書いています。全文はこちら。いまのところ全部無料で読めます。
この記事を通してつくりたいもの
要件のイメージ
OTOTOを参考にした簡易的なシンセサイザのようなものをつくりたい。要件のイメージは下記。
- Circuit Pythonで環境をつくる
- PWMで音階をつくる
- 鍵盤をつくる
- 外部(今回は光センサ)のセンサでエフェクトをつける
- OLEDで音を可視化する
- MIDIでPCと連携する
ちなみにOTOTOって
YURI SUZUKIさんがつくった「発明キット」。鍵盤がついていて、音階を表現でき、外部センサでエフェクトを付けられる。参考ウェブはこちら。
技術構成
- Raspberry Pi Pico H
- Circuit Python
- 本当はRustでやりたかったけど、非同期ライブラリとMIDIの同居ができなかった
- で、MicroPythonでやりたかったけど、MIDIライブラリが標準対応じゃなかった
- 消去法でCircuitPythonで開発をしていった
- VSCode
- Thonnyでいいかなと思ったら、CircuitPythonの挙動がいまいちだったので、VSCodeに
- Circuit Python
- センサ & パーツ
- スピーカー:https://akizukidenshi.com/catalog/g/g109797/
- アンプ:https://akizukidenshi.com/catalog/g/g108161/
- タクトスイッチ ✕ 8:https://akizukidenshi.com/catalog/g/g108074/
- OLED:https://akizukidenshi.com/catalog/g/g112031/
- 抵抗:1kΩ / 10kΩ
- 積層コンデンサ:0.1μF
Day1:Circuit Python環境構築 -> Lチカのゴール
- CircuitPythonベースで開発する準備を整える
- Raspberry Pi Pico H にファームウェア(CircuitPython)を書き込む
- エディタからコードを転送して、LED を点滅させてみる
- Micro PythonとCircuit Pythonの違いを理解する
Circuit Pythonを選んだ理由
| 項目 | MicroPython | CircuitPython |
|---|---|---|
| MIDI対応 | 🟥 非公式パッチ or 自前ビルドが必要 | 🟩 標準サポート usb_midi モジュールあり |
| 開発のしやすさ | CLIまたはThonny | USBストレージに.py保存で即反映 |
| ドキュメント&事例 | 日本語は多いがやや古い | 英語中心だがAdafruit公式が充実 |
| 推奨デバイス | ESP32, Pico, STM32など | Adafruit製品中心 + Picoサポート |
正直MicroPythonでやりたかったのだけど、USB MIDI周りのパッケージがサポートされてなくてCircuitpython一択という感じだった。
CircuitPythonを使えるようにする
- 公式ページから Pico 用 CircuitPython .uf2 をダウンロード
- Pico H を BOOTSELボタンを押しながら USB接続
- ドライブ RPI-RP2 が出る
- ダウンロードした .uf2 をドラッグ&ドロップ
- 自動的に再起動し、CIRCUITPY ドライブが出現したらOK
実行手順(VS Code 編)
- CIRCUITPY ドライブがFinderで見えることを確認
- VS Code で CIRCUITPY フォルダを開く
- code.pyを更新
LEDを光らせるコード
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = not led.value # ON/OFF トグル
time.sleep(0.5)
Day2予告
PWM で「ド・レ・ミ」を鳴らします。
Discussion