Pi Pico W でBluetooth Low Energy(BLE)を試してみる


Pico W の発売当初、ファームウェアはCYW4343 チップのWi-Fi のみサポートしていましたが、ここにきてBluetooth も使えるようになったようです。

Bluetooth という場合、2種類あります。Bluetooth Classic とBluetooth Low Energy(BLE)です。

Pico W でBluetooth を使う場合はマイコンのリソースの少なさからBLE を使うことになります。

BLE は、省電力を特徴として開発された Bluetooth 無線技術の一種です。 常にアクティブな Bluetooth Classicとは異なり、BLE はデータを送受信していないときはスリープ状態を維持できます。 そのため、スマートウォッチ、フィットネス トラッカー、セキュリティ監視デバイスなどのバッテリー駆動のデバイスでの使用に最適です。。

ここではMicroPythonを使用し、Raspberry Pi Pico WをPeripheralの役割に設定し、Bluetooth Low Energy 経由で Android デバイスとのポイントツーポイント通信を確立します。

 

元ネタ Raspberry Pi Pico W Bluetooth(BLE) using MicroPython | Point-to-Point Communication

 

Raspberry Pi Pico W には、シングルバンド 2.4 GHz Wi-Fi 4 (802.11n) と Bluetooth 5.1 を備えた Infineon CYW4343 チップが搭載されています。 MicroPython モジュールは、このチップと簡単に接続し、他のデバイスと通信するのに役立ちます。

 

 

 

 

 

 

 

 

 

 

 

ここで必要なコンポーネントは以下のとおり

Raspberry Pi Pico W Bluetooth オンボードを使用して LED を制御

 

 

 

 

 

 

 

 

以下のステップでAndroid アプリケーションから Bluetooth 経由で受信したデータを使用して、Raspberry Pi Pico W のオンボード LED を制御する方法を示します。 この例では、BLE モジュールを使用してシリアル通信がエミュレートされます。

Step 1: MicroPython のUF2 ファイルをインストールする

正しいバージョンの MicroPython UF2 ファイルが Raspberry Pi Pico にインストールされることを確認します。
UF2 ファイルは、Raspberry Pi MicroPython ドキュメント ページにあります。 Wi-Fi および BLE をサポートする Raspberry Pi Pico W 用の正しい UF2 ファイルをダウンロードします。

 

 

 

 

 

 

ファイルをダウンロードしたら、BOOTSEL ボタンを押しながら、USB ケーブルを使用して Raspberry Pi Pico を母艦に接続します。 RPI-RP2 という名前の新しいドライブがファイル エクスプローラーに表示されます。 UF2 ファイルをこのドライブにドラッグ アンド ドロップ します。 完了すると、ドライブはファイル エクスプローラーから自動的に消えます。

 

Step 2:Bluetooth モジュールを Pico W に保存

Bluetooth Low Energy 経由で通信するには、RPi Pico に 2 つの MicroPython モジュールを保存する必要があります。
ここでは Thonny IDE を使用して手順を説明します(Thonny はラズパイにプレインストールされています)。

USB ケーブルを使用して Raspberry Pi Pico W を母艦に接続します。

Thonny IDEを起動して、[ファイル] > [新規]  で新しいプロジェクトを開き、 以下のコードをコピペ。

 

【ble_advertising.py】

 

[ファイル] > [名前を付けて保存] をクリック、[Raspberry Pi Pico] を選択し、ファイル名に ble_advertising.py を付け、「OK」を押します。

同様に、[ファイル] > [新規]  で新しいプロジェクトを開き、 以下のコードをコピペ。

 

【ble_simple_peripheral.py】

 [ファイル] > [名前を付けて保存] をクリック、[Raspberry Pi Pico] を選択し、ファイル名にble_simple_peripheral.py を付け、「OK」を押します。

 

Step 3:LED を制御するための MicroPython Bluetooth サンプル コード

[ファイル] > [新規]  で新しいプロジェクトを開き、 以下のコードをコピペ。

 

【main.py】

  [ファイル] > [名前を付けて保存] をクリック、[Raspberry Pi Pico] を選択し、ファイル名にmain.py を付け、「OK」を押します。

F5 キーを押すか、「実行」アイコンをクリックしてコードを実行します。

