Raspberry Pi Picoの授業計画:MicroPythonで進める6週間の授業
Raspberry Pi Picoの授業計画です。1回40分のMicroPythonの授業を6週間分、無料のプロジェクト、Thonnyの準備、24人分の教材リスト、授業例とともに紹介します。
Raspberry Pi Picoの授業計画を探しているなら、結論は次のとおりです。期間は6週間、授業は週1回40分、生徒は2人1組で、毎週MicroPythonの新しい考え方を1つだけ学びます。1週目は、ThonnyのREPLに1行入力するだけで内蔵LEDを点灯させます。続いて変数とタイミング、関数、ボタンと条件、PWMを使った音と距離センサーへと進み、最終週にはリストとforループで5つのボタンのピアノを作ります。毎週のプロジェクトは回路図、部品リスト、コード付きでBlueGraysで無料で使えるので、生徒にプレミアムは必要ありません。この計画はRaspberry Pi PicoまたはPico WとThonnyを使い、コードを書いたことのない中学生と高校生を対象にしています。
まず、PicoとMicroPythonがなぜ教室に向いているのかを見てから、最初の授業の前の準備に移ります。MicroPythonのUF2ファイル、BOOTSELボタン、Thonnyでのインタープリターの選び方、学校のパソコンで気をつけたい点です。その後、すべての考え方にArduino C++での書き方を添えた週ごとの計画、24人のクラス向けの教材リスト、分単位の授業例、3つの短いコード例、評価表、授業でよく起きるトラブルの解決法を紹介します。Arduinoとブロックを使って同じ考え方で8週間かけて進める版はブロックプログラミングの授業計画で紹介しました。この計画はその内容を繰り返すものではなく、最初からテキストのコードで始めたいクラスや、ブロックの次にPythonに進みたいクラスに向けたものです。

