Raspberry Pi Pico W のBluetoothを使ってパソコンと無線通信してみました。以前ESP32で実施した内容のPico版です。既存の有線シリアル通信をほぼそのまま無線化できるのでかなり簡単にパソコンやスマホと無線することができて便利。簡単な例題で方法をまとめておきます。
概要
簡単な例として、パソコンからの無線操作でPicoのオンボードLEDのON/OFF制御を行います。BluetoothのSPP方式を使えば、有線シリアル通信で使用していたソースをほぼそのまま使用することが可能。
パソコンからのBluetooth無線でオンボードLEDを操作しているところです。今回はこれを例にBluetoothの使い方を解説します。
ソースコード(Pico側準備)
ArduinoIDEを使用。ボードはearlephilhower版を使用してます。
ソース全文
「W」ではオンボードLEDの割り当てが無印のPicoとは異なるので注意必要です。
//2024/05/01
//2024/08/11 ledピン誤記訂正
//imo Lab.
//https//garchiving.com
//Raspberry Pi Pico BluetoothSPP無線通信テスト
#include "SerialBT.h"
void setup() {
Serial.begin(115200);
SerialBT.begin();
pinMode(32, OUTPUT);
digitalWrite(32, LOW);
}
void loop() {
if (SerialBT.available()) {
byte inBuf[1];
SerialBT.readBytes(inBuf, 1);
Serial.print((char)inBuf[0]);
Serial.println("");
if (inBuf[0] == 's') {
SerialBT.println("ECHO BACK >> LED ON");
digitalWrite(32, HIGH);
}
if (inBuf[0] == 'g') {
SerialBT.println("ECHO BACK >> LED OFF");
digitalWrite(32, LOW);
}
}
}
ポーリング処理で、パソコンから「s」を受信したらLEDをON、「g」を受信したらOFFにするソース。デバッグ目的で有線シリアルも同時に使用してます。BluetoothSPPはserialBT.h
をインクルードするだけで利用できるようになります。
切り取って解説
#include "SerialBT.h" void setup() { SerialBT.begin(); }
インクルードして、.begin()
で開始するだけ準備はOK。SerialBT.
でインスタンス化されていて通常の有線シリアル通信と使い方は同じでほぼ同様の関数が使えます。
byte inBuf[1]; SerialBT.readBytes(inBuf, 1);
パソコンから送信されてきたデータを1byteずつ処理。受信データをいったん変数inBuf
に格納してます。.readBytes()
を使用してますが普通に.read()
でも問題無いと思います。
if (inBuf[0] == 's') { SerialBT.println("ECHO BACK >> LED ON"); digitalWrite(25, HIGH); } if (inBuf[0] == 'g') { SerialBT.println("ECHO BACK >> LED OFF"); digitalWrite(25, LOW);
受信した文字列に応じてLEDのON/OFF制御、と同時に文字列をパソコンへ無線送信してます。
Picoにこのソースを書き込んだらPico側の準備が完了。次にパソコン側の準備をします。
パソコン側準備
Bluetoothが搭載されているパソコンが必要です。
ペアリング
パソコンからPico(Bluetooth)をペアリングを行います。
パソコンで「Bluetoothデバイスの追加」⇒「…追加する」を選択します。▼
▲Pico側の準備ができていればデバイス名「PicoW Serial」が表示されるので選択してペアリングします。
COMポートの確認
続いて接続されたCOMポート番号を確認します。
パソコンで「コンピューターの管理」-「デバイスマネージャー」-「ポート(COMとLPT)」を確認▼
ペアリングされているとCOMポートにBluetooth経由のシリアルポートが表示されてます。上記のように複数表示されていれている場合は、Picoの発信ポートを確認します。
「Bluetoothとその他のデバイス」-「その他のBluetoothオプション」⇒「COMポート」タブ▼
▲発信側のCOMポート番号を確認します。ここでは「COM9」になってます。このポート番号を控えておきます。
ここまで出来たら準備完了です。実際にパソコンから無線でLEDを操作してみます。
パソコンから通信テスト
今回、パソコンからの接続はTera Termを使用します。ポートアクセス可能なソフトならなんでもいいと思います。ポートアクセス可能なソフトならなんでもいいと思います。試してませんがArduinoIDEのシリアルモニタからでも行けるかもしれません。
Tera Termを起動して、先ほど確認したCOMポートに接続します。
接続できたら無線通信する準備完了です。
通信テスト
パソコンからキーボードで「s」「g」をタイプするとエコーバックとともにLEDのON/OFFが確認できれば成功です。
既存の有線シリアル通信をほぼそのまま無線化できるのでかなり便利です。有線シリアル通信とも共存できるのでデバックも便利でいろいろ使えそうです。ただSPP規格がだんだんと無くなっていく方向なので少し残念です。
コメント