🎹

Raspberry Pi Picoで簡易的なシンセをつくりたい

に公開

はじめに

この記事は、「Day1:Circuit Python環境構築 -> Lチカ」の転載です。あまりにも読まれないので(悲しい...)、宣伝用に書いています。全文はこちら。いまのところ全部無料で読めます。

この記事を通してつくりたいもの

要件のイメージ

OTOTOを参考にした簡易的なシンセサイザのようなものをつくりたい。要件のイメージは下記。

  1. Circuit Pythonで環境をつくる
  2. PWMで音階をつくる
  3. 鍵盤をつくる
  4. 外部(今回は光センサ)のセンサでエフェクトをつける
  5. OLEDで音を可視化する
  6. MIDIでPCと連携する

ちなみにOTOTOって

YURI SUZUKIさんがつくった「発明キット」。鍵盤がついていて、音階を表現でき、外部センサでエフェクトを付けられる。参考ウェブはこちら

技術構成

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を使えるようにする

  1. 公式ページから Pico 用 CircuitPython .uf2 をダウンロード
  2. Pico H を BOOTSELボタンを押しながら USB接続
  3. ドライブ RPI-RP2 が出る
  4. ダウンロードした .uf2 をドラッグ&ドロップ
  5. 自動的に再起動し、CIRCUITPY ドライブが出現したらOK

実行手順(VS Code 編)

  1. CIRCUITPY ドライブがFinderで見えることを確認
  2. VS Code で CIRCUITPY フォルダを開く
  3. 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