なぜRaspberry Pi PicoとMicroPythonなのか
Picoは、Raspberry Piが自社のRP2040チップを中心に作った小さなマイコンボードです。パソコンではなく、Arduinoと同じように1つのプログラムを繰り返し実行します。教室で役立つ強みは3つあります。1つ目はMicroPythonです。これはマイコン向けに軽量化したPythonで、読みやすく、セミコロンも波かっこもありません。そのため、情報の授業でPythonに触れた生徒は、同じ言語でLEDやブザーを動かせます。2つ目はコンパイルがないことです。Thonnyで「実行」を押した瞬間にコードがボード上で動くので、小さな変更のたびにコンパイルと書き込みを待つ必要がありません。40分の授業なら、同じ時間でずっと多くの試行ができます。3つ目はREPLです。Thonnyのシェルに1行入力してEnterを押すと、ボードがすぐに実行します。生徒がled.on()と入力してLEDが点灯すれば、プログラミングとはボードに命令を与えることだと5分で理解できます。価格が安く、ボードをブレッドボードにそのまま挿せるので、2人1組も現実的です。では、Arduinoのほうが簡単なのはどんな場合でしょうか。字を読めるようになったばかりの年少の生徒が相手の場合や、手持ちの教材の大半が5 Vのモジュールの場合は、Arduinoとブロックで始めたほうが予想外のトラブルは少なくなります。ボードの仕様とピン配置はRaspberry Pi Picoとは?を参照してください。
| 項目 | Raspberry Pi Pico+MicroPython | Arduino Uno+C++ |
|---|---|---|
| ピンの電圧 | 3.3 V(5 V非対応) | 5 V |
| 言語とエディター | MicroPython、Thonny | C++、Arduino IDE |
| コードの実行 | 「実行」を押すとすぐ動く、コンパイル不要 | 変更のたびにコンパイルと書き込み |
| 1行ずつのテスト(REPL) | できる:Thonnyのシェルの>>> | できない |
| アナログ入力 | 3ピン(GP26〜GP28)、read_u16()で0〜65535 | 6ピン(A0〜A5)、analogRead()で0〜1023 |
| USBポート | micro USB | USB-B(Uno R3) |
| ブレッドボード上では | Pico H / WHはピンヘッダー付きで、そのまま挿せる | ボードは外に置き、ジャンパーワイヤーで配線 |
| 価格 | たいていUnoよりかなり安い | より高い |
最初の授業の前に:MicroPythonとThonny
- ボードの種類を確認する:Pico、Pico W、Pico 2、Pico 2 Wでは、それぞれ別のMicroPythonファイルが必要です。ボードの印字を確認し、MicroPythonの公式ダウンロードページから、そのボード用の最新の.uf2ファイルをダウンロードしてください。ファイルを間違えると、ボードが起動しないか、Wi-Fiが動きません。
- BOOTSELを押したまま接続する:USBポートの横にある白いBOOTSELボタンを押したままケーブルをパソコンに挿し、それからボタンを離します。パソコンにRPI-RP2というドライブが表示されます(Pico 2ではRP2350という名前です)。
- UF2ファイルをコピーする:.uf2ファイルをそのドライブにドラッグします。数秒でボードが再起動し、ドライブは消えます。これはエラーではなく、MicroPythonがインストールされたという意味です。MicroPythonはボードに残るので、授業のたびにインストールし直す必要はありません。
- Thonnyでインタープリターを選ぶ:「ツール」>「オプション」>「インタプリタ」で「MicroPython (Raspberry Pi Pico)」を選び、ポートは自動検出のままにします。Thonnyのウィンドウの右下をクリックしても同じ選択ができます。
- 接続をテストする:下のシェルに>>>のプロンプトが表示されるはずです。print("hello")と入力してEnterを押し、返事が返ってくれば、ボードは授業の準備ができています。
学校のパソコンへのインストールは、授業当日まで残さないでください。1週間前にはICT担当者に相談しましょう。ThonnyはWindows、macOS、Linuxで動作し、専用のPythonが同梱されているので、Pythonを別にインストールする必要はありません。Windows向けにはインストール不要のポータブル版もあり、ソフトウェアのインストールがICT担当者に限られている管理の厳しいパソコン教室では、とても助かります。Windows 10と11は、追加のドライバーなしでPicoをシリアルポート(COM)として認識します。USBメモリを禁止している学校もあり、その場合は生徒のパソコンにRPI-RP2ドライブが表示されないことがあります。ただ、事前に自分のパソコンでボードにMicroPythonをインストールしておけば問題ありません。授業ではシリアル接続しか使わないからです。最後に、Thonnyの保存ダイアログにある2つの選択肢を生徒に見せてください。「このコンピュータ」はファイルをパソコンに、「Raspberry Pi Pico」はボードに保存します。どちらを選んだかわからないペアは、6週目に自分のコードを見つけられなくなります。
Raspberry Pi Picoの6週間の授業計画
各授業は40分、2人1組を想定しています。表のプロジェクトはすべてBlueGraysで無料で使え、最初の3週間のプロジェクトにはコードの横にブロック表示もあります。順番には意図があります。まず出力(LED)、次に変数とタイミング、関数、続いて入力と条件、PWMを使った音とセンサー、最後にリストとループです。毎週、前の週の内容に新しい考え方を1つだけ積み重ねます。最後の列は同じ考え方をArduino C++で書いたもので、後でArduinoに進む生徒への橋渡しになります。C++側を詳しく知りたい場合はArduinoプログラミングの基本を参照してください。
| 週 | 目標 | BlueGraysの無料プロジェクト | MicroPythonの新しい考え方 | Arduino C++での書き方 |
|---|---|---|---|---|
| 1週目 | Picoを知る、最初のプログラム、デジタル出力 | Raspberry Pi Picoの内蔵LEDを点滅(PicoとPico W)、Raspberry Pi Picoで外付けLEDを点灯(GP14+ブレッドボード) | REPL(>>>)、from machine import Pin、Pin(14, Pin.OUT)、led.on() / led.off()、time.sleep(0.5)、while True:、インデント | pinMode(14, OUTPUT); digitalWrite(14, HIGH); delay(500); void loop()(出力、待ち時間、繰り返し) |
| 2週目 | 変数、タイミング、2つの出力 | Raspberry Pi Picoで2個のLEDを交互に点滅(GP14+GP13)、Raspberry Pi Picoでパトカーの点滅灯(赤+青、GP11+GP12) | WAIT_MS = 300(変数)、led.value(1)、led.toggle()、sleep_ms(300) | int waitMs = 300; digitalWrite(13, !digitalRead(13)); delay(waitMs);(変数と反転) |
| 3週目 | 繰り返しを減らす:関数 | Raspberry Pi Picoで信号機(3個のLEDを順に点灯、GP11/GP12/GP13) | def all_off():、関数の呼び出し、sleep(1.5)で小数の秒数 | void allOff() { … } ; delay(1500);(関数の定義と待ち時間) |
| 4週目 | 入力、条件、状態 | Raspberry Pi Picoで信号機の4モードをボタンで切り替え(ステートマシン、GP11-13 + GP4) | Pin(4, Pin.IN, Pin.PULL_UP)、if / elif / else、mode = (mode + 1) % 4、time.ticks_ms()(内部プルアップ、条件分岐、剰余、経過時間) | pinMode(4, INPUT_PULLUP); if / else if / else; millis()(内部プルアップと条件分岐) |
| 5週目 | センサーと音 | Raspberry Pi Picoの駐車センサー(HC-SR04+LED3個+ブザー) | PWM(Pin(17))、freq()、duty_u16()、time_pulse_us()、def … return(PWMと戻り値) | tone(17, 1200); pulseIn(); return(音、パルス幅、戻り値) |
| 6週目 | リスト、forループ、最終プロジェクト | Raspberry Pi Picoのボタンピアノ(ボタン5個+ブザー+メロディー録音) | NOTE_HZ = (523, 587, 659, 698, 784)、for … in、5つのボタンを同じコードで扱う | int notes[] = {523, 587, 659, 698, 784}; for (int i = 0; i < 5; i++)(配列とforループ) |

