基礎 · 読了まで6分

Raspberry Pi Picoとは?MicroPythonのセットアップ、ピン配置、最初のプロジェクト

Raspberry Pi Picoとは何で、Raspberry PiやArduinoとどう違うのか。RP2040の特長、Pico WとPico 2、ピン配置、ThonnyでのMicroPythonのセットアップ、LED、ボタン、PWM、アナログ読み取りの最初のコードを解説します。

Raspberry Pi Picoは、Raspberry Pi財団が自ら設計したチップRP2040を中心に作られた、手のひらサイズのとても安価なマイコンボードです。最大の特長は、MicroPython、つまりPythonでプログラムできることです。コードを書いて実行すれば、コンパイルを待たずにすぐ結果が見られます。そのため、Pythonを学ぶ生徒や電子工作の初心者にとって、すばらしい入口になります。好みに応じて、C/C++やArduino IDEでもプログラムできます。

Raspberry Pi Picoマイコンボード
Raspberry Pi Pico:中央の正方形のチップがRP2040です。片方の端にMicro USBソケットとBOOTSELボタンがあり、両側に20本ずつピンが並んでいます。

Raspberry Pi Picoとは?Raspberry Piとの違い

名前は似ていますが、PicoはRaspberry Pi 4や5のようなパソコンではありません。OSもHDMI出力もデスクトップもなく、Arduinoと同じく1つのプログラムを動かすマイコンボードです。電源を入れた瞬間にプログラムが動き出し、消費電力はとても小さく、センサーの読み取り、LEDの点灯、モーターの駆動といった仕事をリアルタイムでこなします。

項目Raspberry Pi PicoArduino Uno R3Raspberry Pi 4 / 5
種類マイコンボードマイコンボードシングルボードコンピューター
OSなしなしLinux
プログラミング言語MicroPython、C/C++、ArduinoC/C++(Arduino)Pythonをはじめほぼすべての言語
起動時間一瞬一瞬20〜30秒
消費電力約25 mA約45 mA数ワット
主な用途センサー、LED、モーター、タイミング制御センサー、LED、モーターカメラ、サーバー、デスクトップパソコン

仕様:Pico、Pico W、Pico 2

項目PicoPico WPico 2
チップRP2040、デュアルコアCortex-M0+、133 MHzRP2040、デュアルコアCortex-M0+、133 MHzRP2350、デュアルコアCortex-M33、150 MHz
RAM264 KB264 KB520 KB
フラッシュ2 MB2 MB4 MB
無線なしWi-Fi(2.4 GHz)+ Bluetoothなし(Pico 2 Wにはあり)
使えるGPIO262626
アナログ入力(ADC)3チャンネル、12ビット3チャンネル、12ビット3チャンネル、12ビット
動作電圧3.3 V3.3 V3.3 V

Picoのピン配置

Picoには、両側の端に合わせて40本のピンがあります。GP0からGP28までの26本のGPIOピンはすべてPWMを出力でき、I2C、SPI、UARTは複数の代替ピンで使えます。アナログ入力が使えるのはGP26、GP27、GP28だけです。ボードの完全なピンマップはピン配置ツールで見られます。重要な電源ピンと特殊なピンは次のとおりです。

ピン機能
VBUSUSBからの5 V
VSYS外部電源の入力(1.8〜5.5 V)
3V3(OUT)センサー用の3.3 V出力(約300 mAまで)
GNDグラウンド(基板上に8本)
GP0〜GP22デジタル入出力、PWM、I2C、SPI、UART
GP26〜GP28アナログ入力にも対応(ADC0〜ADC2)
RUNGNDにつなぐとボードがリセットされる
Picoのピンは3.3 Vで動き、5 Vには耐えられません。5 Vを出力するセンサーは直接つながず、間に分圧回路を入れてください。初期設定では各ピンが出せるのは4 mA、最大でも12 mAです。LEDなら220〜330 Ωの抵抗で十分ですが、モーターやリレーのような負荷は必ずトランジスタを通して駆動してください。

