技術コラム(第24回)Raspberry Pi PicoのPythonを使う
前回の記事で、Raspberry Piについてご紹介しました。
今回はその一種である、Raspberry Pi Picoについてご紹介いたします。
Raspberry Pi Picoについて
Raspberry Pi Pico(以下Pico)は550円程度で買える、Raspberry Pi財団自身が販売しているお手頃な開発ボードです。Raspberry Pi 財団が開発した独自プロセッサRP2040を搭載しています。以下、その特徴を示します。
- ARM Cortex-M0+をコアにもち、最大133MHzで動作する、デュアルコア
- リアルタイム信号処理を可能とするプログラマブルI/O
- 1クロックサイクルで処理可能なSIO(GPIO)
また、以下のような応用可能性を持っています。
- 音声処理やグラフィックスレンダリング
- ハードウェア整数除算器、ROM内蔵の高速浮動小数演算ライブラリにより高速計算
このように、小さいサイズながら非常に強力な開発ボードとなっています。
Pico自体のスペックは以下のようになります。
MCU(マイコン) | RP2040 |
CPUコア | ARM Cortex-M0+プロセッサ デュアルコア |
RAM | 256KB SRAM |
FLASH | 2MB Quad-SPI |
USB | USB 1.1 microB×1 |
GPIO | 個数:26(ディジタル対応:23、アナログ対応:3) |
SWD | あり(3ピン) |
SPI | 個数:2 |
I2C | 個数:2 |
UART | 個数:2 |
ADコンバータ | 12bit 500ksps 個数:3 |
電源 | 1.8V ~ 5.5V |
I/O電圧 | 3.3V |
サイズ | 21×51.3×3.9mm |
組込開発.comでは新しい開発ボードを購入し、日々自己学習を行いながら技術の研鑽しています。
次に公式でサポートされている開発環境について説明します。
開発環境について
Picoの公式開発言語については、以下があります。
C/C++ | MicroPython | |
---|---|---|
主な目的 | 高性能/汎用アプリケーション | プロトタイピング,IoT |
ツールチェーン | GNU Arm Embedded Toolchain | 不要 |
コンパイラ | GCC(C/C++),pioasm(PIO)※ | 非サポート |
デバッガ | SWD経由GDB+OpenOCD | 非サポート |
実行形態 | コンパイラによるネイティブコード実行 | インタプリタによる逐次実行 |
特徴 | Pico/RP2040の全機能に対応し、レジスタ操作による細かい制御可能。 | レジスタ操作などのプリミティブな操作は処理系で隠蔽。ラピッドプロトタイピングが可能。 |
※pioasm(PIO) :RP2040のプログラマブルI/O命令をC言語のプログラムに変換するアセンブラ
C/C++では開発期間が長くなりますが、Picoの性能を引き出す事が出来ます。逆に開発工程が短くなるMicroPythonは試作品開発に向いています。スポットでC/C++で開発して性能を引き出しながら、他はMicroPythonでスピード開発という事も可能です。
今回は、上記MicroPythonについて開発環境を整えるまでを解説したいと思います。
MicroPython開発環境の構築
1.C/C++プログラミングモードをMicroPythonプログラミングモードに変更する
購入直後のPicoはC/C++プログラミングモードとなっています。これをMicroPythonプログラミングモードへと変える必要があります。そのため、ファームウェアをインストールし直します。ファームウェアをインストールし直すには、専用装置/ソフトが必要に思われるかもしれませんが、GUIで行う事が可能です。
- MicroPythonのファームウェアをダウンロード
以下の公式サイトから、最新のMicroPythonファームウェアをPC上にダウンロードします。
MicroPython – Python for microcontrollers
※ 執筆時点(2021/9/20)での安定版最新は”rp2-pico-20210902-v1.17.uf2”になります。 - ファームウェア書き込みモードでPCに接続
Picoボード上の[BOOTSEL]ボタンを押しながら(赤い四角で囲んだボタン)PicoとPCをUSBで接続して[BOOTSEL]ボタンを離すと、ファームウェア書き込みモードでブートします。すると、PicoはRPI-RP2という名称の外付けドライブとしてPCから見えるようになります。 - ファームウェアをPicoに書き込む
ダウンロードしたMicroPythonのファームウェアをRPI-RP2にコピーします。コピーはドラッグ&ドロップでOKです。 - MicroPythonが起動する事を確認
ファームウェアの書き込みが終了すると、自動でPicoが再起動し、MicroPythonを起動します。同時にPCからドライブがアンマウントされ、ドライブとして認識されなくなります。
以上、4つの手順を行うだけでファームウェアがインストールし直され、C/C++プログラミングモードからMicroPythonプログラミングモードに変更する事ができます。
2.開発環境Thonnyを導入する
PCのシリアル端末からMicroPythonのプログラミングが可能ですが、GUIによる開発環境も存在します。今回はGUI開発環境であるThonnyを導入します。ThonnyはMicroPythonの他、その派生言語であるCircuitPython、PCなどで一般的なCPythonに対応しています。対応OSもWindows/macOS/Linux(Raspberry Pi OS含む)となっています。
- Thonnyのダウンロード
以下の公式サイトから、対応OSのThonnyをPC上にダウンロードします。
Thonny, Python IDE for beginners - インストール
インストールウィザードに沿ってインストールを行います。 - Thonnyの起動
初期設定として、以下のような画面が開きます。下記のように選択して[Let’s go!]をクリックしましょう。 - 初期設定
- メニューバーの表示(※表示されている場合はスキップ)
上記画面のように、メニューバーが表示されていない場合、右上の青字
[Switch to regular mode]
を押した後、Thonnyを再起動してください。再起動後、表示されます。 - メニューの日本語化(※「3.Thonnyの起動」で[日本語[ALPHA]]を設定した場合はスキップ)
メニューバーより [Tool] → [Option] でオプション設定画面を開きます。
[Language]項目で[日本語[ALPHA]]を選びます。
Thonnyを再起動すると、日本語になります。 - PCとPico両方のファイルを見えるようにする
メニューバーより [表示] → [ファイル]にチェックを入れます。
次に[ツール] → [Option] → [インタプリタ]タブをクリックします。
コンボボックスより[MicroPython(Raspberry Pi Pico)]を選択します。
これにより、PC内とPico内の両方のファイルが画面左側に表示されるようになります。
※ Pico未接続時は以下のように表示されます。
※ Pico接続時は以下のように表示されます。
(ファイルが二つに別れ、ShellにMicroPythonコンソールが表示されている)
- メニューバーの表示(※表示されている場合はスキップ)
3.PicoをLチカさせる
PicoのオンボードLEDを用いて、MicroPythonの最低限の構文規則について理解し、Lチカを行おうと思います。
- Lチカ用のソースコードをThonnyで作成する
以下プログラムリストをThonnyで作成します。from machina import Pin
import utime
# PicoではGPIO25にLEDが接続されている
led = Pin(25, Pin.OUT)
while True:
# LEDの状態を反転(点滅)
led.toggle()
# 200ms waitする
utime.sleep_ms(200)
- main.py と名前をつけて、Pico に保存する
保存ボタンを押すと、保存場所をPCかPicoを選択するダイアログが表示されます。”Raspberry Pi Pico”ボタンをクリックする事でPico側に保存出来ます。
※ main.py以外の名前では動作しないので、ご注意ください。 - 実行する
実行ボタン(赤枠のボタン)を押す事でLチカが始まります。停止ボタン(青枠のボタン)を押す事でプログラムが停止し、Lチカが止まります。
「1.Lチカ用のソースコードをThonnyで作成する」で作成した、プログラムリストを変えて、Lチカの点滅速度等を変えてみてください。また、電源を挿せばそのままスタンドアロンで動作させる事が可能です。
終わりに
組込開発.comでは、これら最新デバイスを含め、色々な開発実績を持っています。これまでの開発実績は以下リンクよりご確認ください。
投稿者プロフィール
- 組込み開発歴もうすぐ10年?な者。ですがまだまだひよっこな開発者。電子基板を片手に色々とやるぞ!と意気込みだけは十分…でしょうか。Raspberry系のものを触ったり、飽きればまた別のも触ります。この頃自分が飽きっぽい性格な事に気づきました。そんな自分ですが、VR系も好きでUnityとかも趣味で触り勉強中。3Dは難しい。
最新の投稿
- 技術コラム2022年12月20日技術コラム(第26回)Raspberry Pi Pico(MicroPython)で温度センサを使う
- 技術コラム2021年11月5日技術コラム(第24回)Raspberry Pi PicoのPythonを使う
- 技術コラム2020年10月7日技術コラム(第18回)I2Cについて