計画を進めるときは、毎週の最後に生徒が値を1つだけ変えることをルールにしてください。1週目の内蔵LEDのプロジェクトはLEDを「LED」という名前で呼び出すので、PicoでもPico Wでも同じように動きます。外付けLEDはGP14、つまり物理ピン番号19につなぎます。そのすぐ隣の18番ピンがGNDです。2週目は「パトカーの点滅灯」のWAIT_MSを300から80に下げると、1つの変数で2つのLEDのリズムが同時に変わることがわかります。3週目の「信号機」はループの中でall_off()を3回呼び出しています。生徒に関数を消して同じ処理を手で書いてもらうと、9行も積み重なるのを見て、関数がなぜあるのかを自分から説明してくれるはずです。4週目は中級のプロジェクトです。ボタンはPULL_UPで配線されているので、押すと0を読み取り、押すたびにモードが通常、赤のみ、黄色の点滅、消灯の順に切り替わります。コードが長いので、まず「コードを理解」タブのステップで読み進めてください。5週目のHC-SR04は5 Vで動くので、ECHOを分圧回路経由でつなぐのを忘れないでください。GREEN_CM 100、YELLOW_CM 50、RED_CM 25、STOP_CM 10の値をいじってみると、生徒はしきい値という考え方をつかめます。センサーの仕組みはHC-SR04距離センサーの記事で、PWMで音を出す方法はブザーとは?で紹介しています。プロジェクトでは周波数を変えるので、パッシブブザーを使ってください。6週目のピアノは、523〜784 Hzのドからソまでの5つの音を鳴らし、ドのキーを1秒長押しするとメロディーの録音が始まります。このレベルではコード全体は長すぎるので、すべてを入力させるのではなく、NOTE_HZリストの周波数を変えて自分だけの音階を作ってもらいましょう。
毎週のまとめの質問
- 1週目:led.on()とtime.sleep(0.5)の行を入れ替えると何が起きますか?while True:の下の行が右に下がって始まるのはなぜですか?
- 2週目:WAIT_MSを300から1000に上げると、点滅はどう変わりますか?toggle()は1つでどの2行の代わりになりますか?
- 3週目:all_off()関数がなければ、あと何行書く必要がありますか?関数を定義することと呼び出すことの違いは何ですか?
- 4週目:PULL_UPを使うボタンを押すと、button.value()が0を返すのはなぜですか?modeが3のときにボタンを押すと、modeはいくつになりますか?
- 5週目:HC-SR04のECHOピンをPicoに直接つながないのはなぜですか?duty_u16(0)の行はブザーをどうしますか?
- 6週目:ピアノに6つ目のキーを加えるには、コードのどのリストを変える必要がありますか?
24人のクラス向けの教材リスト
24人の生徒を2人1組に分けると12グループになります。予備を1つ加えて13セット用意してください。Picoは安いので、ほとんどの学校で3人組ではなく2人組にでき、生徒1人あたりのキーボードに触れる時間が増えます。3人組にする場合は、数を9セットに減らしてください。ThonnyはUSB経由でPicoと通信するので、各グループにパソコンが1台必要です。スマホやタブレットは、BlueGraysでその週のプロジェクト、回路図、「コードを理解」タブを開いておくのに使います。はんだ付けが必要なものはなく、すべてブレッドボードに挿すだけです。
| 品目 | 1グループあたり | クラス全体(12グループ+予備1) | 使う週 |
|---|---|---|---|
| Raspberry Pi Pico HまたはPico WH(ピンヘッダーはんだ付け済み) | 1 | 13 | 全週 |
| micro USBのデータ通信用ケーブル | 1 | 13 | 全週 |
| ブレッドボード(400穴または830穴) | 1 | 13 | 全週 |
| オス-オスのジャンパーワイヤー | 20 | 約260 | 全週 |
| 5 mmのLED(赤、黄、緑、青) | 4 | 約60 | 1〜5 |
| 220 Ωの抵抗 | 4 | 約60 | 1〜5 |
| 押しボタン(4本足) | 5 | 約70 | 4、6 |
| パッシブブザー | 1 | 13 | 5、6 |
| HC-SR04超音波距離センサー | 1 | 13 | 5 |
| 1 kΩと2 kΩの抵抗(ECHOの分圧回路) | 1 + 1 | 13 + 13 | 5 |
| Thonnyを入れたパソコン | 1 | 12 | 全週 |
| 10 kΩのポテンショメーター(任意、ADC用) | 1 | 13 | 早く終わったグループ |
授業例:1週目、最初のプログラム
以下は1週目の計画です。セットアップのトラブルが出るのはこの回なので、最初の授業がいちばんリスクの高い回です。事前にボードへMicroPythonをインストールし、パソコンにThonnyを入れてあることを前提にしています。ほかの週でも同じ骨組みを使えます。ウォームアップ、一緒に読む、予想する、回路を組む、コードを実行する、値を1つ変える、まとめの質問という流れです。80分の2コマ続きの授業なら、「値を1つ変える」段階を長めに取り、各ペアにまとめの質問の答えを発表してもらいましょう。
| 時間 | 段階 | 内容 |
|---|---|---|
| 0〜5分 | ウォームアップ | 質問:ボードに「LEDをつけて」と伝えるには何を言えばいいでしょうか?答えを黒板に書きます。ボードを配り、BOOTSELボタンとUSBポートの場所を示します。 |
| 5〜12分 | REPLで最初の命令 | プロジェクターにThonnyのシェルを映し、from machine import Pin、led = Pin("LED", Pin.OUT)、led.on()と入力します。ペアは自分のパソコンで同じ3行を入力し、led.off()で消します。 |
| 12〜18分 | プロジェクトを一緒に読む | BlueGraysで内蔵LEDの点滅プロジェクトを開きます。まず「ブロックで表示」をオンにしてブロックを読み、次にコードを読みます。while Trueとインデントについて話し合います。 |
| 18〜22分 | 実行 | コードをThonnyに貼り付け、「実行」(F5)を押します。LEDが0.5秒ごとに点滅します。止めるための「停止」ボタンも見せます。 |
| 22〜32分 | 外付けLEDの回路 | USBを抜きます。GP14(19番ピン)→ 220 Ω → LEDの長い足、短い足 → GND(18番ピン)。外付けLEDのプロジェクトのコードを実行します。役割は組み立て係と確認係です。 |
| 32〜37分 | 値を1つ変える | time.sleep(0.5)を0.1に、次に2に変えます。希望するペアは、LEDをGP15に移し、コードの14を15に変えてもかまいません。 |
| 37〜40分 | まとめの質問 | 紙で1問:while True:の下の行が右に下がっていなかったら、どうなるでしょうか?ボードを抜き、番号付きの箱に戻します。 |
授業で使えるMicroPythonの短い例3つ
PicoとPico Wの間で最も混乱しやすいのが内蔵LEDです。初代PicoではLEDがGP25につながっているので、古い例ではPin(25)が使われています。Pico WではLEDがWi-Fiチップにつながっていて番号付きのGPピンがないため、Pin(25)では点灯しません。どちらでも動く方法は、LEDを名前で呼び出すPin("LED")です。現在のMicroPythonのリリースでは、Pico、Pico W、Pico 2のどれでもこの名前が定義されているので、BlueGraysの内蔵LEDのプロジェクトでもこれを使っています。クラスに複数の種類のボードが混ざっていても、全員に同じコードを配れます。古いファームウェアが「LED」という名前を知らない場合は、UF2ファイルを更新すれば解決します。
1from machine import Pin
2import time
3
4# "LED" adı Pico, Pico W ve Pico 2'de karttaki LED'i bulur / The name "LED" finds the onboard LED on Pico, Pico W and Pico 2
5led = Pin("LED", Pin.OUT)
6# Eski firmware'li klasik Pico'da: Pin(25, Pin.OUT) / Classic Pico with old firmware: Pin(25, Pin.OUT)
7# Pico W'de Pin(25) LED'i yakmaz / On the Pico W, Pin(25) does not light the LED
8
9while True:
10 led.toggle() # Durumu tersine çevir / Flip the state
11 time.sleep(0.5) # 0,5 saniye bekle / Wait 0.5 seconds
12外付けLEDのコードも同じ骨組みで、変わるのはピン番号だけです。ここでは待ち時間をWAITという変数に移しました。これが、生徒が2週目に最初に変える行になります。count変数とprint()の行は、LEDが点灯するたびにThonnyのシェルに数字を表示するので、生徒はループが本当に動いていることを画面で確認できます。コードの14は物理ピン番号ではなくGP番号です。生徒が最もよく混同する点です。
1from machine import Pin
2import time
3
4LED_PIN = 14 # LED'in bağlı olduğu GP pini (fiziksel pin 19) / GP pin the LED is wired to (physical pin 19)
5WAIT = 0.5 # Bekleme süresi, saniye / Wait time in seconds
6
7led = Pin(LED_PIN, Pin.OUT) # Pini çıkış yap / Make the pin an output
8count = 0 # Kaç kez yandığını say / Count how many times it lit
9
10while True:
11 led.on() # LED'i yak / Turn the LED on
12 count = count + 1
13 print("LED", count) # Thonny Shell'e yaz / Print to the Thonny Shell
14 time.sleep(WAIT)
15 led.off() # LED'i söndür / Turn the LED off
16 time.sleep(WAIT)
17ボタンの配線方法は2つあり、どちらも見せる価値があります。PULL_UPでは、ボタンの片方の足をGP15に、反対側の足をGNDにつなぎます。Picoの内部の抵抗がピンを3.3 Vに引き上げ、ボタンを押すとピンがGNDにつながって0を読み取ります。BlueGraysのPicoのボタンプロジェクトは、追加の配線がいらないので、すべてこの方法を使っています。PULL_DOWNでは、反対側の足を3V3(OUT)ピン(36番ピン)につなぎ、ボタンを押すと1を読み取ります。こちらのほうが論理は自然に感じられますが、うっかり線をVBUS(40番ピン、5 V)に挿してしまいやすい方法です。ボタンの4本の足のどれがつながっているかはArduinoに押しボタンをつなぐ方法の記事で説明しました。4週目は下の短いコードから始め、その後でモード切り替えに進むとよいでしょう。
1from machine import Pin
2import time
3
4led = Pin(14, Pin.OUT) # GP14 -> 220 ohm -> LED -> GND / GP14 -> 220 ohm -> LED -> GND
5button = Pin(15, Pin.IN, Pin.PULL_UP) # Buton GP15 ile GND arasında / Button between GP15 and GND
6# PULL_DOWN: Pin(15, Pin.IN, Pin.PULL_DOWN), buton GP15 ile 3V3(OUT) arasında / button between GP15 and 3V3(OUT)
7# PULL_DOWN ile koşul == 1 olur / With PULL_DOWN the condition becomes == 1
8
9while True:
10 if button.value() == 0: # PULL_UP: basınca 0 okunur / PULL_UP: reads 0 when pressed
11 led.on()
12 else:
13 led.off()
14 time.sleep_ms(10) # Döngüyü biraz yavaşlat / Slow the loop down a little
15Picoの授業でBlueGraysを使う方法
- コードガイドのMicroPythonコース:「学ぶ」にあるコードガイドには、Arduino C++のコースと並んで、18枚のカードからなるMicroPythonのコースがあります。import、print、ピン出力、ピン入力(PULL_UP、PULL_DOWN)、time.sleep、while True、インデント、変数、if / elif / else、forとrange、リスト、defとreturn、ADC、PWM、ticks_ms、Pin.irq、try / except、I2Cです。各カードには「何ができますか?」「構文」、「ブロック・Arduino・MicroPython」のタブ付きの例、「よくある間違い」、ミニテストがあります。その週の考え方に合ったカードを、授業の合間に読むよう生徒に勧めてください。生徒はそれぞれマイレベル画面で、自分のMicroPythonの進み具合(x/18)を確認できます。
- プロジェクトで確認:各カードの最後にあるこのリンクから、その命令をコードで使っているプロジェクトが、簡単なものから難しいものの順に表示されます。カードで命令について読んだ生徒は、ここから実際のプロジェクトのコードの中でその命令を見つけられます。
- 今日のクイズ:「問題のプログラミング言語」の設定では、「両方」「Arduino」「MicroPython」を選べます。Picoで教えるなら、生徒にMicroPythonを選んでもらいましょう。コードを使わない一般的な問題は、どれを選んでも出題されます。毎日約3分のセットがあり、15問のレベル判定テストと、A1からC2までの6つのレベルがあるので、授業の合間の毎日の復習習慣にぴったりです。
- ブロックで表示:無料のPicoプロジェクトのうち5つ(内蔵LED、外付けLED、2個のLEDを交互に点滅、信号機、パトカーの点滅灯)は、コードの横にブロック表示があります。初めてPythonを見る生徒に、同じプログラムをまずブロックで、次にコードで見せると、「同じ論理で、書き方が違うだけ」という考え方が身につきます。このステップはブロックでセンサーを読む、そしてMicroPythonへで詳しく紹介しました。ブロックは読むためのもので、アプリでは編集できません。ボードに書き込むのは、いつもMicroPythonのコードです。
- 「コードを理解」と「トラブルシューティング」:無料のPicoプロジェクトにはどちらもあります。コードを理解タブは「このコードの働き」の要約から始まり、ステップごとの解説に続いて、「困ったときは」と自分で試すの課題で終わります。4週目と6週目の長いコードでは、まだ速く読めないペアにとって最大の助けになります。
- 「一緒に作りましょう」と「リンクをコピー」:ガイドモードは4つのステップで進み、コードのステップでは、ThonnyでMicroPythonのインタープリターを選ぶよう生徒に促します。ソースコードの欄にあるリンクをコピーを使うと、パソコンでコードを開くためのリンクが手に入るので、生徒がスマホのコードをThonnyに打ち直す必要はありません。
評価と個別対応
| 評価基準 | 1 – 初歩 | 2 – 発展途上 | 3 – 定着 |
|---|---|---|---|
| 回路を組む | 手助けがあれば組めるが、GNDを忘れる | 回路図を見て組み、GP番号をコードと照らし合わせられる | 物理ピン番号とGP番号を区別でき、クラスメートの間違いに気づける |
| コードを読む | 行は読めるが、何をしているかは説明できない | プログラムが何をするかを大まかに説明できる | 各行の働きとインデントの意味を説明できる |
| 変更とテスト | 値を変えられるが、その影響は説明できない | 試す前に結果を予想できる | 予想が外れたとき、シェルのエラーメッセージから原因を見つけられる |
| C++との対応 | 対応づけられない | Pin、sleep、while Trueを対応づけられる | if、for、関数も対応づけられる |
- 早く終わったグループ(アナログ読み取り):この計画にはADCの週がありません。早く終わったペアは、10 kΩのポテンショメーターの真ん中の足をGP26につなぎ、ADC(26).read_u16()で0〜65535の値を読み取って、2週目の点滅の速さを変えてみましょう。さらに挑戦したい場合は、無料のRaspberry Pi PicoのLEDキャンプファイヤー(8x8 NeoPixelマトリクス+可変抵抗+ブザー)のプロジェクトで、同じポテンショメーターを使って8x8のNeoPixelマトリクスを動かせます。
- 早く終わったグループ(組み合わせ):5週目の駐車センサーに4週目のボタンを加え、音のオン・オフを切り替える「消音モード」を書くことは、自分でコードを書くための最初の本格的な一歩になります。
- ゆっくり進むグループ:回路を組み立てた状態で配るか、回路図を大きく印刷して机に置いてください。「コードを理解」タブで1ステップずつ進め、その日は値を1つ変えることだけを目標にしましょう。それだけでも十分価値のある成果です。
よくあるトラブルとすぐできる対処法
| トラブル | 考えられる原因 | 対処法 |
|---|---|---|
| パソコンがPicoをまったく認識しない | 充電専用ケーブル、接触不良、USBハブ | 確実にデータ通信できるケーブルを試し、ボードをパソコンに直接つなぎ、別のUSBポートも試します。 |
| 挿すたびにRPI-RP2ドライブが開く | ボードにMicroPythonが入っていない、またはBOOTSELが押されたままになっている | UF2ファイルをドライブにコピーし、ボタンを押さずに挿し直します。 |
| RPI-RP2がまったく表示されない | 挿した後にBOOTSELを押した | ケーブルを抜き、BOOTSELを押したまま挿し直してから離します。 |
| Thonnyが接続できない、「Device is busy」(デバイスが使用中)やポートのエラーが出る | インタープリターやポートの選択が違う、ほかのプログラムがポートを開いている、実行中のコードが処理中 | 右下で「MicroPython (Raspberry Pi Pico)」を選び、「停止/再起動」を押し、2つ目のThonnyのウィンドウを閉じて、USBを抜き差しします。 |
| エラー:No module named 'machine'(machineモジュールがない) | コードがパソコンのPythonで実行されている | インタープリターをMicroPython (Raspberry Pi Pico)に設定します。 |
| IndentationErrorまたはSyntaxError | インデントが混在している、コロンがない | エラーに表示された行番号に移動します。while、if、defの行は末尾にコロンが必要で、その下の行には4つのスペースが必要です。 |
| コードは動くのにLEDが点灯しない | LEDの向きが逆、GNDがない、コードのGP番号が回路と違う、Pico WでPin(25)を使っている | 長い足を抵抗側(GP側)に向け、GNDの線を確認し、内蔵LEDにはPin("LED")を使います。 |
| パソコンから外すとコードが動かなくなる | ファイルがパソコンに保存されている、または名前がmain.pyではない | Thonnyで保存先に「Raspberry Pi Pico」を選び、名前をmain.pyにします。ボードに電源が入るたびに、コードが自動で始まります。 |
| main.pyが無限ループを実行していて、Thonnyから入れない | 起動と同時にコードが始まる | 「停止」を何回か押すか、シェルでCtrl+Cを押します。それでもだめなら、公式のflash_nuke.uf2でフラッシュを消去し、MicroPythonをインストールし直します(ボード上のファイルはすべて削除されます)。 |
授業前のチェックリスト
- すべてのボードにMicroPythonがインストールされ、ボードとケーブルに1から13までの番号が付いている。
- すべてのパソコンで、インタープリターに「MicroPython (Raspberry Pi Pico)」が選ばれた状態でThonnyが開く。
- すべてのボードとケーブルの組み合わせをテストし、シェルに>>>が表示される。
- 抵抗が値ごとに別の箱に分けてある:220 Ω、1 kΩ、2 kΩ。
- プロジェクターにBlueGraysでその週のプロジェクトを開いてあり、最初の3週間は「ブロックで表示」の準備ができている。
- まとめの質問の用紙を印刷し、ペアに役割(組み立て係、確認係)を割り当ててある。
- 5週目の前に、HC-SR04の分圧回路用の抵抗を各グループ分取り分けてある。
- 授業の終わりにUSBケーブルを抜き、部品を数えて番号付きの箱に戻す。
この6週間で使うプロジェクトはすべて、回路図、部品リスト、MicroPythonのコード、「コードを理解」タブ付きでBlueGraysアプリで無料で開けます。そのため、先生がプロジェクターで授業を進め、生徒は自分のスマホで一緒に追うという進め方が簡単にできます。6週間の後で、PWMによるLEDの明るさ調整、サーボモーター、OLEDディスプレイ、キーパッドを使うプレミアムのPicoプロジェクトに進みたい場合は、個別のサブスクリプションの代わりに教育者向けコードを配ることができます。1回きりの購入で、自動更新はされません。
よくある質問
Raspberry Pi Picoを使ってどのように授業をすればいいですか?
1回の授業に新しい考え方を1つだけ入れ、出力、変数、関数、入力と条件、PWMとセンサー、リストとループの順に並べてください。どの授業も同じ骨組みにします。ウォームアップ、一緒に読む、予想する、回路を組む、コードを実行する、値を1つ変える、まとめの質問という流れです。この記事の6週間の計画は、無料のプロジェクトを使ってこの方法で作られています。
Raspberry Pi PicoにMicroPythonをインストールするには?
BOOTSELボタンを押したまま、PicoをUSBでパソコンにつなぐと、RPI-RP2というドライブが表示されます。そのドライブに、使っているボード用のMicroPythonの.uf2ファイルをコピーすると、ボードが再起動します。Thonnyのインタープリター設定にある「MicroPythonをインストールまたは更新」からもインストールできます。
ThonnyがRaspberry Pi Picoを認識しません。どうすればいいですか?
まず、データ通信に対応したUSBケーブルを使っているか確認してください。充電専用ケーブルではパソコンがボードを認識できません。次に、Thonnyでインタープリターを「MicroPython (Raspberry Pi Pico)」に設定し、「停止/再起動」を押します。挿すたびにRPI-RP2ドライブが開く場合は、ボードにまだMicroPythonが入っていないので、UF2ファイルをインストールしてください。
学校で使うならRaspberry Pi PicoとArduinoのどちらがいいですか?
どちらも良い出発点で、選び方は言語と生徒によって決まります。Pythonを教える場合や、コンパイルを待たずにすばやく試したい場合は、MicroPythonで使うPicoが快適です。年少の生徒が相手でブロックから始めたい場合や、手持ちの教材が5 Vのモジュールでそろっている場合は、Arduinoのほうが予想外のトラブルが少なくなります。
パソコンなしでPicoのコードを動かすには?
Thonnyで「Raspberry Pi Pico」を選んでコードをボードに保存し、名前をmain.pyにします。Picoは電源が入るたびにmain.pyを自動で実行するので、USB充電器やモバイルバッテリーがあれば十分です。コードを止めるには、ボードをもう一度Thonnyにつないで「停止」を押します。
授業でPicoとPico Wに違いはありますか?
この計画のプロジェクトはすべて、どちらでも同じピンで動きます。違いは内蔵LEDだけです。初代PicoではGP25に、Pico WではWi-Fiチップにつながっているので、どちらでも動くPin("LED")を使ってください。Pico WにはWi-FiとBluetoothもありますが、最初の6週間では使いません。
この記事を読んだ後に作れるプロジェクト
全プロジェクトを見る
Raspberry Pi Picoの内蔵LEDを点滅(PicoとPico W)
Raspberry Pi Picoシリーズの最初のプロジェクトです!ボード上の緑色LEDを点滅させて動作を確認する、定番の「Hello World」に相当する実験です。外付け部品は不要で、PicoとUSBケーブルだけで始められます。コードはMicroPython(Raspberry Pi Foundationが公式にサポートする言語)で書きます。Thonny IDEでmachine.Pinクラス、Pin.OUTモード、led.on()/off()メソッド、time.sleep()を学びます。シリアル(REPL)出力で、切り替わる様子をリアルタイムに確認できます。

