Raspberry Pi Picoの始め方/環境構築
1.概要
Rasberry Pi4は様々な機能がありほとんどのことはできますが、下記のような課題があるためRaspberry Pi Picoの使い方を学んでいきたいと思います。
より安価に安価にIoTデバイスを作りたい
より省スペース/低重量でIoTデバイスを作りたい
PIO(Programmed input–output)を勉強したい/使いたい
MicroPythonを使用してPIOを制御
これらを通じて通信や制御を学習
1-1.Rasberry Pi Picoとは
Raspberry Pi Picoは、2021年2月に登場したマイコン・ボードです。
Raspberry Pi Foundationが独自に開発したARMコアのマイコン開発基板であり、Raspberry Pi 4等と異なり、組み込み用として開発され性能が控えめで基板サイズは小型になっています。対応言語はC/C++、MicroPythonであり、USBコネクタはmicro Bです(出典:秋月電子)。
Rasberry Pi Picoの製品は4種類あり、下記の通りです。無線LAN(W)の有無に対して、基本的なハードウェアは同じですが無線チップCYW43439を制御するために一部のGPIOの互換性が失われている部分があります。
はんだ付け|H:Picoにはんだ付けをしているか
最初に20P細ピンヘッダ(□0.5mm)と3Pピンヘッダ(□0.64mm)をはんだ付けする必要がある。Hははんだ付け済みの製品
無線LAN|W:Wi-FiとBluetoothの接続機能が搭載されたモデル
従来ではできなかったIoT(インターネットに接続)が可能
2022年6月30日にPicoに追加された機能
技適取得済み:電波法で定められている技術基準に適合している無線機であることの証明
Infineon CYW43439無線チップでありBluetooth ClassicとBLEの両方に対応(用語の参考:ムセンコネクト)
CYW43439無線チップ用のアンテナはABRACON(formerly ProAnt)ライセンスのオンボードアンテナを利用しており、ワイヤレスインターフェースはSPIでRP2040と接続(出典:遊舎工房)
Raspberry Pi Pico Wを分解している方がいたため画像を参照させていただきました。図より無線チップCYW43439が確認できます。
1-2.Raspberry PiとPicoの比較
Raspberry PiとPicoの比較をしてみました。全仕様だと量が多いため、自分が欲しい情報のみ抽出しました。
基本的なところでは、Picoの方が「低性能、省エネ、コンパクト、安価、難しい」などの特徴があります。Picoは500円玉2枚くらいのサイズ感です。
Raspberry Pi4の消費電力が約6.25W(アイドル:約3W)に対して、PicoはMax1.5W(電流300mA×電圧5V)のため乾電池でも十分動作可能です。
2.Picoの詳細仕様
Raspberry Pi Picoの詳細仕様に関して別途抽出しました。出典は下記の通り
2-1.GPIO/インターフェース
Picoのハードウェアは下記の通りです。
12-bit 500kspsのアナログデジタル変換(ADC)
温度計や圧力計などの圧力センサーの値(アナログ値)を直接読み取ることが可能
Programmable IO (PIO)
用途に応じて出力を調整可能(Qiita:Raspberry Pi Pico のProgrammable I/O (PIO)入門)
タイマー
Timer with 4 alarmsが1つ
Real Time Counter(RTC)が1つ
【コラム:Picoから電源取得方法】
上図赤(Power)の部分から電源を供給(給電)したり、電源を取得できたりします。
2-2-1.ADC
PicoにはADC(Analog to Digital Converter)が設置されておりアナログ信号をデジタル信号として読み取ることが出来ます(PicoにDACは無し)。
Picoには2種類のADCが設置されており、仕様は下記の通りです。
基本仕様:
分解能:12-bit($${2^{12}=4096}$$)
速度:500ksps
電圧範囲:0~3.3V(ADC_VREFはMax3.3V内で上限値を変更可能)
SMPS3.3VからR-C filter (201Ω into 2.2μF)を使用(4.3. Using the ADC)
ピン位置:
ADC:31PIN(GP26), 32PIN(GP27), 34PIN(GP28)
ADC_VREF:35PIN
2-2.ハードウェア
RP2040(マイコン)を使用
Raspberry Pi財団が独自に開発したARMマイクロコントローラチップ
RP2040のDatasheetは637pageもある
SPI:2個, I2C:2個, UART:2個, 12-bit ADC:3個, Controllable PWM channels:16個
シリアル通信は全部OKでPWM信号も出せるためサーボモーター制御可
Switched Mode Power Supply (SMPS) から3.3Vを出力
Micro-USB Bを使用(USBやC-typeではない)
2-3.電流量
GPIO1ピンあたりの最大電流はデフォルトで4mA(最大12mA)
設定で2mA, 4mA, 8mA, 12mAの設定可能※C言語なら対応可
GPIO全体の合計最大電流は50mA
電流を流せば流すほどピンの電圧が下がる
3V3(端子36)の最大電流は300mA
3.製品の購入
3-1.購入先に関して
たまにAmazonだと半導体製品は高額で販売されていることがあります。有名な秋月電子やSwitch Scienceなどで購入すれば間違いはないです。
ただしPicoは1,000円/個程度ですので、大きく外れていなければ購入しやすい所でよいと思います。
3-2.部材購入
3-2-1.購入品
大前提としてPicoだけ購入しても面白く無く、用途に応じて必要な物(センサー、計器など)の購入が必要です。取り急ぎ動かすだけならPico本体のみで問題ありません(別途PCとMicroUSB Bが必要)。
今回はピンの選定、はんだ付けも全部面倒かつWi-fiを使う可能性も十分あるため、HとWHを購入しました。
3-2-2.Option
追加部品は用途に応じてですが、Picoで遊ぶ場合には高確率で必要になるものを記載しました。
ブレッドボード:各種電子部品やジャンパ線をボードの穴に差し込むだけで、 はんだ付けをしなくても手軽に電子回路を組むことの出来る基板
全部をジャンプワイヤーやはんだ付けで繋ぐと手間のため便利
ジャンプワイヤ:ブレッドボードに差し込むだけで基板上の回路を繋ぐ
ブレッドボード上の回路作成用
4.Picoの環境構築
Raspberry Pi Picoの環境構築を実施します。Raspberry Piとの大きな違いは下記の通りです。
OSを使用しない(インストールできない)
OSがないためインターネットやアプリなどが使用できない
色々なことが出来ない代わりに起動速度が速い
OSが無いためPico単体でプログラミングできない
Raspberry PiのようにThonnyやVS Codeは使用できない
必ず別のPCでプログラミングを作成し、それをPicoに転送
4-1.Picoへの給電方法
Picoへの電源供給方法(給電)は大きく分けて下記2つがあります。本記事ではPCに繋ぎながら作業するため”MicroUSB経由”で給電しました。
なおUSBと端子の両方から給電するとPC側に悪影響を及ぼす可能性もあるため同時接続(特にプログラム書き込み時等)は注意が必要です。
MicroUSB経由:Picoの基板上にあるポートにUSBケーブルを接続
モバイルバッテリーからの給電も可能
直流電流(DC)を直接給電:VBUS端子(Pin40)やVSYS(Pin39)にDC電源を供給すれば給電可能
【コラム:DC電源での給電時の留意事項】
DC電源での給電時の留意事項は下記の通りです。
基本的にUSB電源と端子からの電源供給は同時にしない方がよい
USBとVBUS端子は直接つながっており、ダイオードも無いためPCに破損リスクあり。VBUS端子とUSBは直結しているため5V以上の電圧が入るとPCが破損する可能性あり。なおVSYS端子は間にダイオードがあるため問題なし
USB(5V)の電圧がダイオードを通過すると、VSYS端子の電圧が低い時に電源側に電気が流れる可能性がある。対策としては電源とVSYS端子の間にダイオードをかますことが考えられる。
VBUS端子(Pin40)やVSYS(Pin39)で対応する入力電圧が異なる
3.3VのDC-DCコンバータが内蔵されているため、VSYS端子は1.8V~5.5Vの電源を供給すれば動作する
VBUS端子(Pin40)は5Vの電源を供給する必要あり
5V電源の出力利用時は注意
VSYS利用時はVBUS端子から5Vの電圧を取り出せない
4-2.統合開発環境(IDE)
プログラムを作成するためのエディタを準備します。エディタの種類としては下記があります。
Thonny:初学者向けのPython用IDEであり、Raspberry Pi OSにはデフォルトでインストールされています
Visual Studio Code(VS Code):多言語(Python含む)のコード作成に適用しており、拡張機能も豊富である。
Arduino IDE:Arduinoの開発環境でありオープンソースである。C言語をベースに開発されたArduino言語を使用し、多くのマイコンボードに適用している。
4-2-1.VS Codeでの環境構築
私はPythonでも使用しているVS Codeを利用します。
VS Codeの準備が出来たら拡張機能の「MicroPico」をインストールしておきます。これは後述の通り、「VS CodeからPicoにMicroPythonのファームウェアを書き込む」ために使用します。
【コラム:VS Code の拡張機能について】
昔はPico-Goという拡張機能を使用していましたが既にメンテナンスがされなくなり、 VS Code Marketplace からも削除されています。MicroPico は Pico-Go からフォークされた拡張機能であり、現在はこちらを使用します。
【メモ:MicroPicoによる謎のエラー】
数日放置してRUNを実行したらプログラムが実行されず、かつSTOPも効かない状態になりました。同様の事例もあるみたいであり、まだ動作が不安定と考えられます。
初期はエラー時に何がトラブルかわからなくなるためThonnyの方が良いと思います。
4-2-2.Thonnyでの環境構築
公式推奨のIDEはThonnyであり、記事の量もVS CODEよりThonnyの方が多いように感じます。
参考までにThonnyの環境構築は下記記事が丁寧だと思います。
4-3.ファームウェアの書き込み
4-3-1.プログラムの実行方法
Picoでプログラムを実行するには下記2つの方式があります。
ビルド方式:
作成したプログラムを機械語形式に変換(ビルド)し、生成されたバイナリファイル(UF2形式)をPicoに書き込む
オーバーヘッド(いわゆる無駄)が小さいため高速に動く
プログラム変更のたびにビルドが必要
作成言語がC言語のため学習コストが高い
ファームウェア方式:
ユーザーが作成したプログラムを解釈してPicoへ渡す「ファームウェア」をあらかじめPico側に準備しておく
ファームウェアを介在して実行するためビルドは不要だがオーバーヘッドは大きくなる。
ファームウェア方式ではPythonライクなMicroPython※によりプログラムの実行が可能(※Pythonだとメモリを食いすぎるため)
※C言語やPython以外でもビルド環境、ライブラリ、ファームウェアがあれば多言語も利用可能(JavaScript:Kaluma、Ruby:PicoRubyなど)
直近でオーバーヘッドの影響は気にしないため、「MicroPythonを使用してPicoにファームウェアを書き込む」方法で対応します。
PicoにMicroPythonのファームウェアを書き込む方法は下記があります。今回は1を実行しました。
既にあるファームウェアのファイルを直接Picoに転送
IDE(VS Code/Thonnyなど)を利用して書き込み
4-3-2.ファームウェアファイルの転送
手順は公式Docsより下記の通りです。
ファームウェアファイル(UF2形式)のダウンロード
BOOTSELボタンを押しながらUSBに接続
RPI-RP2のフォルダの確認
UF2ファイルをRPI-RP2にコピー
プログラムの作成/実行
ファームウェアファイルはRaspberry Pi公式HPの下記からDL可能です。
次にPicoのBOOTSELボタンを押しながら※、PCに接続したUSBケーブルをPicoに接続します。接続完了後に「RPI-RP2」フォルダが選択できるため、その中に所定のUF2ファイルを追加します。
※RPI-RP2を開きファイルを書き込むときはBOOTSELボタンを押しながらUSBを差す必要がありますが、単純な接続の場合は不要です。
これで基本的な準備は完了しました。
4-3-3.参考:Thonnyの場合
Thonnyを使用する場合も記載します。通常(左図)だとインタプリタの選択がでますが、BOOTSELボタンを押しながらUSB接続(右図)するとファームウェアのインストールボタンが現れます。
「MicroPythonをインストール」ボタンを押すと下記ウィンドウがでるため、Variant(Picoの種類)とVersion(ファームウェアのVer.)を選択してインストールボタンを押せばファームウェアの書き込みができます。
使用前に「ツール/オプション」から所定のインタプリタを選択すれば使用できます。
4-4.Pico Wでのインターネット接続
追って確認(Chapter 3. Getting on the internet with MicroPython)
https://datasheets.raspberrypi.com/picow/connecting-to-the-internet-with-pico-w.pdf
5.動作確認
動作を確認していきます。プログラムはMicropythonで作成しました。使用方法は下記記事をご確認ください。
5-1.プログラムの実行
下記手順でMicroPicoを開きプログラムを作成しました。
エクスプローラーを選択し「フォルダを開く」を押す
直接MicroPicoを作ろうとするとエラーが発生
適当に作成したフォルダを開くとエクスプローラーに表示される
今回は「test_pico」フォルダを作成
コマンドパレットを開き(Ctrl+Shift+P)"MicroPico:Configure project"を選択
ステータスバー(左下)が「Pico Connected」になっていることを確認
新しいファイルを作成し下記コードを作成します。今回のコードは「GitHub MicroPico」をほぼ流用しました。
最後にコードの実行します。実行/停止方法は下記2種類です。
ボタンを押す
実行:▷RUN
停止:□STOP
コマンドパレット
実行:Run current file on Pico
停止:Stop execution
[sample.py]
from machine import Pin
import time
pin = Pin("LED", Pin.OUT) #Pico基板上のLED(Pico:25, Pico W:"LED"で記載)
print("LED starts flashing...")
while True:
try:
pin.high() #LEDを点灯(3.3Vを出力)
time.sleep(1.0)
pin.low() #LEDを消灯(0Vを出力)
time.sleep(1.0)
except KeyboardInterrupt:
break
pin.off()
print("Finished.")
[OUT]
【コラム:PicoとPico Wの基板上LEDの指定】
Raspberry Pi Picoの基板上にあるLEDはPinで指定可能です。ただし「Raspberry Pi Pico datasheet」と「Raspberry Pi Pico W datasheet」でGPIOのPIN配置を見るとPico WにはGP25は割り振られていません。
私はPico Wを使用したため25ではなく”LED”と指定しました。
5-2.スタンドアローン
前節は「PCに繋いだ状態でPC内のプログラムをPicoが実行」しました。しかし重要なのはPCに接続せず電源を供給しただけで独自に動く(スタンドアローン)ことです。
本節ではスタンドアローンで動作することを確認します。
5-2-1.main.pyの作成
Picoに書き込むプログラムのファイル名を「main.py」にします。ファイル名が異なると書き込みがうまくいきませんので注意が必要です。
[main.py]
from machine import Pin
import time
pin = Pin("LED", Pin.OUT) #Pico基板上のLED(Pico:25, Pico W:"LED"で記載)
print("LED starts flashing...")
while True:
try:
pin.high() #LEDを点灯(3.3Vを出力)
time.sleep(1.0)
pin.low() #LEDを消灯(0Vを出力)
time.sleep(1.0)
except KeyboardInterrupt:
break
pin.off()
print("Finished.")
5-2-2.プログラムの書き込み
コマンドパレット(Ctrl+Shift+P)から”MicroPico: Upload current file to Pico”を選択しEnterを押します。
実行完了後にPCからUSBを外し、USB経由で直接電源を供給しました。結果としてPCに接続していない状態でプログラムの動作(LED点灯)を確認できました。
【参考:Thonnyの場合】
Thonnyの場合は下記手順で保存できます。また「表示タブ/ファイル」を選択すると左下にPico内のファイルを確認することが出来ます。
コードを作成
名前を付けて保存(Ctrl+S)を選択し、「Raspberry Pi Pico」を選択
ファイル名に"main.py"と入力してOKボタンを押す
6.補足情報
6-1.プログラムの削除
書き込んだプログラムを削除する場合はコマンドパレットから「MicroPico:Delete all files from board」を選択します。すると「All files on Pico were deleted」が表示されファイルが削除され、この状態で電源供給してもLEDは点灯しなくなります。
なおPico内のファームウェア(3-2節)は削除されないため、再度プログラムの書き込みを実施すればプログラムは稼働(LED点灯)します。
6-2.MicroPicoコマンドの確認
コマンドパレットで選択できるMicroPicoのコマンドはGitHubの"MicroPico/package.json"で確認できます。
参考で、前述のファイルアップロードやファイル削除は下図の通りです。
7.お役立ち情報
Raspberry Pi Picoに関するお役立ち情報を紹介します。
【サンプルプログラム】
ラズベリーパイ財団の公式GitHubに多くのサンプルコードが公開されています。
参考資料
別添1:Raspberry Pi関係
別添2:Picoに関するブログ
別添3:MicroPython
https://docs.micropython.org/en/v1.20.0/micropython-docs.pdf
https://datasheets.raspberrypi.com/pico/raspberry-pi-pico-python-sdk.pdf
別添4:Picoでやれること
あとがき
全然足りない気がするので、少しずつ追記予定
あと、とにかくPicoがブレッドボードに刺さりくいので、動いてないか刺さりが甘いかの原因究明にものすごく時間がかかった・・・。
更新履歴
2024年3月25日:初版発行
2024年3月28日:5章 補足情報追加
2024年3月30日:Thonny IDEの環境構築方法追加(VS CodeのMicroPicoの謎エラーが発生したため)
2024年3月31日:電源の供給方法を追加、電源の取得方法追加
2024年4月7日:Pico仕様の章立てを変更。ADCの詳細追加
2024年5月4日:お役立ち情報追加