MicroPythonのインストール(Thonnyを使う)

  1. thonny.orgからThonnyをダウンロードしてインストールします。
  2. PicoのBOOTSELボタンを押したまま、USBケーブルをパソコンに挿します。PicoがRPI-RP2というドライブとして表示されます(Pico 2ではRP2350)。
  3. Thonnyの右下にあるインタープリターのメニューでMicroPython (Raspberry Pi Pico)を選び、「Install or update MicroPython」でボード(Pico、Pico W、Pico 2)に合ったバージョンをインストールします。micropython.orgから.uf2ファイルをダウンロードし、ドライブにドラッグしてもかまいません。
  4. インストールが終わるとPicoが再起動します。Thonny下部のシェルに>>>のプロンプトが表示されれば準備完了です。
  5. コードをmain.pyとしてPicoに保存すると、パソコンにつないでいなくても、電源を入れるたびに自動で実行されます。

最初のプログラム:内蔵LEDを点滅させる

MicroPython
1from machine import Pin
2import time
3
4led = Pin(25, Pin.OUT)      # Pico'da dahili LED; Pico W ve Pico 2 W'de Pin("LED") yaz
5                            # onboard LED on Pico; use Pin("LED") on Pico W / Pico 2 W
6
7while True:
8    led.toggle()            # durumu tersine çevir / flip the state
9    time.sleep(0.5)

ボタンでLEDを制御する

GP15に220 Ωの抵抗を通してLEDを、GP14にボタンをつなぎます。ボタンのもう片方の足はGNDにつなぎ、Picoの内部プルアップ抵抗を有効にするので、ボタンは離しているときに1、押したときに0を返します。

MicroPython
1from machine import Pin
2
3led = Pin(15, Pin.OUT)
4button = Pin(14, Pin.IN, Pin.PULL_UP)   # butonun diğer ucu GND'de / other leg to GND
5
6while True:
7    led.value(not button.value())        # basılıyken yanar / on while pressed
Pico 2のRP2350チップには、内部プルダウン抵抗に関する既知の不具合(E9)があり、ピンがHIGHのまま固まることがあります。ボタンをGNDにつないでPULL_UPを使う方法が、PicoでもPico 2でもいちばん安全です。ボタンの配線について詳しくはArduinoに押しボタンをつなぐ方法を参照してください。考え方は同じです。

PWMでLEDの明るさを変える

PicoはすべてのGPIOピンでPWMを出力できます。MicroPythonでは、デューティ値は0〜65535です。下のコードはLEDをゆっくり明るくし、また最初からやり直します。PWMの考え方はPWMとは?で詳しく解説しています。

MicroPython
1from machine import Pin, PWM
2import time
3
4led = PWM(Pin(15), freq=1000)
5
6while True:
7    for d in range(0, 65536, 1024):   # yavaşça yan / fade in
8        led.duty_u16(d)
9        time.sleep_ms(10)

アナログ読み取りと内蔵温度センサー

ポテンショメーターの真ん中のピンをGP26に、外側のピンを3V3とGNDにつなぎます。read_u16()は0〜65535の値を返します。Picoの中にはADCの4番目のチャンネルにつながった温度センサーもあります。おおまかな値ですが、部品を追加せずに温度を測れる楽しい方法です。

MicroPython
1from machine import ADC
2import time
3
4pot = ADC(26)                    # GP26 (ADC0) / potansiyometre orta ucu / pot wiper
5sensor = ADC(4)                  # dahili sıcaklık sensörü / internal temperature sensor
6
7while True:
8    value = pot.read_u16()                       # 0–65535
9    volts = sensor.read_u16() * 3.3 / 65535
10    temp = 27 - (volts - 0.706) / 0.001721       # °C (yaklaşık / approximate)
11    print(value, round(temp, 1))
12    time.sleep(1)

Arduino IDEでPicoをプログラムする

C++やArduinoのライブラリのほうが好みなら、Arduino IDEでPicoを使うこともできます。「ファイル」>「基本設定」の「追加のボードマネージャのURL」欄にhttps://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.jsonを追加し、ボードマネージャからEarle Philhower氏のRaspberry Pi Pico/RP2040/RP2350パッケージをインストールします。最初の書き込みでは、BOOTSELボタンを押したままボードをつないでください。それ以降はふつうに書き込めます。LED_BUILTINを使うBlinkの例や、Arduinoのライブラリの多くは問題なく動きます。

