IoT その3(SmartConfig機能を使って、EspTouchからESP32内のWi-Fi情報を更新する)
こんにちは、Ideagearの鈴木陽介です。
今回は、ESP32のSmartConfig機能を使うことで、EspTouchというスマホアプリからESP32内のWi-Fi情報(IDとパスワード)を更新する方法についてご紹介します。
ESP32(Wi-Fi/Bluetooth対応)とその前のバージョンであるESP8266(Wi-Fiのみ対応)は共に、上海のエスプレッシフ社(Espressif Systems)が開発したIoT時代に必須のマイコンですが、EspTouchも同じ会社からリリースされており、親和性が高く操作が非常にカンタンです。
下記は、Espressifのウェブサイト:
で、今回はEspTouchのインストールから使い方、ESP32側のソースコードやArduino IDEのシリアルモニタでのWi-Fiの接続確認までをご説明します。
なお、ESP32/8266は日本のTELEC(いわゆる技適)認証対応済み製品でので安心してお使いいただけます。
はじめに
とその前に、以前のIoTの記事に関しておさらいです。
前回と前々回はThingsBoard CluodというオープンソースのIoTプラットフォームを活用し、温湿度センサー(DHT11)で検知した温湿度をESP32のWi-Fi経由でThingsBoardにつなぎ、PCのブラウザからThingsBaordの画面にアクセスしてリアルタイムで温湿度をモニタリングしました。
下記は前回と前々回の記事です。
ただ、ここで課題が一つ浮き彫りになります。
前回記事の状態ですと、ThingsBoardで使うWi-FiのSSIDとパスワード、それとトークンの情報がソースコード上で変数も何も使わずにそのままベタ打ちされているため、これらの情報に変化があったら一瞬で使えなくなってしまいます。
もちろん、たとえばWi-Fiのパスワードを変更したのであれば、ソースコード上のパスワードも変更し、コンパイルし、ESP32に書き込み、、、という手続きを踏めばまた使えるようになりますが、プロトタイプや実験環境であればまだしも、量産品として世に送り出している場合にこれでは話になりません。
他方で、トークン情報については、一度登録してしまえば運用方法(各センサーとESP32は固定で使ってもらう等)によっては修理やメンテナンスを除いてずっと変更しなくても乗り切れるかもしれませんが、ESP搭載の機器を別のWi-Fi環境へ持ち込んだら使えないというのでは、ユーザビリティが低いと言わざるを得えません。
デバイスを移動させたら、移動先でもすぐ使えるようにしたい。けれども、ESP32にWi-FiのSSIDとパスワードをベタ打ちしてしまっているからWi-Fi環境が変わるとネットに接続できない。
できれば、スマホのネイティブアプリやWebアプリなどから、ESP32内のWi-Fi情報をサクッと更新できたらいい。
これらの要求にすべて応えてくれる神アプリが、EspTouchというわけです。
参考記事
今回は、下記動画と記事を参考にさせていただきました。
The choice is yours. ESP-Touch(SmartConfig) or ESP-BluFi
M5Stackに スマートフォンでWiFi情報を伝える方法
ESP32にSmartConfigでWiFi情報を伝える
SmartConfigテクノロジーについて
EspTouchには、SmartConfigという技術が使われています。
上記参考記事に書かれている言葉をお借りすると、「ESP32のSmartConfig機能は、ESP32がWiFiのアクセスポイントになることで、スマホからWiFi情報を伝えてやろうというものです。」
こんなこと言われてもよくわかりませんがw、まぁここでは、EspTouchを使ってESP32のWi-Fi情報を上書きするときに「SmartConfig」という画期的な技術が使われていますよ。ということで、へーそうなんだーくらいに思っておいてくださいw
EspTouchの準備
ごたくはこれくらいにして、EspTouchの扱い方について一つ一つ見ていきたいと思いますが、もう少し余談を述べると、Wi-Fiを使うEspTouchに対して、EspBluFiというBluetoothを使ってESP32のWi-Fi情報を更新するアプリも同じEspressif社からリリースされています。
・ESP-Touch(Smart Config Technologyを使ったWi-Fi接続)
・ESP-BluFi via Bluetooth channel(BLEを介してWi-Fi接続)
EspBluFiは機会があれば別の記事でご紹介しますが、Bluetoothを扱うデバイスが製品化された暁には、Bluetooth SIGというBluetoothの権利を扱う協会に使用料を毎年払う必要がありますので注意が必要です。
もちろん、社内でつくっているプロトタイプや勉強会などの狭いコミュニティで、かつ非商用目的で使用している分には問題になることはほぼありませんのでご安心ください。
一方で、スマホのような超大多数の人が使うB2C向けの製品の場合は、このような使用料は全体に占める割合が低いので大したことはありませんが、たとえば、B2B向けで年間100台しか売れないというような製品の場合、下手にBluetoothを使うと開発コストに占める使用料がハンパないので注意が必要です。
EspTouchのダウンロード
EspTouchは普通にGoogle PlayとApp Storeからダウンロードできます。
が、私のように中国で買った中華スマホを使っていると、そもそもGoogle Playが無かったりします(無理やり入れても中国に居るときは使えなかったり、更新のタイミングで消えたりする)ので、そういう人のために(あまりいないと思いますがw)、APKファイルのダウンロード方法を記載しておきます。
下記は一例ですが、EspTouchはそこそこメジャーなアプリのようで、検索すれば他にも出てきます。
一番簡単なのは、下記のようにまずはパソコンのブラウザからAPKファイルをダウンロードします。
次に、それをBluetoothでPC→スマホへ送ります。
Bluetoothで転送中です。
EspTouchのインストール
EspTouchのAPKファイルがスマホに届いたら、タップしてインストールを進めます。
BTtestmodeでインストールすることを許可します。
怪しいアプリだと言ってきていますがw、怪しくないのでインストールを続行します。
インストールが完了しました。
アプリを開くとEspTouchからの通知を許可するか聞かれます→当然許可。
EspTouchはバージョン1と2があるようです。
今回は、バージョン1(上のV2の表記が無い方)だけご説明します。
Wi-Fiに接続されていないため、SSIDにはまだ何も表示されていません。
ESP32側の準備
当たり前ですが、いくら送信側のアプリを用意しても、受信側のESP32にそれを受け取れるようなコードが書かれていなければ必要な情報を受け取ることができません。
ただ、こちらも非常にカンタンです。
ライブラリー
今回使用するライブラリーは、ESP32のボードのパッケージに最初から含まれています。
ESP32のボードをArduino IDEへインストールする方法は、前回記事の「ボードマネージャにESP32を追加する」をご覧ください。
ソースコード
ESP32で使うソースコードは、Espressif社の公式のがGitHub上にありましたので、それをそのまま使いました。
上記リンクと全く同じですが、一応下記にも記載しておきます。
#include "WiFi.h"
void setup() {
Serial.begin(115200);
//Init WiFi as Station, start SmartConfig
WiFi.mode(WIFI_AP_STA);
WiFi.beginSmartConfig();
//Wait for SmartConfig packet from mobile
Serial.println("Waiting for SmartConfig.");
while (!WiFi.smartConfigDone()) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("SmartConfig received.");
//Wait for WiFi to connect to AP
Serial.println("Waiting for WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi Connected.");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
void loop() {
// put your main code here, to run repeatedly:
}
定義とセットアップだけで、ループに記述が何も無いという非常にシンプルなプログラムですね。
動作確認
では、ようやく準備が整ったので、EspTouchとArduino IDE側の操作を一つ一つ見ていきましょう。
まず、ESP32と接続させたいWi-Fiと同じWi-Fiにスマホをつなぎます。
アプリ(左)を開きます。
右はEspBlufiです。
先程つないだWi-FiのSSIDが表示されていることを確認し、先程と同じようにWi-Fiのパスワードを入力します。
その他は中国語で少しわかりにくいですが、デフォルトでは、デバイス数は1で、ブロードバンドになっています。
BSSIDについては下記記事をご覧ください。
パスワードの入力以外は、デフォルトの状態で「確認」をタップしてください。
すると、このように送信状態になります。
次に、Arduino IDEのシリアルモニタを開きます。
接続されるまでは、上記の通り、ひたすら「・」が一個ずつ表示されます。
ボーレートは、ソースコード内と同じ「115200 bps」にしてください。
送信完了し、ESP32が無事にWi-Fiに接続されると、アプリ側はこのような表示になります。
シリアルモニタ側でもIPアドレスまで表示されたら接続完了です。
一度接続されると、IPアドレスが表示されてそこで止まってしまいます。
接続を解除したい場合は、ESP32のENボタンを押すと、上記のようにリセットされて、また「・」が始まって接続待ちの状態になります。
もう一度接続されました。
操作方法は動画でもご確認ください。
ただ、これだとESP32が新しいWi-Fiに接続されたんだろうなということは推測できますが、本当にスマホから送ったWi-FiのSSIDとパスワードに上書きされたかどうかは、目視で確認できないため実際のところはわかりません。
これについては、ESP32内に保存されたWi-FiのSSIDとパスワードを読み出してみないとわかりませんが、このやり方は次回の記事にてご説明します。
まとめ
いかがでしたでしょうか?
EspTouchは、ESP32を開発しているEspressif社が作成した公式アプリということで、非常にカンタンな操作でWi-Fi情報を上書きできたのがおわかりいただけたのではないでしょうか?
ただ、これはAndroidアプリの宿命ですが、たとえば、私の場合は手元のOPPOスマホでは使えましたが、Vivoスマホでは不安定で使えませんでした。おそらくAndroidのOSバージョンの違いや機種固有の相性などが考えられますが、もしリリースされる製品と一緒にWi-Fi情報の上書き用としてスマホもセットで販売される場合は、そのスマホでEspTouchが問題なく使えるかどうか、必ずチェックしてください。
ともかく、今はIoTと言えばESP32、ESP32といえば携帯型デバイス、と言っても過言ではありません。同時に、ESP32を使う以上、使う場所が変わることは常に想定されますので、Wi-Fi情報を書き換えるためにわざわざPCとつないだり、アプリを自作しなくてもいいのは非常にありがたいですね。
では、次は書き換えたWi-Fi情報でもってThingsBoard Cloudにつなげるところまでを解説します!
Discussion