ARDUINO 跟ESP32 或是ESP8266 其實在ARDUINOIDE上都可以使用 EEPROM.h 這個庫
差別在於能儲存多少的字元而已
下面程式碼的範例功能是我輸入 ID=XXX ,EEPROM會存起來,
當我輸入ID?,會將存起來的值顯示出來,裡面有寫一個help指令,
當忘記時可以輸入HELP,就會顯示出指令
程式碼:
#include <EEPROM.h>
String cmd;
String ID;
// define the number of bytes you want to access
#define EEPROM_SIZE 4096
void setup() {
Serial.begin(115200);
// initialize EEPROM with predefined size
EEPROM.begin(EEPROM_SIZE);
}
////
void writeStringToEEPROM(int addrOffset, const String &strToWrite)
{
byte len = strToWrite.length();
EEPROM.write(addrOffset, len);
for (int i = 0; i < len; i++)
{
EEPROM.write(addrOffset + 1 + i, strToWrite[i]);
}
}
String readStringFromEEPROM(int addrOffset)
{
int newStrLen = EEPROM.read(addrOffset);
char data[newStrLen + 1];
for (int i = 0; i < newStrLen; i++)
{
data[i] = EEPROM.read(addrOffset + 1 + i);
}
data[newStrLen] = '\0'; // !!! NOTE !!! Remove the space between the slash "/" and "0" (I've added a space because otherwise there is a display bug)
return String(data);
}
////
void loop() {
if (Serial.available()) {
String s = "";
while (Serial.available()) {
char c = Serial.read();
if(c!='\n'){
s += c;
}
delay(5); // 沒有延遲的話 UART 串口速度會跟不上Arduino的速度,會導致資料不完整
}
if(s!=""){
cmd =s;
//Serial.println(cmd);
if(cmd.substring(0,3)=="ID=")
{
ID = cmd.substring(3,6);
Serial.println(ID);
//EEPROM.write(0,ID);
writeStringToEEPROM(0,ID);
EEPROM.commit();
Serial.println("OK");
delay(100);
}
else if(cmd=="ID?\r")
{
String retrievedString = readStringFromEEPROM(0);
Serial.println(retrievedString);
delay(100);
}
else if(cmd=="help\r")
{
Serial.println("ID?");
Serial.println("ID=");
}
else{}
}
}//if (Serial.available())
}//loop
備註:請將監控視窗照下面選取
下面是執行結果:
留言列表