スクリプトが実行されると、コンソールに「advertisingを開始しています(Starting advertising)」というテキストが表示されます。

 

 

 

 

 

 

 

 

 

 

 

 

Step 4:Android アプリのセットアップ

無料で入手できる Play ストアからアプリ Serial Bluetooth Terminal をインストールします。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

アプリを開き、ナビゲーション ドロワーから [デバイス] をクリックします。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

「Bluetooth LE」タブを選択し、「SCAN」をタップします。 デバイスが mpy-uart としてリストされているはずです。
接続するデバイス名を選択します

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

接続が確立されると、Android アプリに「接続されました」というメッセージが表示されます。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Thonny IDE のコンソールにも「新しい接続 64」というテキストが表示されます。

 

 

 

 

 

 

 

 

 

 

 

 

Step 5:Bluetooth アプリ経由でオンボード LED の切り替え

Android アプリで、引用符なしで「toggle」と入力し、送信アイコンをタップします。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Pico のLEDがONになります。

 

 

 

 

 

 

 

 

 

 

 

コマンドを再度送信すると、状態が ON から OFF に切り替わります。

何度も繰り返すとLEDがチカチカします。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Pico 側でデータが送られているのが確認できます。

 

 

 

 

 

 

 

 

 

 

 


Raspberry Pi Pico W で Bluetooth を使用してプッシュボタンのステータスを読み取る

 

 

 

 

 

 

 

 

このパートでは、Raspberry Pi Pico W から Bluetooth 経由で Android でデータを受信する方法を扱います。例として、プッシュボタンが押されたかどうかを監視し、Android アプリのコンソールにそのステータスを表示します。

 

Step 1:プッシュボタンを Raspberry Pi Pico W に接続する

以下の回路図に示すように、GPIO 0 と Raspberry Pi Pico W のいずれかの GND ピンの間にプッシュボタンを接続します。

 

 

 

 

 

 

 

 

 

 

 

Step 2:Bluetooth LE 経由でデータを読み取るための MicroPython サンプル コード

上で説明した MicroPython モジュール ble_advertising.py および ble_simple_peripheral.py も RPi Pico W に
プリロードする必要があります。

Thonny IDE を開きます。

以下の3つのコードをPico W に保存します。

【ble_advertising.py】

 

【ble_simple_peripheral.py】

 

【main.py】

 

main.py スクリプトが実行されると、コンソールに「広告を開始しています(Start advertising)」というテキストが表示されます。

 

 

 

 

 

 

 

 

 

 

 

 

Step 3:Android アプリに接続してデータを読み取る

上記の LED 制御セクションで説明した手順と同様に、Serial Bluetooth Terminalアプリを使用します。
Android アプリを BLE 経由で Pico W に接続します。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上記と同様に、Blooth LE ー> SCAN の順でデバイスを検索しますが、以前のデータが残っていて複数表示されることがあります。ただしくconnectできる方を選びます。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

無事接続

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Pico W の側でも確認できます。

 

 

 

 

 

 

 

 

 

 

ボタンをプッシュしてみます。

 

 

 

 

 

 

 

 

 

 

 

 

 

Pico W に接続されているプッシュボタンを押すと、Android アプリのコンソールに
「プッシュボタンが押されました」というテキストが表示されます。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以下のアイコンをタップすれば、通信は切断されます。

隣のゴミ箱をタップすればログが消去されます。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上です。

 

 

 

 


Appendix

Bluetooth Classicのデバイスの場合
マスター(Master)とスレーブ(Slave)の2種類の役割があります。
マスターはコンピュータネットワークのクライアント/サーバにおけるサーバに相当するもので、スレーブとはクライアントに相当するものです。

Bluetooth Low Energyのデバイスの場合
セントラル(Central)とペリフェラル(Peripheral)の2種類の役割があります。
セントラルは、ネットワーク上の親局で、ペリフェラルに機能を提供してもらうサーバで、スマートフォンやタブレットなどがセントラルになります。
ペリフェラルは、ネットワーク上の子局で、体重計や体温計、スマートウォッチなどのセンサーの値やバッテリーの残量など、何かしらの情報や機能を提供するデバイスがペリフェラルになります。


Appendix2

C/C++ でBluetooth を何とかしたい場合

pico-SDK + pico-examples で使えそうなものを試してみましょう。

Pico W Bluetooth

 


 

 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*