UGOKU Padは、ESP32などのマイコンとBluetoothでスマートフォンを接続し、簡単に操作できるアプリです。
ジョイスティックやスライダー、ボタンなど、色々なウィジェットを組み合わせて、自分だけの操作パネルを作成できます。
モーターの操作やセンサー値の表示など、様々な用途でつかえます。
操作パネル(Console)上に、トグルスイッチやジョイスティックなどの入力ウィジェット、Value Monitor や Line Chart などのモニターウィジェットを任意の位置やサイズで配置できます。
各ウィジェットには任意のチャンネル番号を設定できます。
UGOKU PadのArduinoライブラリをインストールすることで、ESP32搭載ボードを使って簡単にUGOKU
Padと通信できます。
最小コード例:
#include <UGOKU-Pad_Controller.h>
UGOKUPadController UGOKUPad;
void setup() {
UGOKUPad.begin("UGOKU Pad ESP32");
}
void loop() {
if (!UGOKUPad.update()) return; // 受信値を更新
uint8_t value = UGOKUPad.read(1); // ch1 の値を取得
UGOKUPad.write(2, 123); // ch2 に 123 の値を送信
delay(50);
}
ESP32とUGOKU Padを接続するための配線例です。
| 機能 | ピン |
|---|---|
| デジタル出力 | 27 |
| 測距モジュール | 26 |
| RCサーボ | 14 |
| ローテーションサーボ | 12 |
BOARD MANAGER で esp32 をインストール
LIBRARY MANAGER で UGOKU-Pad, ESP32Servo をインストール
Select Other Board and Port で ESP32 Dev Module を検索して選択

下記のサンプルスケッチをESP32に書き込みます。
#include <UGOKU-Pad_Controller.h>
#include <ESP32Servo.h>
UGOKUPadController UGOKUPad;
bool isConnected = false;
Servo servo2;
Servo servo3;
//UGOKU PadがESP32に接続したときに実行されます。サーボを指定ピンに接続して(attach)、中央の90度に動かします。ローテーションサーボの場合は停止させます。
void onConnect() {
isConnected = true;
servo2.attach(12);
servo3.attach(14);
servo2.write(90);
servo3.write(90);
}
//UGOKU Padが切断されたら呼ばれる関数。フラグを下ろして(false)、LEDなどの出力を消し、サーボの制御を止めて安全にします。
void onDisconnect() {
isConnected = false;
digitalWrite(27, LOW);
servo2.detach();
servo3.detach();
}
//起動時に一度だけ動く部分です。
void setup() {
UGOKUPad.begin("My ESP32");
UGOKUPad.setConnectionHandlers(onConnect, onDisconnect);
pinMode(26, INPUT);
pinMode(27, OUTPUT);
}
//繰り返しの処理
void loop() {
//接続していないときにループに入らないようにしています。
if (!isConnected) return;
//アプリから来た最新データを受け取ります。データに問題があれば中断します。
if (!UGOKUPad.update()) return;
//アプリの ch1(トグルスイッチ)を読み取りピン27をオン/オフします。
digitalWrite(27, UGOKUPad.read(1));
//アプリの ch2 と ch3 の値(0〜180)をサーボ角度(ローテーションサーボの場合は速度)にして動かします。
servo2.write(UGOKUPad.read(2));
servo3.write(UGOKUPad.read(3));
//アナログ入力ピンの値を読み、0〜4095の値を0〜100のパーセントに変換してからでアプリに送ります。
uint8_t percent = (analogRead(26) * 100U) / 4095U; // 0-100 from ADC.
UGOKUPad.write(5, percent); // Send 0-100 value.
delay(50);
}
Flutter の flutter_blue_plus ライブラリを用いて、Android/iOS の標準BLEに対応しています。
1回(1パケット)の通信は 19バイト固定 です。
(チャンネル, バリュー) のペア9組と、全体のチェックサム1バイトで構成することでBLE通信を効率化し、低遅延を実現しています。
| 要素 | 役割 | サイズ |
|---|---|---|
| データペア (x9) | (チャンネル, バリュー) のペア × 9組 | 18バイト (2バイト×9) |
| チェックサム | 上記18バイトの排他的論理和 (XOR) | 1バイト |
| 合計 | 19バイト | |
50msごとに呼び出される periodicSend() により、以下を実行します。