Raspberry Pi Pico WセンサーをBluetoothを使って読み取る方法

Raspberry Pi財団による人気のIoT開発ボード、Raspberry Pi Pico Wは、2022年の発売以来、多くのメーカーから支持を集めています。C SDKのバージョン1.5.1と最新のMicroPythonビルドが正式にリリースされて以来、Raspberry Pi Pico W(およびWH)ボードでBluetooth接続が機能するようになりました。

このボードでは、Bluetooth経由でデータを読み取り、共有することができ、IoTに関するさまざまなプロジェクトの可能性が広がります。しかも、必要なのはファームウェアのアップデートだけです。以下の手順に従うだけで、Raspberry Pi Pico WでBluetoothを使ってセンサーデータを読み取ることができます。

Raspberry Pi Pico W/WHとBluetooth

Raspberry Pi Pico Wは、初代Raspberry Pi Picoモデルの成功を基に開発されたマイクロコントローラボードです。前モデルと同じフォームファクタを維持しつつ、Wi-FiとBluetooth接続機能が追加されました。ツイン20ピンGPIOヘッダーには、標準のRaspberry Pi Picoピン配置が引き続き採用されています。

Pico Wには、802.11n Wi-FiとBluetooth 5.2の両方をネイティブでサポートするInfineon CYW43439無線チップセットが搭載されています。

最新のPico C/C++ SDKのインストール

Pico C/C++ SDKは、C言語とC++言語を使ってRaspberry Pi Picoマイクロコントローラをプログラムするために特別に設計されたソフトウェア開発キットです。一連のライブラリ、ツール、リソースが提供されており、開発プロセスを簡素化し、開発者がPicoボード用のアプリケーションを作成できるようにします。

Pico C/C++ SDKを使用するには、いくつかの必須ソフトウェアコンポーネントが必要です。ダウンロードする必要があるプログラムを以下に示します。

  • ARM GCCコンパイラ: Picoマイクロコントローラ用のC/C++コードをコンパイルしてビルドするために使用されます。
  • CMake: ビルドプロセスを管理し、プロジェクトファイルの生成を支援するクロスプラットフォームのビルドシステム。
  • Visual Studio 2019用のビルドツール: Visual Studioを統合開発環境(IDE)として使用する場合に必要です。
  • Python: Pico SDKツールのいくつかはこのプログラミング言語を使用しているため、バージョン3.9以降がインストールされていることを確認してください。
  • Git: このバージョン管理システムを使用すると、コードベースの変更を管理および追跡できます。
  • Visual Studio Code: 必須ではありませんが、Visual Studio CodeはPico SDKを強力にサポートする人気のコードエディタであり、構文のハイライト、コード補完、デバッグなどの機能を提供します。

MicroPythonのインストール

または、以下の例で使用する方法として、MicroPythonを使ってPico Wをプログラムすることもできます。インストールして使用するための手順を以下に示します。

UF2ファームウェアのフラッシュ

Pico Wボードをブートローダーモードにする方法はいくつかあります。1つは、MicroPython REPLでコマンドmachine.bootloader()を実行する方法です。もう1つの方法は、ボードをコンピュータのUSBポートに接続しながらPicoのBOOTSELボタンを押し続けることです。

Picoがブートローダーモードになると、コンピュータにUSBマスストレージデバイスが表示されます。

あとは、新しいファームウェアを含むUF2ファイルをこのUSBマスストレージデバイスにコピーするだけです。

MicroPythonのダウンロードページからUF2ファイルをダウンロードできます。また、Bluetoothサポートの更新の詳細を確認したい場合は、リリースノートを参照してください。

ファームウェアのフラッシュが進行すると、PicoボードのLEDが高速に点滅します。その後、ボードは自動的にリセットされ、使用可能になります。

または、以下で詳しく説明するように、Thonny IDEからPicoにファームウェアをフラッシュすることもできます。

Thonny IDEを使用する