Raspberry Pi Picoで外付けLEDを点灯(ブレッドボード)
Picoの内蔵LEDの次は、ブレッドボードに外付けLEDを接続し、GP14ピンで制御します。このプロジェクトでは、Picoの汎用GPIOピンを出力として使う方法、LEDの極性(長い足=アノード/+、短い足=カソード/−)、電流制限抵抗(220Ω)が必要な理由を学びます。抵抗を入れないと、LEDに過大な電流が流れて壊れることがあります。回路はとても簡単です。Pico GP14 → 220Ω抵抗 → LED(+)→ LED(−)→ Pico GND。Wokwiでシミュレーションできます。

Raspberry Pi Picoで2個のLEDを交互に点滅
PicoでLEDを1個点滅させた次は、2個のLEDを交互に点滅させる定番のフリップフロップパターンです。一方が消えるともう一方が点灯する、複数のGPIOを連動させる最も基本的な例です。このプロジェクトでは、色の異なる2個のLED(GP14に赤、GP13に緑)が500msごとに点灯状態を入れ替えます。MicroPythonのPin.toggle()メソッドを使うと、コードを短く読みやすくできます。同じ基本的な仕組みが、信号機、パトカーの点滅灯、流れるLEDなど、複数のLEDを使ったアニメーションの基礎になります。回路はとても簡単で、各LEDに220Ωの抵抗を使います。

