ArduinoManagerをESP32BLE機の簡易表示器として使う

先日紹介したArduino ManagerのESP32BLEでの使い方を紹介します。

#今回の趣旨
　Arduino Managerのサンプルソースはとても判りやすいものだと思いますが
　一定期間触らない状態で「すぐ使うからソース作って！」と自分に言われても
　思い出すのに時間が必要な自分がいるので、自分用にサンプルを用意しました。

#必要なリソース
　Arduino Managerを使う為のIOSControllerESP32BLEをセットアップしたPC。
　iPhone / iPad   (手元にAndroidが無いので・・・
　下に掲載しているソース

#準備：Arduino ManagerにWigetsを登録する
・AppStoreでArduinoManagerを購入します。(セット販売品の購入は不要です)
　ArduinoManagerを起動すると、モッサイ画面が出てきます。
　この画面にある四角の１つづつにWigetsを登録することができます。
![image0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255936/903ea0af-87d0-ed74-f45c-20df9627f590.png)



・画面右下にある「Edit」のスイッチをONにした状態で、画面の四角をタップすると
　Wigetsの選択一覧が出てきますので、使いたいWigetsを選びます。
　今回はText Field / Display / Gauge / Console を登録します。
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255936/e1da8923-ef6b-6732-513b-1dd6a83c1bb1.png)

・登録しただけではWigets下側の灰色のゾーンが「？」になっていますので、
　名前を登録します。　　済んだら画面右下の 「Edit」をオフにします。
　今回は各Wigets名と同じ名前のText Field / Display / Gauge を登録します。
　※Consoleはデフォルトで入っていると思います。　　　
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255936/fa913916-b320-cbde-f426-e40a0cab1665.png)


#準備：ESP32とiPhone/iPadのBluetoothを動作させる。　
・下にあるArduinoManagerESP32BLE.inoをコンパイルしてESP32にアップロードして動作させます。
　iPhone / iPadの設定でBluetoothをオンにします。

#準備：iPhone / iPadをESP32に接続する。
・ArduinoManagerのメニューより、Connectionsを選択してScan BLEを押します。
　一覧に「ESP32」出てくるので選択することで、ESP32と接続ができます。
![image0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255936/5e41b5ba-3d3d-89a3-9e1d-e672fef27783.png)


#動作：動いた!
・Connections画面等を消すと、TextFieldに「PowerOnTime]　Displayに「経過時間」
　Gaugeに「経過時間に対応する何か」　が表示されます。
　以上！
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255936/5bace756-3f60-f4a7-5f07-a8c7c62afb6f.png)


```ino:ArduinoManagerESP32BLE.ino:
#include "IOSControllerESP32Ble.h"
IOSControllerESP32Ble iosController(&doWork, &doSync, &processIncomingMessages, &processOutgoingMessages, &processAlarms, &deviceConnected, &deviceDisconnected);

float powerOnTime;
unsigned long lastPowerOnTimeMillis = 0;
// ArduinoIDE 初期処理
void setup() {
  Serial.begin(115200);
  iosController.begin();
  powerOnTime = 0;
}
// ArduinoIDE 平常のループ
void loop() {
  iosController.loop();
}
// ESP32BLE 端末との接続イベント
void deviceConnected () {
  Serial.println("* Device connected");
}
// ESP32BLE 平常のループ(ArduinoIDEとの差異は不明)
void doWork() {
  if( (millis() - lastPowerOnTimeMillis) > 1000 ) {
    lastPowerOnTimeMillis = millis();
    powerOnTime = lastPowerOnTimeMillis / 1000;
  }
}
// ESP32BLE 端末のWigets(variable)より現状値の問い合わせ
//          ※端末との接続時にWigetsの表示を同期していると思われます。
void doSync (char *variable) {
  Serial.print("Sync "); Serial.println(variable);
  if (strcmp(variable, "Text Field") == 0) {
    iosController.writeTxtMessage("Text Field", "PowerOnTime");
  }
}
// ESP32BLE 端末のWigets(variable)より現状値(value)の通知
//          ※端末側でボタン・スイッチ・スライダ等変更すると通知されます。
void processIncomingMessages(char *variable, char *value) {
  Serial.print("in: ");  Serial.print(variable);  Serial.print(" ");  Serial.println(value);
  iosController.log("in: ");
  iosController.log(variable);
  iosController.log(" ");
  iosController.logLn(value);
}
// ESP32BLE 端末のWigetsへ現状値の通知
//          ※ESP32機器側での変化を端末のWigetsに通知します。
void processOutgoingMessages() {
  iosController.writeMessage("Display", powerOnTime);
  iosController.writeMessage("Gauge", ((int)powerOnTime) % 1000);
}
// ESP32BLE 端末との接続が切れた通知
void deviceDisconnected () {
  Serial.println("* Device disconnected");
}
// ESP32BLE アラーム  ***不明　　まだ動作確認してません
void processAlarms(char *alarm) {
  Serial.print(alarm);
  Serial.println(" fired");
}
```

あとがき
　　最低限自分が思い出せる様に作ってみました（汗
　もう作るモノは決まっているので、それに沿った機能の動作確認で作ったのですが
　記述コードの少なさは最高ですね。
　　　　　　　　　　　　　　　このワクワク感だけで十分課金する価値ありました。