PR

BluetoothでLチカ!マイコンをスマホから操作する方法

記事内に広告が含まれています。

 Bluetoothの無線通信でスマホからマイコン(Arduino/RaspberryPi)を制御してみます。

スポンサーリンク

概要

 スマホアプリ(Android)を作成してみました。スマホアプリの作成はかなり久しぶり、たぶん10年くらい前、、なのでまずは簡単そうなLチカを試してみます。

▼作成したアプリ▼

Bluetooth通信、GIF

 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接続

whenListPickerBeforePicking
whenListPickerAfterPicking

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

ON/OFF スイッチ

 スイッチのタッチに応じて「100」or「99」の値をグローバル変数に確認してます。

送信部分

 10msタイマーで定期的にデータ送信してます。

 チェックのためにスタート/エンドで「115」と「113」を送信してます。アスキーコードで「S」[Q]だったかな。。スマホ側はこんな感じです。MIT APP Inventor2ですが10年前くらいと日本語での情報量があまり変わってない感じですね。需要が少ないのかな?よく生き残っててくれました。

 無線通信といってもSPPであればほぼシリアル通信と同じです。単純なLチカであれば非常に簡単。とりあえず今回は一方向の送信でしたが、今後はもう少し大きな数値で複数データ、また双方向でのやり取りを試していこうと思います。

コメント

タイトルとURLをコピーしました