LoginSignup
0
1

ATOM-S3 Wi-Fiの SSID、パスワードをEEPROMから取得

Last updated at Posted at 2024-04-08

概要

ATOM-S3 でWiFiを利用する際、これまでSSID、パスワードをソースコードに
直接記入していました。そのため変更があった際には都度ソースコードを
書き換えていました。
最近になってATOM-S3でEEPROMが利用できることを知りました。
そこで、EEPROMにID、パスワードを保存しておき必要に応じてシリアル
通信で書き換えできるようにしてみました。

環境など

 エディタ:VisualStudioCode(PlatformIO IDE)
 マイコン:ATOM-S3

動作確認

①EEPROMへSSIDとパスワード保存
 PCとATOM-S3をUSBケーブルで接続、シリアルコンソールから
 「set,SSID,PASSWORD\n」を入力。文字間はカンマ区切りで。
image.png

 ディスプレイのにsavedと表示されます。
 image.png

②保存データ確認
 シリアルコンソールで「read」と入力。
image.png

保存されたSSID、パスワードが表示されます。
image.png

③Wi-Fi接続
 ATOM-S3 を再起動後、シリアルコンソールで「wifi」と入力。
image.png

wifi接続が成功すると、SSIDとパスワードが表示されます。
image.png

AtomS3 コード

#include <Arduino.h>
#include <M5AtomDisplay.h>
#include <M5Unified.h>
#include <EEPROM.h>
#include <WiFi.h>

//EEPROMデータ保存アドレス
#define EEPROM_ADDRESS 0

// EEPROMに保存するデータ
struct EepromData {
  String SSID;
  String PASS;
};
EepromData eeprom;

// シリアル受信データ保持用
String serial_data;

// カンマ区切りで配列取得
int split(String data, char delimiter, String *dst){
  int index = 0; 
  int datalength = data.length();  
  for (int i = 0; i < datalength; i++) {
    char tmp = data.charAt(i);
    if ( tmp == delimiter ) {
        index++;
    }
    else dst[index] += tmp;
  }  
  return (index + 1);
}

// EEPROMデータ保存
void eepromSave(String id,String pas) {
  eeprom.SSID = id;
  eeprom.PASS = pas;
  EEPROM.put(EEPROM_ADDRESS, eeprom);
  EEPROM.commit();
}

// EEPROMデータ読出
void eepromLoad() {
  EEPROM.get(EEPROM_ADDRESS, eeprom);
}

// Wi-Fiスタート
void start_wifi(){
  // EEPROMからSSID,PASS読込
  eepromLoad();
  WiFi.begin(eeprom.SSID, eeprom.PASS);
  while( WiFi.status() != WL_CONNECTED) {
    delay(500); 
    M5.Lcd.print("."); 
  }
  M5.Lcd.println("WiFi Connected"); 
  M5.Lcd.println(eeprom.SSID); 
  M5.Lcd.println(eeprom.PASS); 
}

void setup() {
  // Setup USBSerial for debbuging.
  USBSerial.begin(115200);

  // Display設定
  M5.Display.init();
  M5.Display.setRotation(3);
  M5.Display.setFont(&fonts::lgfxJapanGothicP_12);
  M5.Display.setTextColor(WHITE, BLACK);

  // Title表示
  M5.Display.setCursor(0,0);
  M5.Display.println("EEPROM Test");

  // EEPROM設定
  if (!EEPROM.begin(sizeof(eeprom))) {
    M5.Display.println(
      "\nFailed to initialise EEPROM!");
    while(1);
  }
}

void loop() {

  // USBシリアルデータ受信   
  if(USBSerial.available() > 0) {  
    serial_data = USBSerial.readStringUntil('\n'); //デリミタを検出したら終了
    if(serial_data.indexOf("read") >=0){
      eepromLoad();
      M5.Display.println(eeprom.SSID);
      M5.Display.println(eeprom.PASS);
    }

    if(serial_data.indexOf("set") >=0){
      String tmp[3];
      int index = split(serial_data, ',', tmp);
      eepromSave(tmp[1],tmp[2]);
      M5.Display.println("EEPROM saved");
    }

    if(serial_data.indexOf("wifi") >=0){
      start_wifi();
    }
  }
  
}

参考サイト

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1