Raspberry Pi Picoで信号機(3個のLEDを順に点灯)
赤・黄・緑のLEDで本物の信号機を再現する、Picoシリーズ初の3個のLEDを使うプロジェクトです!緑が4秒間「進め」、黄が1.5秒間「準備」、赤が3秒間「止まれ」、赤と黄が1秒間「発進準備」を示します(ヨーロッパの信号機のパターン)。関数の定義(def all_off())、状態機械の仕組み(順序)、複数のGPIOの同期を学びます。回路はとても簡単です。GP11(緑)、GP12(黄)、GP13(赤)に3個のLEDを接続し、それぞれに220Ωの電流制限抵抗を使います。

Raspberry Pi Picoでパトカーの点滅灯(赤+青)
Raspberry Pi Picoで、パトカーの屋根にある点滅灯を最も簡単な形で再現します!赤と青のLEDが交互に点灯するフリップフロップ方式です。赤が点灯している間は青が消灯し、0.3秒ごとに状態を入れ替え、繰り返します。コードは1つのwhile Trueループに2つの動作を直接記述し、速度はWAIT_MS定数で設定します。

Raspberry Pi Picoで信号機の4モードをボタンで切り替え(ステートマシン)
1個のボタンで信号機の4つのモードを切り替えます!押すたびに、通常サイクル(赤→黄→緑の順に点灯)、赤のみ(停止)、黄色点滅(注意・夜間モード)、消灯(メンテナンス)へ切り替わります。ステートマシン(mode変数で実行する動作を決定)、剰余演算によるモードの循環((mode + 1) % 4で0→1→2→3→0を繰り返す)、処理を止めない時間管理(time.ticks_ms() + time.ticks_diff()でLEDの各段階の時間を管理)を学びます。ただし、モード切り替え時には待ち時間があります。

