ESP8266 проблема с записью и чтением долговременной памяти
- Войдите на сайт для отправки комментариев
Ср, 29/07/2020 - 20:05
Пробую добавить логин и пароль для подключения к точке доступа, а при попытке чтения там всякая ерунда хотя имя точки и пароль на английском и присутствуют цифры.
Запись и чтение с епрома делаю функциями
void writeString(char add,String data) { int _size = data.length(); int i; for(i=0;i<_size;i++) { EEPROM.write(add+i,data[i]); } EEPROM.write(add+_size,'\0'); //Add termination null character for String Data EEPROM.write(add+_size,0); //Add termination null character for String Data EEPROM.commit(); } String read_String(char add) { int i; char data[50]; //Max 100 Bytes int len=0; unsigned char k; k=EEPROM.read(add); while(k != '\0' && len<50) //Read until null character { k=EEPROM.read(add+len); data[len]=k; len++; } data[len]='\0'; return String(data); }
Вот запись из вебинтерфейса:
//Запись в епром String handleForm() { if (server.method() == HTTP_POST) { digitalWrite(led, 1); String message = "POST form was:\n"; for (uint8_t i = 0; i < server.args(); i++) { message += " " + server.argName(i) + ": " + server.arg(i) + "\n"; if(server.argName(i)=="ssid"){writeString(0, server.arg(i));} if(server.argName(i)=="ssid_password"){writeString(50, server.arg(i));} if(server.argName(i)=="email"){writeString(100, server.arg(i));} if(server.argName(i)=="password"){writeString(150, server.arg(i));} } return message; } }
И чтение:
ssid_my = read_String(0); ssid_password_my = read_String(50); email_my = read_String(100); password_my = read_String(150);
Далее вывожу в Serial
Serial.println(email_my); Serial.println(password_my); Serial.println(ssid_my); Serial.println(ssid_password_my);
И получаю:
Ϥ⸮\⸮j⸮
NJF@<8⸮
А скетч полностью можно? Записи и чтения. А то, много вопросов остаётся.
Это когда запущен сервер, работает этот код:
Остальное к записи и чтению не относится (много кода с другими операциями связанного)
еще раз загрузил скетч и оно заработало, может ошибка какая записи...
А где обещанная печать, о которой Вы говорили?
Её нет в этом коде. Более того, в нём вообще нет "read_String". В чём тогда его проблема?
в первом же посте перед выводом, пропустили?
Причём тут первый пост?
Я Вас попросил дать мне полный скетч, в котором видна проблема. Вы дали в #2. Но в #2 нет ни функции чтения, ни печати результатов.
В старых постах скетчи неполные и сказать ничего нельзя. например, ХЗ как у Вас переменные описаны.
При срабатывании void handleRoot3() , выводит все что записалось в долговременную память, так вот имя сети и пароль сети выводит нормально, логин и пароль доступа к сайту это все вопросы, не могу понять почему.
переменные объявлены так static String ssid_my = "";
Да и вобще я смотрю запись в память один раз прошла, а теперь постоянно выдает старые данные
3d_killer,
в посте №1 я Вам писал
А скетч полностью можно?
В посте №3 я Вам пояснил
Я Вас попросил дать мне полный скетч, в котором видна проблема.
Я просто хотел запустить Ваш скетч у себя, увидеть проблему, исправить её и подсказать Вам. Но для этого скетч должен быть полным, чтобы он компилировался и запускался. Вы же в посте #7 опять дали мне какой-то огрызок без начала и без конца.
Третий раз я Вас ни о чём просить не буду. Если Вам это не нужно, то мне и подавно. На будущее, посмотрите в словаре что означает слово "полный".