M5StackのWiFIクライアント設定をSDカードから読み込んで利用する


概要

 M5StackのWi-Fi設定(SSIDとPASS)をソースコードに埋め込むと次のような手間があります。

  • M5Stackを利用する場所やWi-FI設定が変わるたびに、ファームウェアを書き替える手間が発生する
  • ソースコードを共有する際に、Wi-FI設定を隠す手間がある

このような「手間」を省く手段を考え、SDカードから読み込むプログラムを作成しました。

 ソースコードはGithubで公開しています。
ライセンスはフリーです。使用する際は自己責任でお願いします。
 このソースコードを動かすと、SDカードからWi-Fi設定を読み込んで接続します。M5StackのディスプレイにはSSIDとPASS、IPが表示されます。

使い方

 1. Githubからソースコードを入手しファームウェアを書き込み
 2. SDカードに「wifi.csv」ファイルを作成する
 3. wifi.csvファイルに次のようなフォーマットでSSIDとPASSを記述

 4. SDカードをM5Stackにセットして再起動
 

ソースコード

M5Stack_WiFi_SD.ino

#include <M5Stack.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <ESPmDNS.h>
#include <Preferences.h>
#include <string.h>

const char* fname = "/wifi.csv";
File fp;
char ssid[32];
char pass[32];

void SetwifiSD(const char *file){
  unsigned int cnt = 0;
  char data[64];
  char *str;

  fp = SD.open(fname, FILE_READ);
  while(fp.available()){
    data[cnt++] = fp.read();
  }
  strtok(data,",");
  str = strtok(NULL,"\r");    // CR
  strncpy(&ssid[0], str, strlen(str));

  strtok(NULL,",");
  str = strtok(NULL,"\r");    // CR
  strncpy(&pass[0], str, strlen(str));

  M5.Lcd.printf("WIFI-SSID: %s\n",ssid);
  M5.Lcd.printf("WIFI-PASS: %s\n",pass);
  M5.Lcd.println("Connecting...");

  Serial.printf("SSID = %s\n",ssid);
  Serial.printf("PASS = %s\n",pass);

  // STA設定
  WiFi.mode(WIFI_STA);     // STAモードで動作
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }

  M5.Lcd.print("IP: ");
  M5.Lcd.println(WiFi.localIP());
  Serial.printf("IP: ");
  Serial.println(WiFi.localIP());
  fp.close();
}

void setup() {
  M5.begin();
  M5.Lcd.setTextSize(2);

  SetwifiSD(fname); // Get ssid
}

void loop() {
  // put your main code here, to run repeatedly:
}

おわりに

読んでいただいた皆様のM5Stackライフがより便利になると嬉しいです(^^)