Raspberry Pi Pico上のMicroPythonでCircuitPythonライブラリを使う

AdafruitのLearning Guideの非公式日本語訳です。
英語独特の言い回しを可能な限り日本語的な表現に直していますが、不自然に感じる部分も残っていますことを何卒ご容赦ください。

概要

本ガイドは、Raspberry Pi PicoにMicroPythonをインストールして、豊富なCircuitPythonライブラリを使用する方法です。

BlinkaはAdafruitのCircuitPythonの互換性レイヤです。BlinkaはもともとPyBoardのようなボードで動作するMicroPythonの上で動作し、CircuitPython用に書かれたライブラリを動作させるための互換性レイヤとして書かれました。これにより、ライブラリの再利用が可能になり、メンテナンスに必要なライブラリが減りました。
BlinkaはすぐにLinuxベースのシングルボードコンピュータで動作するようになり、LinuxベースのRaspberry Piなどで同ライブラリが動作するようになりました。このライブラリは人気を博し、さらに多くのボードで動作するように拡張されました。その時点ではMicroPythonではあまり使われておらず、MicroPython上でBlinkaを実行する方法を示したガイドはあまりありませんでした。

最近、MicroPython上でBlinkaを動作させようとしたとき、動作させるためにはいくつかの点を修正する必要がありました。さらにRaspberry Pi PicoでのMicroPythonの実行をサポートすることにしました。

U2IFファームウェアを使ってRaspberry Pi PicoでBlinkaを実行する方法はすでにありますが、その違いはBlinkaがホストコンピュータ上で実行され、Raspberry Pi Picoがパススルーとして動作することです。この方法での実行に興味のある方は、Raspberry Pi Picoを使ったCircuitPython Libraries on any Computerのガイドをご覧ください。

さらに、Raspberry Pi PicoにCircuitPythonをインストールしてネイティブに実行することもできます。
しかし、Raspberry Pi Pico + MicroPythonの組み合わせや、MicroPython対応ボードでBlinkaを動作させたい場合は、このガイドをご覧ください。

Thonnyのセットアップ

最初のステップは、あなたのPCにThonnyをセットアップすることです。もし、すでにThonnyがインストールされているなら、続けてThonnyの設定を行うことができます。

Thonnyのダウンロードとインストール

Thonnyは、Windows、MacOS、Linuxなど様々なシステムで動作します。ThonnyはMicroPythonにファイルを書き込む最も簡単な方法です。https://thonny.org/ にアクセスして、最新版のThonnyをダウンロードします。
ダウンロードが終わったら、インストーラーを起動して手順を実行します。

Thonnyをセットアップする

ThonnyでRaspberry Pi Picoを使うには、いくつかの設定が必要です。

まず、「Tools」→「Options…」を選択してください。さらに、画面の右下の現在のインタプリタを選択し、「Configure Interpreter…」を選択します。

オプション画面で「Interpreter」タブを開きます。

最初のドロップダウンから、「MicroPython(Raspberry Pi Pico)」を選択します。

MicroPythonをインストールする

すでにボードがブートローダーモードになっていて、MicroPython(Raspberry Pi Pico)が選択されていれば、自動的にインストール画面が出てきます。表示されない場合は、以下の手順でインストールしてください。

Interpreter タブの画面には、「Install or Update Firmware」のリンクがあります。これをクリックしてください。

ファームウェアのインストール画面が表示されます。

BOOTSEL ボタンを押しながら,Pico を接続します。ターゲットデバイスの欄に表示されるはずです。

パッケージから取り出したばかりのボードであれば,BOOTSEL ボタンを押しながらプラグインする必要はありません。

Installボタンをクリックすると、インストールが始まります。ファームウェアをボードにコピーするのに数秒かかります。

コピーが終了したら、「閉じる」をクリックします。

ポートを選択する

自動的にポートを検出するようにしてみてください。

デバイスを見つけられなかったというメッセージが表示された場合は、画面上部にあるStop/Resetボタンを数回押してみてください。

手動でポートを選択することもできます。ドロップダウンメニューからポートを選択してください。これらはシステムごとに異なります。

デバイスがビジー状態であるというエラーが表示される場合は、画面上部のStop/Resetボタンをクリックしてみてください。

接続に成功すると、シェルウィンドウにRaspberry Pi Pico上でMicroPythonが動作していることが表示されます。

Blinkaとライブラリのインストール

BlinkaとCircuitPythonのライブラリのインストールは、Thonnyを使ってとても簡単にできます。ファイル転送機能が内蔵されているので、ファイルのコピーも非常に簡単です。

ファイル転送インターフェース

まず、ファイル転送ペインを表示させます。「View」→「Files」をクリックすると表示されます。

