ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

M5StackのWiFi設定について

(2020-09-24 初稿 - 2021-05-17 転記・修正 )

はじめに

M5Stackを購入して、一番面倒だったのは、WiFiの接続とその切替えだった。

WiFiSSIDやパスワードはとても複雑で、キーボードのないM5Stackで入力できるような代物ではない。

ネットで検索すると、簡潔でとても素晴らしいサイトを見つけた。

上記サイトによると、一度設定したWiFiは、変更しない限り再度接続できるとのこと。

ということは、普段良く使うことが想定されるWiFiを切り替えるスケッチと突然寄った店やホテル等で一時的に設定できるスケッチの2種類を併用すれば、WiFiの接続に関しては問題解決だ。

WiFiを簡単に切換えるスケッチ

まずは、WiFiを簡単に切換えるスケッチを、以下のとおり自作した。

Cもろくにわかっていない素人が作成したスケッチなので、参考程度に。

使い方は、普段良く使っているWiFiSSIDとPassword及びhome01等自分でわかる程度のコメントをWiFi構造体に入力しておく。

紹介した上記サイトでは、SSIDやPassWordのスケッチ内への保存は非推奨となっているが、このスケッチだけに入力して、他のスケッチには入力しない方針なのでご容赦を。m(__)m

上記のとおり、SSID、PassWord、コメントを入力したら、スケッチを起動する。

起動したら、BボタンでWiFiを番号の増加方向に、Cボタンで番号の減少方向に変更し、接続したいWiFiが現れたら、AボタンでWiFiの設定を行う。

しばらくすると、正常に接続し、IPアドレス等が表示されるので、電源ボタンで電源を切って、WiFiを利用する目的のスケッチを起動する。

ファイル名は、nSetWifi.inoとし、スケッチを以下に示す。

#include 
#include "M5StackUpdater.h"
#include 

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();
}

予めわからないWiFiに接続する

出先等でPC等がない場合に、急に接続したくなる場合は、アクセスポイントモードでESP32を起動して、ブラウザ経由で設定するsoftAPモードや、SmartConfigで設定する方法がある。

詳細については、最初に紹介した上記のリンク先を参照のこと(ここでは割愛)。

おわりに

また、何かわかったら追記する。

関連ページ