2021/06/11
ESP32 → チャレンジタッチ2 データ送信実験
ESP32からAndroidタブレットへ、データ送信を試みた第一歩目の記録■Arduino IDEにESP32のボードマネージャーをインストール。
■ESP32_beaconという0から99までの数字を垂れ流す超質素なBluetoothデバイスを作成。
(実験用のビーコンでありBLEビーコン等とは無関係)
■チャレンジタッチ2とペアリング、ターミナルアプリでESP32からの無線ビーコンを受信。
■同タブレットとOTGケーブルでUSB接続。有線シリアルのビーコン受信。

■Arduino IDEにESP32開発環境追加時のメモ
PC(Windows10)とESP32-WROVER-Eを繋ぎ、ドライバ(CP210x)の存在とCOMポート番号の確認
(趣味部屋のPCにはインストール済。再インストール時は以下から)
(Link)→SILICON LABS CP210x USB-UARTブリッジ VCP ドライバ

●Arduino IDEにESP32用のボードマネージャーをインストール
この辺の情報は検索すると数多くヒットするがスイッチサイエンスの説明が的確。
(Link)→ESP32_setup スイッチサイエンス

●ボードマネージャーのURLの追加先
ファイル→環境設定

●ボードマネージャーのインストールと確認
ツール→ボード→ボードマネージャー

ここでインストール。
※下の写真は既にインストールされている状態。

●買ってきたESP32に合わせて設定
ツール→ボード ESP32 Dev Module
ツール→Flash size 買ってきた物がFiash 8MB版なので8MBとした
ツール→Partition Scheme ユーザエリアを弄れるそうだが ”8M Fiash”があったのでそれを選択
※SPIFFS/FATはストレージ領域。ファイルを取り扱うのであればそれなりに設定。
ツール→PSRAM 弄らず(PSRAM付を買ってきたのでEnableでも可のはず)
ツール→シリアルポート ESP32が繋がれたCOMポートを指定

●ESP32とPCの接続タイミングは今のところ適当
IDE起動前から繋いでいる時もあれば、書き込みの段階で繋ぐ事もあるが不具合が起きた事は無し。
接続時、2つのタクトスイッチには一切触れず。
①コンパイルが完了するまではESP32は放ったらかしで大丈夫。
②IDEが書き込みに移行、接続の試行を始めたら(・・・・・_____・・・・・_____が始まる)、bootボタンを押す。
③接続が確立(・・・・・____が止まり書き込みのinfo開始)されたら指を離す。

■今回の課題とその記録
Androidタブレット相手にBluetooth/USB通信の実験
・まずは一方通行で構わないからデータをタブレットに届けたい
使用するライブラリはBluetoothSerial library
(Link)→GitHub arduino-esp32 BluetoothSerial
(チャレンジタッチ2にインストールした Serial Bluetooth Terminal (←Link)は上記Github内で紹介されていた)
当初は接続・認証の段階から処理する必要があると思い込むも README.md には、
A simple Serial compatible library using ESP32 classical bluetooth (SPP)とある。
SPPをググるといろいろ出てくるけれど、ここでのSPPはBluetoothプロファイル。
(Wiki)
・Serial Port Profile (SPP)
PC間において仮想シリアルポートを設定し、それらのPCを接続するために使用されるプロファイル。
いわゆるシリアルブリッジなら機能は限られてもスケッチはシンプルで済みそう。
さらにポルトガルのエンジニアのブログにBluetoothSerialについての記述を発見。この人、凄い。
(勝手にLink)→ESP32 Arduino: Serial communication over Bluetooth Hello World
●上記Santos氏のブログ内で気になった記述
・(Chrome翻訳)言及すべき重要なことの1つは、これがBluetooth実装の詳細のほとんどを隠す非常に高レベルのライブラリであるということです。そのため、開発するコードは非常に単純で小さいのです。
・(同・一部要約)BluetoothSerialオブジェクトのbeginメソッドは、すべての下位レベルの初期化を処理。
このライブラリではBluetoothのプロトコルを特に意識する必要もなさそうなので、Santos氏のサンプルスケッチを参考に実験開始。
問題なければcounterの値をセンサーで得た値に置き換えるだけでスマホによる監視などが実現可能に。
(但し、Android側ではターミナルアプリなどで受信する事になる)
●秋月で買ってきたESP32・テストスケッチ一回目
・BluetoothとUSBシリアル、その両方で counter の値(0~99)を改行有りで永遠に送信
・BT時のデバイス名はESP32_beacon
・USBシリアルのボーレートは115200bps
※ライブラリ:BluetoothSerial.h はESP32のボードマネージャーをインストールした時点で利用可能。
※ESP32_beaconは単なる標識信号(ビーコン)発信器の意味であり、BLE ビーコン等の既存の固有テクノロジーとは無関係。

