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

備註:請將監控視窗照下面選取

image

下面是執行結果:

111

 

 

arrow
arrow
    創作者介紹
    創作者 凶王 的頭像
    凶王

    凶王的部落

    凶王 發表在 痞客邦 留言(0) 人氣()