バージョン
・ Arduino IDE:1.8.10
・ ライブラリ:M5StickC by M5StickC バージョン0.1.1
M5StickCはプロセッサに ESP32-PICO-D4 を搭載したArduino互換機です。 Arduino IDEでプログラムを作成し書き込むことができます。
サンプルスケッチにEEPROMがあったのでカウンタを作ってみました。電源を落としても次回起動時に直前のカウント数が読み込まれるように 不揮発性メモリに数値を保存します。
1.セットアップ
下記を参考にボードマネージャのインストール、ライブラリのインストールを行いました。ただしボードはM5Stick-Cを選択しました。
https://docs.m5stack.com/#/ja/quick_start/m5stickc/m5stickc_quick_start_with_arduino_Windows
2.ソース
スケッチ例>M5Stick-C用のスケッチ例>EEPROM
の内容を参考に下記のようにしました。
中央のボタン(M5.BtnA)で+1、右側面のボタン(M5.BtnB)で-1されます。
#include "EEPROM.h" //①
#include <M5StickC.h>
#include <Wire.h>
int address=0;
int count=0;
void setup() {
M5.begin();
M5.update();
Serial.begin(115200);
Serial.println("\nTesting EEPROM Library\n");
if (!EEPROM.begin(1000)) { //②
Serial.println("Failed to initialise EEPROM");
Serial.println("Restarting...");
delay(1000);
ESP.restart();
}
count=EEPROM.readInt(address); //③
M5.Lcd.setTextSize(3);
M5.Lcd.setCursor(0, 0);
M5.Lcd.println(count);
}
void loop() {
M5.update();
Serial.println(count);
M5.Lcd.setCursor(0, 0);
if(M5.BtnA.wasPressed()){
count=count+1;
EEPROM.writeInt(address,count); //③
EEPROM.commit();
M5.Lcd.fillScreen(BLACK);
M5.Lcd.println(count);
Serial.println(count);
delay(100);
}
if(M5.BtnB.wasPressed()){
if(count>0){
count=count-1;
EEPROM.writeInt(address,count);
EEPROM.commit();
M5.Lcd.fillScreen(BLACK);
M5.Lcd.println(count);
Serial.println(count);
delay(100);
}
}
}
3.説明
①Arduino標準のEEPROMライブラリが利用できるのでインクルードします。
② 使用するメモリのサイズを指定します。 必須
③ EEPROM. readInt とEEPROM.writeIntで、指定したアドレスに対して読み書きを行います。ただし EEPROM.writeInt では実際に書き込みは行われずEEPROM.commit();
によって書き込まれます。
ここではInt用を使用していますが EEPROM. read と EEPROM.write でも同様です。サンプルには他のデータ型用のread/write関数がありますが通常の read/write との使い分けは未検証です。
EEPROMと呼んでいますが、ESP32ではフラッシュメモリをEEPROMとして代用しています。フラッシュメモリでは 書き込みの回数が100,000から1,000,000程という制限があります。
書き換えの関数には EEPROM.writeの他に
EEPROM.update(address, value);
というものがありvalueが保存されている値と異なる場合にのみ書き替えを行います。書き換え回数に制限があるフラッシュメモリでは有効に利用できるでしょう。