(2020-09-24 初稿 - 2020-09-28 追記 )
M5Stackを購入して、一番面倒だったのは、WiFiの接続とその切替えでした。
WiFiのSSIDやパスワードはとても複雑で、M5Stackで入力できるような代物ではありません。
ネットを検索すると、簡潔でとても素晴らしいサイトを見つけました。
上記サイトによると、一度設定したWiFiは、変更しない限り再度接続できるとのことです。
このことは、普段良く使うことが想定されるWiFiを切り替えるスケッチと突然寄った店やホテル等で一時的に設定できるスケッチの2種類を併用すれば、WiFiの接続に関しては解決できると考えました。
まずは、WiFiを簡単に切換えるスケッチを、自分の勉強のために以下のとおり作成しました。
Cもろくにわかっていない素人が作成したスケッチなので、参考程度にご覧ください。
使い方は、普段良く使っているWiFiのSSIDとPassword及びhome01等自分でわかる程度のコメントをWiFi構造体に入力しておきます。
紹介した上記サイトでは、SSIDやPassWordのスケッチ内への保存は非推奨となっていますが、このスケッチだけに入力して、他のスケッチには入力しない方針ですので、ご容赦を。
上記のとおり、SSID、PassWord、コメントを入力したら、起動します。
起動したら、BボタンでWiFiを番号の増加方向に、Cボタンで番号の減少方向に変更し、接続したいWiFiが現れたら、AボタンでWiFiの設定を行います。
しばらくすると、正常に接続し、IPアドレス等が表示されますので、電源ボタンで電源を切って、WiFiを利用するスケッチを起動します。
短いスケッチなので、以下に示します。
ファイル名は、nSetWifi.inoとしました。
#include <M5Stack.h>
#include "M5StackUpdater.h"
#include <WiFi.h>
struct wifi {
const char* ssid;
const char* pswd;
const char* come;
};
struct wifi wifi[] = {
{"Your SSID 01", "Your Password 01", "Comment ex. home01"},
{"Your SSID 02", "Your Password 02", "Comment ex. job01"},
{"Your SSID 03", "Your Password 03", "Comment ex. job02"},
};
int MaxNum = sizeof(wifi) / sizeof(wifi[0]);
int num = 0;
void setup() {
// put your setup code here, to run once:
M5.begin();
//checkSDUpdater(); SD-Updaterを使う場合は//を削除
display();
}
void display() {
M5.Lcd.clear(BLACK);
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(0,0);
M5.Lcd.printf("Please Push A,B,C Button\n");
M5.Lcd.setCursor(0,220);
M5.Lcd.printf(" [Set] [Up] [Down]");
M5.Lcd.setTextSize(4);
M5.Lcd.setCursor(40,120);
M5.Lcd.printf("%i : %s", num, wifi[num].come);
}
//void set_wifi(const char* sid, const char* pwd, int n) {
void set_wifi(int n) {
M5.Lcd.clear(BLACK);
M5.Lcd.setTextSize(2);
M5.Lcd.setCursor(0,20);
M5.Lcd.printf("Set Wifi %s\n", wifi[n].come);
WiFi.begin(wifi[n].ssid, wifi[n].pswd);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
M5.Lcd.print('.');
}
M5.Lcd.print("\r\nWiFi connected\r\nIP address: ");
M5.Lcd.println(WiFi.localIP());
delay(5000);
exit(0);
}
void loop() {
M5.update();
// Aボタン
if (M5.BtnA.wasPressed()) {
set_wifi(num);
}
// Bボタン
if (M5.BtnB.wasPressed()) {
if (num < MaxNum - 1) {
num++;
}
display();
}
// Cボタン
if (M5.BtnC.wasPressed()) {
if (num >= 0) {
num--;
}
display();
}
}
上記のように、一度WiFiに接続すれば、変更しない限り再説できます。
このため、自ら作るスケッチでは、以下のように、SSDI及びパスワードを記入しないようにしています。
以下に例を示しますので、参考にしてください。
void setup() {
WiFi.begin();
}
出先等でPC等がない場合に、急に接続したくなる場合もあるかと思います。
アクセスポイントモードでESP32を起動して、ブラウザ経由で設定するsoftAPモードや、SmartConfigで設定する方法があります。
詳細については、上記のリンク先をご覧になってください。
新しいGoogleサイトの編集機能が変で、ページの作成に非常に時間がかかってしまってます。
また、何かわかりましたら追記します。