NodeMcu и EEPROM
- Войдите на сайт для отправки комментариев
Пт, 26/06/2020 - 17:32
Всех приветствую ! Хотел поиграться с 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. Так что не знаю всех подводных камней. Заранее спасибо
я обычно после .write( и .commit( делаю .end(
потом опять запускаю .begin(
Новый код #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() { }Ком порт:
Не сработало =(
думаю проблема в 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; } }Ком порт:
Код:
#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() { }И так не работает =(
Спасибо за помощь, проблема решена вся суть была в том что в цикле надо было задать 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() { }