メインコンテンツへスキップ
見出し画像

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の互換性が失われている部分があります。

    1. はんだ付け|H:Picoにはんだ付けをしているか

      • 最初に20P細ピンヘッダ(□0.5mm)と3Pピンヘッダ(□0.64mm)をはんだ付けする必要がある。Hははんだ付け済みの製品

    2. 無線LAN|W:Wi-FiとBluetoothの接続機能が搭載されたモデル

      • 従来ではできなかったIoT(インターネットに接続)が可能

      • 2022年6月30日にPicoに追加された機能

      • 技適取得済み:電波法で定められている技術基準に適合している無線機であることの証明

      • Infineon CYW43439無線チップでありBluetooth ClassicとBLEの両方に対応(用語の参考:ムセンコネクト)

      • CYW43439無線チップ用のアンテナはABRACON(formerly ProAnt)ライセンスのオンボードアンテナを利用しており、ワイヤレスインターフェースはSPIでRP2040と接続(出典:遊舎工房)

    画像
    https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html
    画像
    https://www.tele.soumu.go.jp/giteki/SearchServlet?pageID=jg01_01&PC=008&TC=N&PK=1&FN=221101N008&SN=%94%46%8F%D8&LN=1&R1=*****&R2=*****

     Raspberry Pi Pico Wを分解している方がいたため画像を参照させていただきました。図より無線チップCYW43439が確認できます。

    画像
    https://zenn.dev/nonnoise/articles/0d5b97cb517e31

    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のハードウェアは下記の通りです。

    1. 12-bit 500kspsのアナログデジタル変換(ADC)

      • 温度計や圧力計などの圧力センサーの値(アナログ値)を直接読み取ることが可能

    2.  Programmable IO (PIO)

    3. タイマー

      • Timer with 4 alarmsが1つ

      • Real Time Counter(RTC)が1つ

    画像
    https://www.raspberrypi.com/documentation/computers/raspberry-pi.html
    画像
    https://datasheets.raspberrypi.com/pico/Pico-R3-A4-Pinout.pdf

    【コラム:Picoから電源取得方法】
     上図赤(Power)の部分から電源を供給(給電)したり、電源を取得できたりします。 

    画像

     2-2-1.ADC

     PicoにはADC(Analog to Digital Converter)が設置されておりアナログ信号をデジタル信号として読み取ることが出来ます(PicoにDACは無し)。
     Picoには2種類のADCが設置されており、仕様は下記の通りです。

    1. 基本仕様:

      • 分解能:12-bit(212=40962^{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)

    2. ピン位置:

      • ADC:31PIN(GP26), 32PIN(GP27), 34PIN(GP28) 

      • ADC_VREF:35PIN

    画像

    2-2.ハードウェア

    1. RP2040(マイコン)を使用

      • Raspberry Pi財団が独自に開発したARMマイクロコントローラチップ

      • RP2040のDatasheetは637pageもある

    2. SPI:2個, I2C:2個, UART:2個, 12-bit ADC:3個, Controllable PWM channels:16個

      • シリアル通信は全部OKでPWM信号も出せるためサーボモーター制御可

    3. Switched Mode Power Supply (SMPS) から3.3Vを出力

    4. Micro-USB Bを使用(USBやC-typeではない)

    画像

    2-3.電流量

    1. GPIO1ピンあたりの最大電流はデフォルトで4mA(最大12mA)

      • 設定で2mA, 4mA, 8mA, 12mAの設定可能※C言語なら対応可

    2. GPIO全体の合計最大電流は50mA

      • 電流を流せば流すほどピンの電圧が下がる

    3. 3V3(端子36)の最大電流は300mA

    3.製品の購入

    3-1.購入先に関して

     たまにAmazonだと半導体製品は高額で販売されていることがあります。有名な秋月電子やSwitch Scienceなどで購入すれば間違いはないです。
     ただしPicoは1,000円/個程度ですので、大きく外れていなければ購入しやすい所でよいと思います。

    画像
    https://akizukidenshi.com/catalog/goods/search.aspx?search=x&keyword=Raspberry+Pi%E3%80%80Pico&search=search

    3-2.部材購入

     3-2-1.購入品

     大前提としてPicoだけ購入しても面白く無く、用途に応じて必要な物(センサー、計器など)の購入が必要です。取り急ぎ動かすだけならPico本体のみで問題ありません(別途PCとMicroUSB Bが必要)。

    画像
    https://www.softbank.jp/sbnews/entry/20220221_02

     今回はピンの選定、はんだ付けも全部面倒かつWi-fiを使う可能性も十分あるため、HとWHを購入しました。

     3-2-2.Option

     追加部品は用途に応じてですが、Picoで遊ぶ場合には高確率で必要になるものを記載しました。

    1. ブレッドボード:各種電子部品やジャンパ線をボードの穴に差し込むだけで、 はんだ付けをしなくても手軽に電子回路を組むことの出来る基板

      • 全部をジャンプワイヤーやはんだ付けで繋ぐと手間のため便利

    2. ジャンプワイヤ:ブレッドボードに差し込むだけで基板上の回路を繋ぐ

      • ブレッドボード上の回路作成用

    4.Picoの環境構築

     Raspberry Pi Picoの環境構築を実施します。Raspberry Piとの大きな違いは下記の通りです。

    1. OSを使用しない(インストールできない)

      • OSがないためインターネットやアプリなどが使用できない

      • 色々なことが出来ない代わりに起動速度が速い

    2. OSが無いためPico単体でプログラミングできない

      • Raspberry PiのようにThonnyやVS Codeは使用できない

      • 必ず別のPCでプログラミングを作成し、それをPicoに転送

    4-1.Picoへの給電方法

     Picoへの電源供給方法(給電)は大きく分けて下記2つがあります。本記事ではPCに繋ぎながら作業するため”MicroUSB経由”で給電しました。
     なおUSBと端子の両方から給電するとPC側に悪影響を及ぼす可能性もあるため同時接続(特にプログラム書き込み時等)は注意が必要です。

    1. MicroUSB経由:Picoの基板上にあるポートにUSBケーブルを接続

      • モバイルバッテリーからの給電も可能

    2. 直流電流(DC)を直接給電:VBUS端子(Pin40)やVSYS(Pin39)にDC電源を供給すれば給電可能

    画像

    【コラム:DC電源での給電時の留意事項】
     DC電源での給電時の留意事項は下記の通りです。

    1. 基本的にUSB電源と端子からの電源供給は同時にしない方がよい

      • USBとVBUS端子は直接つながっており、ダイオードも無いためPCに破損リスクあり。VBUS端子とUSBは直結しているため5V以上の電圧が入るとPCが破損する可能性あり。なおVSYS端子は間にダイオードがあるため問題なし

      • USB(5V)の電圧がダイオードを通過すると、VSYS端子の電圧が低い時に電源側に電気が流れる可能性がある。対策としては電源とVSYS端子の間にダイオードをかますことが考えられる。

    2. VBUS端子(Pin40)やVSYS(Pin39)で対応する入力電圧が異なる

      • 3.3VのDC-DCコンバータが内蔵されているため、VSYS端子は1.8V~5.5Vの電源を供給すれば動作する

      • VBUS端子(Pin40)は5Vの電源を供給する必要あり

    3. 5V電源の出力利用時は注意

      • VSYS利用時はVBUS端子から5Vの電圧を取り出せない

    画像
    (出典:Raspberry Pi Pico Datasheet  4.4. Powerchain)

    4-2.統合開発環境(IDE)

     プログラムを作成するためのエディタを準備します。エディタの種類としては下記があります。

    1. Thonny:初学者向けのPython用IDEであり、Raspberry Pi OSにはデフォルトでインストールされています

    2. Visual Studio Code(VS Code):多言語(Python含む)のコード作成に適用しており、拡張機能も豊富である。

    3. 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つの方式があります。

    1. ビルド方式:

      • 作成したプログラムを機械語形式に変換(ビルド)し、生成されたバイナリファイル(UF2形式)をPicoに書き込む

      • オーバーヘッド(いわゆる無駄)が小さいため高速に動く

      • プログラム変更のたびにビルドが必要

      • 作成言語がC言語のため学習コストが高い

    2. ファームウェア方式:

      • ユーザーが作成したプログラムを解釈してPicoへ渡す「ファームウェア」をあらかじめPico側に準備しておく

      • ファームウェアを介在して実行するためビルドは不要だがオーバーヘッドは大きくなる。

      • ファームウェア方式ではPythonライクなMicroPython※によりプログラムの実行が可能(※Pythonだとメモリを食いすぎるため)

    ※C言語やPython以外でもビルド環境、ライブラリ、ファームウェアがあれば多言語も利用可能(JavaScript:Kaluma、Ruby:PicoRubyなど)

     直近でオーバーヘッドの影響は気にしないため、「MicroPythonを使用してPicoにファームウェアを書き込む」方法で対応します。

     PicoにMicroPythonのファームウェアを書き込む方法は下記があります。今回は1を実行しました。

    1. 既にあるファームウェアのファイルを直接Picoに転送

    2. IDE(VS Code/Thonnyなど)を利用して書き込み

     4-3-2.ファームウェアファイルの転送

     手順は公式Docsより下記の通りです。

    1. ファームウェアファイル(UF2形式)のダウンロード

    2. BOOTSELボタンを押しながらUSBに接続

    3. RPI-RP2のフォルダの確認

    4. UF2ファイルをRPI-RP2にコピー

    5. プログラムの作成/実行

    画像

     ファームウェアファイルは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を開きプログラムを作成しました。

    1. エクスプローラーを選択し「フォルダを開く」を押す

      • 直接MicroPicoを作ろうとするとエラーが発生

    2. 適当に作成したフォルダを開くとエクスプローラーに表示される

      • 今回は「test_pico」フォルダを作成

    3. コマンドパレットを開き(Ctrl+Shift+P)"MicroPico:Configure project"を選択

    4. ステータスバー(左下)が「Pico Connected」になっていることを確認

    画像

     新しいファイルを作成し下記コードを作成します。今回のコードは「GitHub MicroPico」をほぼ流用しました。
     最後にコードの実行します。実行/停止方法は下記2種類です。

    1. ボタンを押す

      • 実行:▷RUN

      • 停止:□STOP

    2. コマンドパレット

      • 実行: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”と指定しました。

    画像
    https://www.raspberrypi.com/products/raspberry-pi-pico/

    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内のファイルを確認することが出来ます。

    1. コードを作成

    2. 名前を付けて保存(Ctrl+S)を選択し、「Raspberry Pi Pico」を選択

    3. ファイル名に"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日:お役立ち情報追加


     
     

    KIYO

     
     
    普段は製造業で企画/開発/設計しております。記事はプログラミング・機械学習、IoT関係の記事をメインで作成し、なるべく1つの記事で知りたいことを網羅していきます。内容は学術的より実装・アウトプット(ほしくなるもの)を重視して作成しています。 面白そうな仕事があればやりたいです!

    あなたへのおすすめ