NodeMcu и EEPROM

Evgeniy2020
Offline
Зарегистрирован: 26.06.2020

Всех приветствую ! Хотел поиграться с EEPROM но, возникла проблема с чтением с eeprom. 

#include <EEPROM.h>
//#include "ESP8266WiFi.h"
void setup() {
  String ssid = "my_ssid";
  String pass = "my_pass";
  Serial.begin(9600);
  EEPROM.begin(512);
  delay(100);
  //WiFi.mode(WIFI_STA);
  //WiFi.disconnect();
  delay(100);
  Serial.println("EEPROM START");
  EEPROM.write(0, ssid.length());
  delay(40);
  int from = 1;
  for (int i; i < ssid.length(); i++) {
    EEPROM.write(from + i, ssid[i]);
    delay(40);
  }
  from = ssid.length() + 1;
  EEPROM.write(from, pass.length());
  for (int i; i < pass.length(); i++) {
    EEPROM.write(from + i, pass[i]);
  }
  if (EEPROM.commit()) {
    Serial.println("Succesfuly eeprom updated");
  }
  delay(500);
  Serial.println("Start reading");
    String data;
  for (byte i; i < pass.length()+ssid.length()+2; i++) {
    data += (char)EEPROM.read(i);
  }
  Serial.println(data);
  Serial.println(data.length());
  /*
    String data;
    for (byte i; i < 8; i++) {
    data += (char)EEPROM.read(i);
    }
    Serial.println(data);
    Serial.println(data.length());
  */

  Serial.println("end eeprom");

  //EEPROM.end();
}

void loop() {
}

На что получаю ответ в ком порт:

16:09:13.706 -> ⸮txW⸮X6d⸮$⸮p⸮d⸮EEPROM START
16:09:14.081 -> Succesfuly eeprom updated
16:09:14.565 -> Start reading
16:09:14.565 -> 
16:09:14.565 -> 0
16:09:14.565 -> end eeprom
Скажу что первый раз работаю с eeprom. Так что не знаю всех подводных камней. Заранее спасибо
andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