Pico、ESP32、Arduinoのどれを選ぶ?

必要なものおすすめのボード
初めてのプロジェクト、5 Vのセンサー、いちばん多い例と資料Arduino Uno
Wi-Fi、Bluetooth、インターネット、スマホからの操作ESP32またはPico W
Pythonでのプログラミングを学ぶRaspberry Pi Pico
とても安い価格、正確なタイミング(PIO)Raspberry Pi Pico
カメラや音声のプロジェクトESP32-S3またはESP32-CAM

無線が必要なプロジェクトなら、ESP32とは?でESP32について知っておきましょう。Picoならではの強みはPIO(プログラマブルI/O)ブロックです。WS2812B LEDテープや独自の通信プロトコルのように、タイミングが重要な仕事をプロセッサに負担をかけずにこなします。

Raspberry Pi Picoのプロジェクトアイデア

  • 信号機:3つのLEDが順番に点く信号機です。
  • ナイトライダー:6つのLEDの上を光が行ったり来たりするエフェクトです。
  • ボタンと割り込み(IRQ):メインループを待たずにボタンの押下をとらえるコードです。
  • RGBの色の循環:3つのPWMチャンネルでRGB LEDに虹のエフェクトを出します。
  • Pico WのWebサーバー:スマホで開いたページからLEDやリレーを操作します。
  • ミニ温度計:内蔵温度センサーの値をOLEDディスプレイに表示します。

よくあるミスと直し方

  • RPI-RP2ドライブが表示されない:BOOTSELを押さずにボードを挿したか、ケーブルが充電専用です。データ通信用のケーブルを使ってください。
  • Thonnyがボードを見つけられない:違うインタープリターが選ばれているか、ボードにMicroPythonが入っていません。
  • Pico WでLEDが点かない:Pico Wでは内蔵LEDが無線チップにつながっています。Pin(25)の代わりにPin("LED")を使ってください。
  • 5 Vの信号をつないでいる:GPIOは3.3 Vです。5 Vの信号でピンが壊れることがあります。
  • パソコンから外すとコードが動かない:main.pyとしてPicoに保存されていません。
  • VSYSの電圧が高すぎる:VSYSが受け付けるのは最大5.5 Vです。9 Vや12 Vのアダプターを直接つながないでください。

手ごろな価格とPythonへの対応で、Raspberry Pi Picoはプログラミングと電子工作を結びつけるいちばん簡単な方法のひとつです。LEDの基本はLEDとは?で解説しています。BlueGraysアプリには、LEDの点滅、信号機、ナイトライダー、ボタンの割り込み、PWMの呼吸エフェクト、RGBの色の循環といったPicoのプロジェクトが、回路図とMicroPythonのコード付きでステップごとに載っています。

よくある質問

Raspberry Pi PicoはRaspberry Piのパソコンですか?

いいえ。PicoはRaspberry Pi財団が作るマイコンボードで、OS、画面出力、デスクトップはありません。Arduinoと同じく1つのプログラムを動かします。Raspberry Pi 4や5は、Linuxが動く本格的なパソコンです。

Raspberry Pi Picoは何の言語でプログラムしますか?

いちばん一般的なのはMicroPythonです。Thonnyで簡単にインストールでき、Pythonを知っている人ならすぐに始められます。公式のC/C++ SDKや、Earle Philhower氏のパッケージを使ったArduino IDEも使えます。CircuitPythonにも対応しています。

PicoとPico Wの違いは何ですか?

Pico Wには、Picoに2.4 GHzのWi-FiとBluetoothを加える無線チップが載っています。それ以外は同じです。Pico Wの内蔵LEDはそのチップにつながっているので、コードではPin(25)の代わりにPin("LED")を使います。

Raspberry Pi Picoは5 Vで動きますか?

ボードはUSBの5 V、またはVSYSピンへの1.8〜5.5 Vで給電できます。しかし、GPIOピンは3.3 Vで動き、5 Vには耐えられないので、5 Vの信号を直接つないではいけません。

Picoにはアナログ入力がいくつありますか?

