Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

M5stackのEEPROMにデバイスIDを書き込み、必要に応じて変更できるようにする

基本ロジックが同じだがデバイスIDが違う場合……というケースの対処方法

実際のところ

#include <M5Stack.h>
#include <EEPROM.h>

// デバイスIDを保存するEEPROMアドレス
#define DEVICE_ID_ADDRESS 0

// 書き込みを行うEEPROMの確保サイズ
#define ROMSIZE  4

// デバイスID(初期値は0x01としますが、変更可能)
uint32_t deviceId = 0x01;


void setup() {
  M5.begin();
  M5.Power.begin();
  
  // EEPROMからデバイスIDを読み込む
  EEPROM.begin(ROMSIZE);
  deviceId = EEPROM.readUInt(DEVICE_ID_ADDRESS);
  if (deviceId == 0xFFFFFFFF) {  // 未設定の場合
    deviceId = 0x01;  // デフォルト値
    EEPROM.writeUInt(DEVICE_ID_ADDRESS, deviceId);
    EEPROM.commit();
  }

  M5.Lcd.setTextSize(2);
  M5.Lcd.printf("Device ID: 0x%02X", deviceId);
}

void loop() {
  // ボタン操作でデバイスIDを変更
  M5.update();
  if (M5.BtnA.wasReleased()) {
    deviceId = (deviceId + 1) & 0xFF;  // 0x01 ~ 0xFF の範囲で循環
    EEPROM.writeUInt(DEVICE_ID_ADDRESS, deviceId);
    EEPROM.commit();
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setCursor(0, 0);
    M5.Lcd.printf("New ID: 0x%02X", deviceId);
    delay(1000);
  }
}

参考もと

github.com