я обычно после .write( и .commit( делаю .end(

потом опять запускаю .begin( 

 

Evgeniy2020
Offline
Зарегистрирован: 26.06.2020
Новый код 
#include <EEPROM.h>
//#include "ESP8266WiFi.h"
void setup() {
  String ssid = "ssid";
  String pass = "password";
  Serial.begin(9600);
  EEPROM.begin(512);
  delay(100);
  //WiFi.mode(WIFI_STA);
  //WiFi.disconnect();
  delay(100);
  Serial.println("EEPROM START");
  EEPROM.write(0, ssid.length());
  delay(40);
  int from = 1;
  for (int i; i < ssid.length(); i++) {
    EEPROM.write(from + i, ssid[i]);
    delay(40);
  }
  from = ssid.length() + 1;
  EEPROM.write(from, pass.length());
  for (int i; i < pass.length(); i++) {
    EEPROM.write(from + i, pass[i]);
  }
  if (EEPROM.commit()) {
    Serial.println("Succesfuly eeprom updated");
  }
  delay(500);//На всякий случай
  EEPROM.end();
  delay(500);//На всякий случай
  EEPROM.begin(512);
  delay(500);//На всякий случай
  Serial.println("Start reading");
    String data;
  for (byte i; i < pass.length()+ssid.length()+2; i++) {
    data += (char)EEPROM.read(i);
    delay(100);//На всякий случай
  }
  Serial.println(data);
  Serial.println(data.length());
  /*
    String data;
    for (byte i; i < 8; i++) {
    data += (char)EEPROM.read(i);
    }
    Serial.println(data);
    Serial.println(data.length());
  */

  Serial.println("end eeprom");

  //
}

void loop() {
}

Ком порт:

16:51:32.632 -> Succesfuly eeprom updated
16:51:34.123 -> Start reading
16:51:34.123 -> 
16:51:34.123 -> 0
16:51:34.123 -> end eeprom
 
Evgeniy2020
Offline
Зарегистрирован: 26.06.2020

Не сработало =(

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

думаю проблема в 18 и 24 строке, функция EEPROM.write( пишет тип char/uint8_t

я преобразую в строку char, потом уже записываю.

        if (server.hasArg("action")) {
          if (((server.arg("action").indexOf("savewifi")) >= 0) && (server.hasArg("ssid")) && (server.hasArg("pass"))) {
            Serial.println("There are new WiFi data");
            // save data to eeprom // записываем введенные данные в eeprom
            byte l = server.arg("ssid").length() + 1;
            server.arg("ssid").toCharArray(eep_str, l); eep_str[l] = 0;
            byte i = 0; while (eep_str[i] > 0) {
              EEPROM.write(eep_pos_wifi_p1 + i, eep_str[i]); ++i;
            } EEPROM.write(eep_pos_wifi_p1 + i, 0);
            l = server.arg("pass").length() + 1;
            server.arg("pass").toCharArray(eep_str, l); eep_str[l] = 0;
            i = 0; while (eep_str[i] > 0) {
              EEPROM.write(eep_pos_wifi_p2 + i, eep_str[i]); ++i;
            } EEPROM.write(eep_pos_wifi_p2 + i, 0);
            EEPROM.commit();
            EEPROM.end();
            EEPROMinit();
            loadDataWiFiEEPROM();
            server.stop();
            WiFi.disconnect();
            ++deviceMode;
          }
        }

 

Evgeniy2020
Offline
Зарегистрирован: 26.06.2020

Ком порт:

18:21:43.065 -> ⸮txW⸮⸮,|⸮$⸮p⸮d⸮
18:21:43.315 -> SSID write....
18:21:43.315 -> SSID writed!
18:21:43.770 -> EEPROM commited!
18:21:44.876 -> End

Код:
#include <EEPROM.h>
//#include "ESP8266WiFi.h"
void setup() {
  String ssid = "my_ssid";
  String pass = "my_password";
  Serial.begin(9600);
  EEPROM.begin(512);
  delay(100);
  int ssid_len = ssid.length() + 1;
  int pass_len = pass.length() + 1;
  char ssid_array[ssid_len];
  char pass_array[pass_len];
  ssid.toCharArray(ssid_array, ssid_len);
  pass.toCharArray(pass_array, pass_len);
  Serial.println();
  Serial.println("SSID write....");
  for (int i; i < sizeof(ssid_array); i++) {
    Serial.println((char)ssid_array[i]);
    delay(100);
    EEPROM.write(i, ssid_array[i]);
    delay(100);
  }
  Serial.println("SSID writed!");
  if (EEPROM.commit()) {
    delay(500);
    Serial.println("EEPROM commited!");
  }
  delay(100);
  EEPROM.end();
  delay(500);
  EEPROM.begin(512);
  delay(500);
  for (byte i; i < 9; i++) {
    Serial.print((char) EEPROM.read(i));
  }
  Serial.println("End");
}

void loop() {
}

 

 

Evgeniy2020
Offline
Зарегистрирован: 26.06.2020

И так не работает =(

Evgeniy2020
Offline
Зарегистрирован: 26.06.2020

Спасибо за помощь, проблема решена вся суть была в том что в цикле надо было задать i=0
 

#include <EEPROM.h>
//#include "ESP8266WiFi.h"
void setup() {
  String ssid = "your_ssid";
  String pass = "your_password";
  Serial.begin(9600);
  EEPROM.begin(512);
  delay(100);
  int ssid_len = ssid.length() + 1;
  int pass_len = pass.length() + 1;
  char ssid_array[ssid_len];
  char pass_array[pass_len];
  ssid.toCharArray(ssid_array, ssid_len);
  pass.toCharArray(pass_array, pass_len);
  Serial.println();
  Serial.println("SSID write....");
  for (int i=0; i < sizeof(ssid_array); i++) {
    Serial.println((char)ssid_array[i]);
    delay(100);
    EEPROM.write(i, ssid_array[i]);
    delay(100);
  }
  Serial.println("SSID writed!");
  if (EEPROM.commit()) {
    delay(500);
    Serial.println("EEPROM commited!");
  }
  delay(100);
  for (byte i=0; i < 9; i++) {
    Serial.print((char) EEPROM.read(i));
  }
  Serial.println("End");
}

void loop() {
}