ESP32に搭載されているBluetooth(SPP)を使用してパソコンと無線通信してみます。既存の有線シリアル通信をほぼそのまま無線化できるのでかなり簡単にパソコンやスマホと無線することができて便利。簡単な例題で方法をまとめておきます。
概要
テストの題材として、パソコンからの無線操作でESP32に接続しているLEDのON/OFF制御を行ってみます。BluetoothのSPP方式を使えば、有線シリアル通信で使用していたソースをほぼそのまま使用して無線化することが可能。
ただ、BluetoothのSPP規格は少し古い規格となっていて、SPP規格に対応しているBluetoothバージョンはESP32無印だけのよう。S3とかC3ではBluetooth5.0(BLE)となっていてSPP規格での通信はできないようなので注意が必要です。
ソースコード(ESP32側準備)
ESP側のソースコード。パソコン(Bluetooth無線)からの情報受け取って、LEDをON/OFFするソースコードです。
ソース全文
//2024/05/01 //imo Lab. //https//garchiving.com //esp32 BluetoothSPP無線通信テスト #include "BluetoothSerial.h" BluetoothSerial SerialBT; void setup() { Serial.begin(115200); SerialBT.begin("SPP-TEST"); 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); } } }
ポーリング処理で32pinに接続したLEDのOn/Off制御。パソコンから「s」を受信したらLEDをON、「g」を受信したらOFFにするソース。デバッグ目的でESPと有線接続しているパソコンにも文字列へ同時に無線送信してます。
切り取って解説
#include "BluetoothSerial.h" BluetoothSerial SerialBT; void setup() { SerialBT.begin("SPP-TEST"); }
serialBT
という変数名でインスタンス化。Bluettoth機器を検索したとき(ペアリングするとき)に表示したいデバイス名を引数にして.beginで初期設定してます。使用できる関数は有線のserial.
クラスとほぼ一緒です。
byte inBuf[1]; SerialBT.readBytes(inBuf, 1);
受信処理部分。パソコンから送信されてきたデータを1byteずつ処理。受信データをいったん変数inBuf
に格納してます。.readBytes()
を使用してますが.read()
でも問題無いと思います。
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); }
受信した文字列に応じてLEDのON/OFF制御。
このソースコードをESP32に書き込んでGPIO32ピンにLED結線したら、ESP32側の準備は完了。
パソコン側の準備
Bluetooth搭載のパソコンが必要です。
ペアリング
まずはパソコンからESP32(Bluetooth)をペアリングします。
パソコンで「Bluetoothデバイスの追加」⇒「…追加する」を選択します。▼
▲ESP32側でうまく準備できていればデバイス名「SPP-TEST」が表示されるので選択してパソコンとペアリングします。
COMポートの確認
続いて接続されたCOMポート番号を確認します。
パソコンで「コンピューターの管理」-「デバイスマネージャー」-「ポート(COMとLPT)」を確認
ESP32とペアリングされているとCOMポートにBluetooth経由のシリアルポートが表示されてます。上記のように複数表示されていれている場合は、ESP32の発信ポートを確認します。
「Bluetoothとその他のデバイス」-「その他のBluetoothオプション」⇒「COMポート」タブ▼
発信側のCOMポート番号を確認します。ここでは「COM5」になってます。このポート番号を控えておきます。名前が変なことになってますが、いろいろテストしていたら情報が重なってしまったようで、不明な現象です。。。
ここまで出来たら準備完了です。実際にパソコンから無線でLEDを操作してみます。
パソコンから接続テスト
今回、パソコンからの接続はTera Termを使用しました。ポートアクセス可能なソフトならなんでもいいと思います。試してませんがArduinoIDEのシリアルモニタからでも行けるかもしれません。
TeraTermを起動して先ほど確認したCOMポートに接続します。
パソコンからキーボードで「s」「g」をタイプ(送信)するとエコーバックとともにLEDのON/OFFが確認できれば成功です。
既存の有線シリアル通信をほぼそのまま無線化できるのでかなり気軽に無線化できて便利です。有線シリアル通信とも共存できるのでデバックも便利でいろいろ使えそうです。ただSPP規格がだんだんと無くなっていく方向なので少し残念です。
コメント