はじめに
Raspberry Pi Picoを使った初めてのシリアル制御プロジェクトへようこそ!このチュートリアルでは、シリアルモニターにコマンドを入力してLEDのオン/オフを切り替えられるシンプルな回路を構築します。シリアル通信、デジタル出力の基本、そしてハードウェアなしでコードをテストするためのVelxioシミュレーターの使い方を学びます。
このプロジェクトは、マイクロコントローラーがコンピューターとどのように通信するかを理解したい初心者に最適です。完了すれば、複数のLED制御、センサー読み取り、さらにはシンプルなメニューシステムの構築にも応用できるようになります。
回路の解説
構築する回路を見てみましょう。Velxioでサンプルを開くと、以下のコンポーネントが表示されます。

- Raspberry Pi Pico (nano-rp2040):動作の頭脳です。制御ピンとしてピンD2を使用します。
- LED (led-status):オン/オフを切り替える緑色のLED。アノード(A)はPicoに、カソード(C)は電流制限抵抗に接続します。
- 抵抗 (r1):LEDに流れる電流を制限し、損傷を防ぐための220Ω抵抗。
配線の詳細
- Pico D2からLEDアノードへ:緑色のワイヤーでPicoのピンD2をLEDのアノード(A)に接続します。これが制御信号です。
- LEDカソードから抵抗へ:灰色のワイヤーでLEDのカソード(C)を抵抗の一端(ピン1)に接続します。
- 抵抗からPico GNDへ:黒色のワイヤーで抵抗のもう一端(ピン2)をPicoのグランド(GND.1)に接続します。
以上です!回路はシンプルですが効果的です。抵抗はLEDの焼損を防ぐために不可欠です。220Ω抵抗と標準的なLEDの順方向電圧約2Vの場合、電流は (3.3V - 2V) / 220Ω ≈ 6mA となり、安全です。
コードの解説
それではコードを見ていきましょう。Velxioでエディターを開くと、以下のArduinoスケッチが表示されます。
// Raspberry Pi Pico — Serial LED Control
// Send '1' to turn LED ON, '0' to turn OFF, '?' for status
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
delay(500);
Serial.println("=== Pico LED Control ===");
Serial.println("Commands: 1=ON 0=OFF ?=status");
}
void loop() {
if (Serial.available()) {
char cmd = Serial.read();
switch (cmd) {
case '1':
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("LED: ON");
break;
case '0':
digitalWrite(LED_BUILTIN, LOW);
Serial.println("LED: OFF");
break;
case '?':
Serial.print("LED: ");
Serial.println(digitalRead(LED_BUILTIN) ? "ON" : "OFF");
break;
default:
if (cmd >= ' ') {
Serial.print("Unknown command: ");
Serial.println(cmd);
}
break;
}
}
}
動作の仕組み
setup():内蔵LEDピンを出力に設定し、シリアル通信を115200ボーで開始、シリアル接続が安定するまで500ms待機し、ウェルカムメッセージと指示を表示します。loop():シリアルバッファに文字が利用可能か確認します。ある場合、それを読み取り、switch文で3つのコマンドを処理します。'1':LEDをオン(HIGH)にして確認メッセージを表示。'0':LEDをオフ(LOW)にして確認メッセージを表示。'?':LEDピンの現在の状態を読み取り、「ON」または「OFF」を表示。- その他の表示可能な文字(ASCII 32以上)は「Unknown command」メッセージを表示。表示不可能な文字は無視されます。
ここで、LED_BUILTINはPicoのオンボードLED(通常ピン25)の定義済み定数です。今回の回路では外部LEDをピンD2に接続していますが、コードは内蔵LEDを使用しています。外部LEDを制御したい場合は、LED_BUILTINを2に変更するか(または定数を定義)、変更してください。この例では内蔵LEDで問題なく動作します。
重要な概念
- シリアル通信:PicoはUSBシリアル経由でコンピューターと通信します。
Serial.begin(115200)でボーレートを設定します。シリアルモニターがこの速度に一致していることを確認してください。 - デジタル出力:
pinMode(pin, OUTPUT)とdigitalWrite(pin, HIGH/LOW)はピン制御の基本です。 - Switch文:複数のコマンドを処理するクリーンな方法です。
if-else文の連鎖よりも効率的です。 - 入力検証:コードは表示不可能な文字を無視し、不明なコマンドについて警告します。これは堅牢なプログラムのための良い習慣です。
よくある落とし穴とデバッグのヒント
- シリアルモニターのボーレート:文字化けが表示される場合、シリアルモニターのボーレートが115200と一致していません。Velxioではシリアルモニターが内蔵されており、自動的に正しいレートを使用します。
- LEDが点灯しない:LEDの向きが正しいか確認してください(アノードをD2に、カソードを抵抗に)。また、抵抗値を確認してください。高すぎるとLEDが暗くなり、低すぎると焼損する可能性があります。
- コマンドが動作しない:正確に「1」「0」「?」を送信しているか確認してください(引用符なし)。コードは1文字を読み取るため、「1\n」を送信すると「1」が最初に読み取られ、改行は無視されます(表示不可能なため)。
- シミュレーターの使用:Velxioのツールバーでコードのコンパイルと実行ができます。
「Run」ボタンをクリックしてシミュレーションを開始します。キャンバスツールバー
には一時停止やリセットなどのコントロールがあります。コンポーネントを追加する必要がある場合は、コンポーネントピッカー
を使用してください。
推奨拡張機能
基本プロジェクトが動作したら、以下の拡張に挑戦してみてください。
- 外部LEDの制御:
LED_BUILTINを2に変更し、回路図のように外部LEDをピンD2に配線します。 - LEDの追加:複数のピンとコマンド(例:‘r’で赤、‘g’で緑、‘b’で青)を使用します。
- PWM調光:
analogWrite()を使用して明るさレベルを設定します。‘0’から’9’の値を送信して0%から100%の明るさにします。 - 双方向通信:‘t’のようなコマンドを送信したときに、Picoがセンサーデータ(例:温度)を送信するようにします。
- メニューシステム:オプションのメニューを表示し、ループを使用して有効な入力を待機します。
行動喚起
実際に試してみませんか?Velxioでライブサンプルを開いて、実験を始めましょう:Pico Serial LED Control on Velxio。ダウンロードもセットアップも不要。ブラウザと好奇心だけあれば大丈夫です。ハッピーハッキング!