メインウィンドウの左側に、ファイルペインが表示されるはずです。要素のサイズを変更して見やすくすることができます。ローカルファイルは一番上に、Raspberry Pi Pico上のファイルは一番下に表示されているはずです。

アップロードするには、フォルダやファイルを右クリックして「Upload to」を選択すると、Picoで現在入っているフォルダにアップロードされます。

BlinkaとPlatformDetectをインストールする

BlinkaとPlatformDetectは、MicroPython上でBlinkaを動作させるために必要なものです。どちらもバンドルには含まれていませんので、GitHubからダウンロードする必要があります。最新のリリースをGitHubからダウンロードするには、以下のリンクをクリックしてください。

Source Code (zip) のリンクをクリックしてダウンロードしてください。

リリースファイルをダウンロードしたら、お好みのZIPユーティリティーソフトウェアを使って解凍し、デスクトップなどの安全な場所に置いてください。

Blinka、PlatformDetect、およびライブラリは、Picoのルートにインストールするか、libフォルダを作成してその中にライブラリをコピーすることができます。

PlatformDetectをインストールするには、Thonnyの「Files」ペインを使ってファイルを解凍した場所に移動し、adafruit_platformdetectフォルダをPicoにアップロードします。

Blinka をインストールするには、Blinka ファイルを解凍した場所に移動し、src フォルダ内のすべてを Pico にアップロードします。

最も簡単な方法は、src フォルダー内のすべてのファイルをハイライト表示し、右クリックして Upload to を選択することです。

すべてのファイルのコピーが終わると、Raspberry Pi Picoはこのようになります。

CircuitPythonライブラリをインストールする

まず、circuitpython.orgから最新のCircuitPythonライブラリ・バンドルをダウンロードします。

adafruit-circuitpython-bundle-py-*.zip バンドルのzipファイルをダウンロードし、同名のフォルダを解凍します。中にはlibフォルダが入っています。ライブラリのコレクション全体は大きすぎて、Raspberry Pi Picoには収まりません。その代わり、必要に応じてそれぞれのライブラリを追加していきます。この方法だと、スペースの使用量を減らすことができますが、少し手間がかかります。

BlinkaやPlatformDetectで行ったように、Thonnyのファイル転送システムを使ってバンドルフォルダに移動します。転送したいライブラリファイルやフォルダを選択し、「Upload to」を選択します。

BME280ライブラリの使用例

I2Cを使用するセンサーが多いので、今回の例ではI2Cを使用するAdafruit BME280センサーを使用することにします。

接続

  • BME280 の STEMMA QT コネクタの赤のワイヤを、Pico の 36 ピン(3.3V 出力)に接続します。
  • BME280 の STEMMA QT コネクタからの黒のワイヤを、Pico のピン 38 または GND に接続する。
  • BME280 の STEMMA QT コネクタの青のワイヤ(SDA)を Pico のピン 1(GP0)に接続する。
  • BME280 の STEMMA QT コネクタからの黄色のワイヤ(SCL)を,Pico のピン 2 または GP1 に接続します。

コード例

先に「本サンプルに必要なライブラリをダウンロード」をクリックして、依存するライブラリをダウンロードします。バンドルを解凍し、「BlinkaとPlatformDetectをインストールする」で説明したようにライブラリをアップロードします。

MicroPythonはMPYファイルでは動作しませんので、以下のリンクからadafruit_bme280ライブラリとその依存ライブラリを.py形式でダウンロードしてください。

# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT

import time
import board
import busio
import adafruit_bme280

# Create sensor object, using the board's default I2C bus.
i2c = busio.I2C(board.GP1, board.GP0)  # SCL, SDA
bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)

# OR create sensor object, using the board's default SPI bus.
# spi = busio.SPI(board.GP2, MISO=board.GP0, MOSI=board.GP3)
# bme_cs = digitalio.DigitalInOut(board.GP1)
# bme280 = adafruit_bme280.Adafruit_BME280_SPI(spi, bme_cs)

# change this to match the location's pressure (hPa) at sea level
bme280.sea_level_pressure = 1013.25

while True:
    print("\nTemperature: %0.1f C" % bme280.temperature)
    print("Humidity: %0.1f %%" % bme280.relative_humidity)
    print("Pressure: %0.1f hPa" % bme280.pressure)
    print("Altitude = %0.2f meters" % bme280.altitude)
    time.sleep(2)

Raspberry Pi Pico上のファイルは、ライブラリを追加した状態では以下のようになります。

緑色の実行ボタンを押すと、エディタからスクリプトが実行されます。

Thonnyを使ってpicoにコードをコピーし、Raspberry Pi Picoのルートフォルダにmain.pyとして保存して、毎回実行させることもできます。Picoに保存した場合は、Control+Dを押してソフトリスタートを行う必要があります。

シェルペインに温度と湿度の情報が表示されます。

Follow me on Twitter