ESP32に可視光通信でWiFi設定を送る

お前がDash Button

動機

WiFiなど認証が必要なネットワークやサービスを利用した工作物で悩ましいのが、認証情報を設定するインタフェースをどうするかという点。いつもPCのそばにあるのならUARTで書き込んでもいいが、離れた場所に設置した機器だと設定を更新するのが面倒くさい。しかも大体そういう時に限ってUSBシリアル変換ケーブルが見つからなかったりする。
そこで、スマホのブラウザ上で設定を入力し、発光信号のように画面の点滅によって送信できれば場所や機材に依存しないので便利なのでは、と考えた。設定ページのURLをQRコードにして装置に貼っておけば、装置とスマホだけで完結する。

物理層の検討

液晶を使うと時間方向の精度が悪い

WiFi設定として最低限送らなければならないのは、SSIDとパスフレーズである。長くて数十文字程度の情報量になるので、せめて1文字/秒くらいのスピードは出したい。画面をミリ秒オーダーの精度で正確に点滅させることができるなら例えばUARTのような調歩同期式で送ってしまえば簡単そうだが、残念ながらスマホの画面でそんな精度は期待できない。画面更新がモタついてもデータが化けたり滑ったりしない方式で符号化する必要がある。

「明るさの変化」で符号化する

そこで、画面の明るさの変化の仕方(状態遷移)に情報を載せればいいのではと考えた。そうすれば、送る方も受ける方も、明るさの変化点のみに注目すればよいので、コマ落ちしない限り画面更新間隔の乱れには影響されない。だだし、状態遷移に情報を載せるには最低でも3状態、すなわち3段階以上の光を送信・識別する必要がある。

スマホからの送信方法

点滅を実現する方法として以下のようなものを考えた。どれを使うかは検討中。
  • HTML要素のbackground-colorを更新する
  • Canvasを使う
  • GIFアニメを動的に生成する

ESP32側の受信方法

受信する光の強さはスマホの画面設定や周囲の環境によっても変化するので、それに追従する必要がある。よって、光センサからの信号をADCで受けて、その結果をデジタル的に処理するのが妥当と考えた。ビットレートは低いので計算に時間がかかってもよいし、変化点のみに注目すればよいので正確なタイマーも不要である。

(執筆中)

コメント

このブログの人気の投稿

CW回路で「10まんボルト(100kV)」を撃つ

油入式フライバックトランスの製作

Intel NUC7I7BNHでWOL(Wake on LAN)を使用する方法