Vitaly
Member
@Denis Karasiov
да, точно, для начала отличающегося от нуля нужно так исправить
да, точно, для начала отличающегося от нуля нужно так исправить
void writeSettingsESP() {
...
for (i = EEPROM_START; i < EEPROM_START+sizeof(eeprom_data); i++)
...
}
uint32_t memcrc;
uint8_t *p_memcrc = (uint8_t*)&memcrc; // Это!
...
static PROGMEM prog_uint32_t crc_table[16] = {
0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c,
0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c
}; // Массив...
...
void readSettingsESP() {
...
if (memcrc == datacrc) { // memcrc - единственное присвоение значения переменной в функции
writeSettingsESP, но при обычном считывании данных мы же ее вроде не используем?!
...
} else {
...
}
}
// А дальне - вообще проще застрелиться... :)
unsigned long crc_update(unsigned long crc, byte data) {
byte tbl_idx;
tbl_idx = crc ^ (data >> (0 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
tbl_idx = crc ^ (data >> (1 * 4));
crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4);
return crc;
}
unsigned long crc_byte(byte *b, int len)
{
unsigned long crc = ~0L;
uint8_t i;
for (i = 0 ; i < len ; i++)
{
crc = crc_update(crc, *b++);
}
crc = ~crc;
return crc;
}
Спасибо.запись тоже исправил
в esp eeprom не настоящий а эмулируется во флэше поэтому от этого может что-то зависеть по блокам, честно говоря не помню чтобы такое читал
crc32 сам из 4х байт, алгоритм я конечно где-то подсмотрел
unsigned long crc_byte(byte *b, int len)
{
unsigned long crc = ~0L;
uint8_t i;
for (i = 0 ; i < len ; i++) {
crc = crc_update(crc, *b++);
}
crc = ~crc;
return crc;
}
void handleRoot()
{
//String ssid_ap;
//String pass_ap;
String str = "";
String html_header = "<html>\
<meta http-equiv=\"refresh\" content=\"text/html; charset=utf-8\">\
<head>\
<title>ESP8266 Settings</title>\
<style>\
body { background-color: #fffff9; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
</style>\
</head>";
str += html_header;
str += "<body>\
<form method=\"POST\" action=\"ok\">\
<input name=\"ssid_ap\"> Логин Wi-Fi сети</br>\
<input name=\"pass_ap\"> Пароль</br></br>\
<input type=SUBMIT value=\"Save settings\">\
</form>\
</body>\
</html>";
server.send ( 200, "text/html", str );
}
void handleOk()
{
String ssid_ap;
String pass_ap;
unsigned char* buf = new unsigned char[64];
String str = "";
// str += html_header;
// str += "<body>";
// EEPROM.begin(98);
ssid_ap = server.arg(0);
pass_ap = server.arg(1);
// проверить пустые - нет
/*
if (eeprom_data.STAenabled == true && WiFi.status() != WL_CONNECTED)
s += "<br>wifi client enabled and disconnected";
else if (eeprom_data.STAenabled == true && WiFi.status() == WL_CONNECTED)
{
s += "<br>wifi client connected";
*/
Serial.print("level "+String(WiFi.RSSI())+" dBm");
Serial.println();
Serial.print("ssid_ap : ");
Serial.println(ssid_ap);
Serial.print(" pass_ap : ");
Serial.println(pass_ap);
//server.hasArg("ssid");
//server.hasArg("CONFIGuser");
}
Если есть возможность, помогите с кодом web странички. В html полный нуб.@cerberus думаю просто создать доп. странички с разными ошибками и далее что бы переадресовывало на нужную из их
Да я тоже не особо в HTML кодинге понимаю.Если есть возможность, помогите с кодом web странички. В html полный нуб.
wifi.sta.getap(function(table))
Параметры
function(table): функция, которая вызывается по окончании сканирования сети
эта функция получает таблицу, с ключевым полем ssid, другие значения: authmode,rssi,bssid,channel
Возвращаемые значения
nil
Пример
-- print ap list
function listap(t)
for k,v in pairs(t) do
print(k.." : "..v)
end
end
wifi.sta.getap(listap)