まず、PicoをUSB経由でコンピュータに接続します。ボードを接続するときにBOOTSELボタンを押し続けることで、Picoがブートローダーモードになっていることを確認してください。

コンピュータでThonny IDEを起動すると、以下に示すように、エディタウィンドウのあるインターフェースが表示されます。

使用するインタプリタをMicroPythonに変更する必要があります。Thonnyのメニューから、ツール>オプションに移動します。

オプションウィンドウで、インタプリタタブをクリックします。インタプリタドロップダウンメニューからMicroPython (Raspberry Pi Pico)を選択します。

自動検出を試みるにポートを設定し、下部のインストールリンクをクリックします。別のインストールウィンドウが開きます。IDEには、インストールが必要な最新のファームウェアとともにボードの詳細が自動的に入力されます。インストールが完了したら、閉じるボタンをクリックし、OKを選択します。

必要なBluetoothモジュールの保存

Raspberry Pi PicoでBluetooth Low Energy通信を有効にするには、2つのMicroPythonモジュールを保存する必要があります。Thonny IDE(またはuPyCraftなどの他のIDE)を使用して、その方法を以下に示します。

GitHubリポジトリに移動し、ble_advertising.pyという名前の最初のヘルパーコードを取得します。これにより、ペイロードを生成し、接続されたノードにブロードキャストできます。

コードをコピーしたら、Thonny IDEで新しいプロジェクトを開き、エディタに貼り付けます。次に、ファイル>名前を付けて保存をクリックし、Raspberry Pi Picoを選択して、Pico Wにble_advertising.pyとして保存します。

Thonnyで別のファイルを作成し、GitHubリポジトリにあるble_simple_peripheral.pyという名前のファイルのコードをコピーします。

以前と同じように、Pico Wボードに元の名前でコードを保存します。

Pi Pico Wを使用してBluetooth LEでデータを読み取る

まず、2つのモジュール(上記の説明のとおり)をPico Wボードにプリロードします。次に、新しいファイルを作成し、以下のコードをコピーして貼り付けます。

from machine import Pin, ADC
import bluetooth
from ble_simple_peripheral import BLESimplePeripheral
# Create a Bluetooth Low Energy (BLE) object
ble = bluetooth.BLE()
# Create an instance of the BLESimplePeripheral class with the BLE object
sp = BLESimplePeripheral(ble)
adc = ADC(4)
while True:
if sp.is_connected(): # Check if a BLE connection is established
# Read the value from the internal temperature sensor
temperature = adc.read_u16() * 3.3 / (65535 * 0.8)
# Transmit the temperature value over BLE
temperature_data = str(temperature).encode()
sp.send(temperature_data)
time.sleep(1)

このコードは、Picoの内部温度センサーを読み取り、Bluetoothで送信します。ファイルをPico Wボードにmain.pyとして保存し、Thonnyで実行します。シェル領域に「Starting Advertising」が表示されます。

Androidアプリの設定

Androidスマートフォンに、Google PlayストアからSerial Bluetooth Terminalアプリをインストールします。

ダウンロード:Serial Bluetooth Terminal(無料、アプリ内購入あり)

スマートフォンのBluetoothをオンにしてから、アプリを起動します。デバイスに移動します。

Bluetooth LEタブに移動し、スキャンをクリックします。

スキャンすると、Pico Wの名前がmpy-uartとして表示されます。クリックして接続します。

2つのデバイスが接続されると、アプリのターミナルビューに「接続済み」という単語が表示されます。

上の図のように、温度センサーの値が毎秒アプリのターミナルに表示され始めます。

「セントラル」の役割を果たす別のPico WにBluetoothで接続するには、MUO GitHubリポジトリにあるble_simple_central.pyという名前のヘルパーモジュールをプリロードします。

Pico Wの体験を向上させる

Bluetoothを統合することで、センサー値の収集が容易になり、新しい可能性が切り開かれ、IoTプロジェクトにおけるRaspberry Pi Pico Wの使用感全体が向上します。