本記事は、AndroidスマホからBLE(Bluetooth Low Energy)によってM5StickC Plusに信号を送り、パワーLEDの光り方を制御する方法についてまとめます。
準備するハードウェア
手順
- パワーLEDを光らせる回路を組みます
- M5StickCの信号線をLEDドライバと接続します
- Blynkのsampleコードをもとに、コーディングします
基本的には、loop関数内でBlynk.run()を実行するだけで良いです。
ただ、一度スマートフォン側でBLEを切断したのち、再接続しようとしても接続できませんでした。
そこで、ライブラリを修正しました。
具体的には、スマホが接続されたらBLEのアドバタイジングを止める、スマホが切断されたらBLEのアドバタイジングを開始できるようにしてみました。
今回、M5StickCに対して同時に何台も接続する必要がないので、とにかく再接続ができれば良しとしました。
メインプログラム
#include "M5StickCPlus.h" #include <BlynkSimpleEsp32_BLE.h> #include <BLEDevice.h> #include <BLEServer.h> #define AUTHTOKEN "01234abcdef7890ghijklmn" void setup() { M5.begin(); pinMode(GPIO_NUM_26, OUTPUT); Serial.begin(9600); Blynk.setDeviceName("KawasakiPannir"); Blynk.begin(AUTHTOKEN); ledcSetup(LED_CH0, 12000, 8); ledcAttachPin(GPIO_NUM_26, LED_CH0); ledcWrite(LED_CH0, 0); // LED OFF } BLYNK_WRITE(V0) // Slider 0 to 255, PIN V0 { uint32_t value = param.asInt(); Serial.println(value); ledcWrite(LED_CH0, value); } void loop() { static bool myblestat = false; int ret; if(myblestat == false && Blynk.connected() == true) { Serial.println(" > Status Changed ! [ Connected ]"); Blynk.endScan(); myblestat = true; } ret = Blynk.run(); if(ret < 0) { if(myblestat == true) { myblestat = false; resetLed0(); Serial.println("Please wait..."); delay(1000); Blynk.startScan(); Serial.println("New Device Waiting..."); } delay(500); } }
BlynkSimpleEsp32_BLE.h
(省略) class BlynkTransportEsp32_BLE : public BLEServerCallbacks, public BLECharacteristicCallbacks { (省略) public: void stopAdvertising() { pServer->getAdvertising()->stop(); } void startAdvertising() { pServer->getAdvertising()->start(); } (省略) }; (省略) class BlynkEsp32_BLE : public BlynkProtocol<BlynkTransportEsp32_BLE> { typedef BlynkProtocol<BlynkTransportEsp32_BLE> Base; public: BlynkEsp32_BLE(BlynkTransportEsp32_BLE& transp) : Base(transp) (省略) void startScan() { conn.startAdvertising(); } void endScan() { conn.stopAdvertising(); } };
まとめ
スマートフォンとM5StickC PlusをBLEで接続し、 パワーLEDの調光ができました。
The following post may lead us to the solution of the BLE reconnection trouble that is included in the ESP32 library.
arduino-esp32 の BLEClient に以下の機能を実装しました。
— こばさん (@wakwak_koba) 2019年6月28日
✅ 複数BLEデバイスの同時接続
✅ 切断後の再接続
なおテストは、ダイソーBLEモバイルシャッター×3 で実施しています。https://t.co/OhIXTsWHmg#ESP32 #M5Stack