
Bluetoothの無線通信でスマホからマイコン(Arduino/RaspberryPi)を制御してみます。
概要
スマホアプリ(Android)を作成してみました。スマホアプリの作成はかなり久しぶり、たぶん10年くらい前、、なのでまずは簡単そうなLチカを試してみます。
▼作成したアプリ▼

Bluetoothを使用してオンボードLEDのON/OFF制御。まずはスマホ⇒マイコンへの1方向のみで基本的な動きを確認してます。マイコンはRaspberry Pi PicoW(ラズパイPico)を使ってます。
マイコン側ソースコード
ラズパイPico側のソースコード。arduinoIDEではearlephilhower版のボードを使用してます。BluetoothSPP(Serial Port Profile)なので基本シリアル通信と作法はほぼ同じ。
//2024/05/01
//imo Lab.
//https//garchiving.com
//Raspberry Pi Pico BluetoothSPP無線通信テスト
#include "SerialBT.h"
void setup() {
Serial.begin(115200);
SerialBT.begin();
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
}
void loop() {
if (SerialBT.available() == 3) {
byte inBuf[3];
SerialBT.readBytes(inBuf, 3);
if (inBuf[0] == 115 && inBuf[2] == 113) {
int8_t raw[3];
raw[0] = inBuf[0];
raw[1] = inBuf[1];
raw[2] = inBuf[2];
if (raw[1] == 100) digitalWrite(LED_BUILTIN, HIGH);
if (raw[1] == 99) digitalWrite(LED_BUILTIN, LOW);
Serial.print((char)raw[0]);
Serial.print(raw[1]);
Serial.print((char)raw[2]);
Serial.println("");
} else {
while (SerialBT.available() > 0) SerialBT.read();
}
}
if (SerialBT.available() > 3) {
while (SerialBT.available() > 0) SerialBT.read();
}
delay(10);
}
いろいろテストしていたので妙に複雑なとことかもありますが、中身は単純にポーリングで受信バッファを確認してるだけです。3byte分のデータを受信したら内容確認して問題無ければLEDのON/OFF制御してます。2byte目が「100」ならON、「99」ならOFFです。
スマホ側(Android)コード
まだMIT App Inventor2があったので利用させてもらいました。主要なブロックコードの切り抜きです。
Bluetooth接続


Bluetoothデバイス(ラズパイPico)を探して接続(ペアリング)する部分です。
ON/OFF スイッチ


スイッチのタッチに応じて「100」or「99」の値をグローバル変数に確認してます。
送信部分
10msタイマーで定期的にデータ送信してます。

チェックのためにスタート/エンドで「115」と「113」を送信してます。アスキーコードで「S」[Q]だったかな。。スマホ側はこんな感じです。MIT APP Inventor2ですが10年前くらいと日本語での情報量があまり変わってない感じですね。需要が少ないのかな?よく生き残っててくれました。
無線通信といってもSPPであればほぼシリアル通信と同じです。単純なLチカであれば非常に簡単。とりあえず今回は一方向の送信でしたが、今後はもう少し大きな数値で複数データ、また双方向でのやり取りを試していこうと思います。
コメント