Raspberry Pi Picoでボタンを押してLEDを点灯
Picoで初めての入力プロジェクト、ボタンの読み取りです!ボタンを押している間はLEDが点灯し、離すと消灯します。LEDアニメーションから一歩進んで、外部からPicoに信号を入力する方法を学びます。Pin.IN(入力モード)、Pin.PULL_UP(ボタンで一般的に使う内蔵プルアップ抵抗)、button.value()による読み取りを扱います。LEDはGP14、ボタンはGP2(内蔵PULL_UP)に接続します。押すとLOW(0)、離すとHIGH(1)になります。この逆の論理は最初は戸惑いますが、業界で標準的に使われています。

Raspberry Pi PicoのPWMでLEDをフェード(呼吸のような明滅)
LEDを単に点滅させるだけでなく、呼吸するように明滅させます!Raspberry Pi PicoのPWM(パルス幅変調)を使い、スリープ中のMacBookのランプのように、明るさをゆっくり上げてからゆっくり下げます。machine.PWMクラス、duty_u16()(0–65535の16ビットの明るさ)、PWM周波数(freq(1000)で1秒間に1000回オン・オフし、ちらつきを感じさせない)、range()による段階的なループ(増加と減少)、デジタルピンからのアナログのような出力を学びます。PWMはRGBの混色やモーターなどに使われる、組み込み開発の基本技術です。
ほかの記事
BlueGraysアプリ
この回路をスマホでステップごとに作る
回路図、コード、部品リストを1つの画面で確認できます。Arduino、ESP32、Picoのプロジェクトを200件以上用意しています。