ユーザーが使えるアナログ入力は、GP26(ADC0)、GP27(ADC1)、GP28(ADC2)の3つです。ADCの4番目のチャンネルは、チップ内部の温度センサーにつながっています。MicroPythonでは、read_u16()が0〜65535の値を返します。

Raspberry Pi PicoをArduino IDEでプログラムできますか?

はい。Arduino IDEにEarle Philhower氏のRaspberry Pi Pico/RP2040/RP2350ボードパッケージをインストールすれば、Arduinoの命令でPicoをプログラムでき、Arduinoのライブラリの多くも使えます。最初の書き込みでは、BOOTSELボタンを押したままボードをつなぐ必要があります。

全プロジェクトを見る
Raspberry Pi Picoの内蔵LEDを点滅(PicoとPico W)
#147初級

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)出力で、切り替わる様子をリアルタイムに確認できます。

5.0(1)
10
Raspberry Pi Picoで外付けLEDを点灯(ブレッドボード)
#148初級

Raspberry Pi Picoで外付けLEDを点灯(ブレッドボード)

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

4.5(2)
7
Raspberry Pi Picoで信号機(3個のLEDを順に点灯)
#150初級

Raspberry Pi Picoで信号機(3個のLEDを順に点灯)

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

4.0(1)
12
Raspberry Pi Picoで流れるLED(6個のLED)
#153初級

Raspberry Pi Picoで流れるLED(6個のLED)

Picoで定番の「流れるLED」アニメーションを、6個のLEDで作ります!6個のLEDが左から右へ順に点灯し、光が列に沿って移動しているように見えます。Pythonのリスト、リスト内包表記([Pin(p, Pin.OUT) for p in LED_PINS])、forループによるピン制御、enumerate()を学びます。GP9-GP14に6個のLEDを接続し、それぞれに220Ωの電流制限抵抗を使います。6個のLEDを1個ずつ定義する代わりにリストを使うため、コードがすっきりします。使用可能な空きGPIOピンの数まで、それぞれに抵抗を付けてLEDを追加できます。

0.0(0)
8
Raspberry Pi Picoでボタンを押してLEDを点灯
#155初級
プレミアム

Raspberry Pi Picoでボタンを押してLEDを点灯

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

0.0(0)
11
Raspberry Pi Picoのボタンのチャタリング対策:IRQとソフトウェアポーリングの比較
#159中級
プレミアム

Raspberry Pi Picoのボタンのチャタリング対策:IRQとソフトウェアポーリングの比較

ボタンを1回押しただけで、コードでは3~4回と数えられますか?原因はチャタリングです。金属接点がマイクロ秒単位で振動します!シリアルモニタで、2つのカウント方法を並べて比較します。未処理のポーリングは振動も検出して多く数え、IRQとソフトウェアによるチャタリング対策は正確に数えます。接点が振動する仕組み、ソフトウェアによる対策(ticks_diff() > 50ms)、Pin.irq()による割り込みの登録、IRQ_FALLINGトリガー、ISRハンドラー、globalとISRの安全な扱い方を学びます。IRQでLEDを切り替え、動作を目で確認できます。シリアルモニタには押すたびに両方のカウントが表示されます。

0.0(0)
12
Raspberry Pi PicoのPWMでLEDをフェード(呼吸のような明滅)
#160初級

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の混色やモーターなどに使われる、組み込み開発の基本技術です。

0.0(0)
4
Raspberry Pi PicoでRGB LEDの色を順に切り替える(3チャンネルPWM)
#161初級

Raspberry Pi PicoでRGB LEDの色を順に切り替える(3チャンネルPWM)

1つのLEDで何百万もの色を表現できます!RGB LEDには、実は赤、緑、青の3つのLEDが入っています。それぞれをPicoの個別のPWMチャンネルで制御すると、赤+緑=黄、緑+青=シアン、3色すべて=白のように色を混ぜられます。このプロジェクトでは、LEDの色を8色に順番に切り替えます。複数のPWMチャンネル、関数の定義(def set_color(...))、RGBの混色(画面やスマート電球の仕組み)、8ビットから16ビットへの変換(x257で0–255を0–65535に変換)、LEDのカソードコモンとアノードコモンの違いを学びます。

0.0(0)
6