素人でも書ける簡素なスケッチは優秀なライブラリの賜物。
ESP32への書き込みが完了した時点でArduino IDEのシリアルモニタで動作確認。
※ボーレート115200に設定、USBシリアルの方はここでビーコン動作を確認。

■Bluetooth接続の相手はタブレット化したチャレンジタッチ2
※ESP32のUSBははPCのUSBに繋いだまま(給電)。

●Android(チャレンジタッチ2)の設定→Bluetooth
勝手にペアリングされる。
自分が命名したデバイスが登録されているのを見て思わず感動。

●Serial Bluetooth Terminal を起動(以下は覚えた操作の備忘録)
2つのターミナルアプリ(このアプリとUSB用のSerial USB Terminal)が使えるだけでも中古チャレンジタッチ2の利用価値は十分にアリ。こんなに立派なガジェットがArduino用TFTモジュールより安い。

●上の写真のTerminal画面で左上の横棒3本をタップ
写真下のDevicesセレクタでESP32_beaconを指定。
※モードは Bluetooth Classic となる。
※チャレンジタッチ2はBLE(Bluetooth Low Energy)も利用可能。
(100円ショップのリモコンシャッターやBTマウスも認識。学習教材でも機能省略は無し)

●左上の←タップで主画面(Terminal)復帰
画面右上、ゴミ箱左にあるヒョウタンが繋がっている事を確認(デバイス接続)。
※アイコンタップで接続/切断のトグル動作。
※デフォルトの表示タイプはこのアプリで言うターミナルモード。
ビーコン受信。ESP32からのデータが無線でチャレンジタッチ2に届いている。
少年時代、ラジオ雑誌を読みながら作ったワイヤレスマイクが動いた時のような心境。
既に多くの人がこなした事でも自らの手による実体験にはささやかな感動。

●念のためHEX表示でも確認。
Terminal画面左上の横棒3本をタップしてSetting
Display mode →HEX

●Setting画面左上←タップで再び主画面(Terminal)復帰。
0x30→数字の0、 0x31→数字の1、、、0x0d 0x0a→CR LF

当初はBluetoothのプロトコルについて咀嚼しきれていない情報で妄想が膨み、それなりの手順が必要だと思い込んでいました。
ところが ESP32でBluetoothserial.hというライブラリを使う仮想シリアルならデータの垂れ流し送信が可能で、スマホにインストールしたターミナルアプリでセンサー等の情報を読むような事は無線・有線とも簡単に実現可能。タイムスタンプもターミナル側で受信時刻を表示させれば実用上問題無いはず。
実験中にタブレットの電池が切れる。充電→再起動後、ターミナルアプリの接続アイコンをタップするだけで受信再開(その間、ESP32_beaconの方はリセットもせず放置)。
■チャレンジタッチ2とUSBシリアルブリッジで有線接続

アプリがSerial Bluetooth Terminal からSerial USB Terminalに変わるだけで操作感は同じ。
●Serial USB Terminalを起動、Terminal画面で左上の横棒3本をタップ

●USBデバイスを選択

デバイスリストにはコレだけ。
ESP32-DevKitC-VEのUSB-シリアルブリッジがCP2102N。

●USB Devices画面左上←をタップして主画面に戻ってから再び左上の横棒3本をタップ
Settingに飛ぶ。

●Setting→Serial→ボーレートを設定。他は弄らず

●Setting画面左上←タップで主画面(Terminal)復帰。
ESP32から有線接続で送られてくるビーコンを受信。

●Setting→Terminal→DIsplay mode でHEXを選択。
(操作はSerial Bluetooth Terminalと同じ)

詳しい人なら朝飯前の事をステイホーム中に孤軍奮闘。夢中になれて楽しかったけど、コロナ禍がなければセンサー買いに秋月にでも行きたいところ。