• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

скетч с конфигуратором в eeprom, сервер и клиент

Slacky

Member
@Vitaly спасибо. Просто переделывать под себя пока не стал, решил только посмотреть. Префиксы видел, но не сообразил, как узнать макадрес, а он в имени сети был ... Еще раз - спасибо. Буду разбираться ...
 

Slacky

Member
@Vitaly привет.

Взял для своих нужд процедуру записи и считывания с EEPROM из Вашего скетча. Размер структуры, которая пишется - 284 байта. Падает на процедуре вычисления CRC

Код:
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;
}
Уменьшил структуру до 98. Прекрасно отрабатывает.

Может чего подскажете?

P.S. Проверил методом подгона. Если структура читаемых-записываемых данный больше 252 байт - падаем. 253 - уже все, не работает, а 252 - норма ...
 
Последнее редактирование:

Vitaly

Member
а, это же подфункция расчета, тут всё ок с размерностью

проблема раньше

Код:
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++);
  }
размер блока int len
а итератор цикла всего uint8_t i, надо его приводить в соответствие
 

Slacky

Member
а, это же подфункция расчета, тут всё ок с размерностью

проблема раньше

Код:
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++);
  }
размер блока int len
а итератор цикла всего uint8_t i, надо его приводить в соответствие
О, спасибо, буду проверять ...
 

mcmega

Member
Скажите, а есть какое то костыль чтоб отключить запись (или уменьшить количество) в последние 3 сектора Flash, чтоб продлить его жизнь?
А то и впрямь, это как то неправильно и до дырки можно писать туда...
У меня тестовый модуль походу по этой причине и загнулся (1,5 года на нем все испытываю)
 

Vitaly

Member
в начале скетча есть WiFi.persistent(false);
я конечно не 100% уверен что оно запрещает запись во флэш, но читал, что для этого и было предназначено
 

Paul_B

Member
Кому интересно, сделал с поддержкой IP-настроек. Помимо этого в EEPROM можно писать дополнительные параметры. Под SSID и Пароль отвел по 16 байт.
Перед тем как попасть на страницу настроек из EEPROM считываются настройки и вставляются в соответствующие поля.
Еще добавил помимо функции стирания настроек - возобновление подключения по старым настройкам, сохраненным в памяти, что также полезно, если вдруг отключился WiFi - после его включения связь будет восстановлена.
Также добавил в настройки возможность задавать идентификационный номер модуля (изначально берется из Chip_id

esp8266_eeprom.ino
 
Последнее редактирование:

EvgenDRV

New member
Доброго времени. Помогите разобраться со скетчем aESPtemplate.ino отправляю get запрос sendURL("/foo/get.php?a=444"); всё прекрасно работает, на сайте php принимает данные и раскидывает в БД.
А как получить ответ? В примере BasicHTTPClient.ino получалось, а в этом скетче не могу никак допетрить. Помогите плиз.
 

Vitaly

Member
в 514 строке sendURL есть
Код:
String line = client.readStringUntil('\r');
//Serial.print(line);
я сейчас уже не помню читает ли это полностью ответ или только заголовки ответа, надо пробовать
ну и потом нужные данные обработать и вернуть из функции
 

EvgenDRV

New member
это и пробовал сразу, но ничего не пришло. Может как-то связано с ('\r') ?
У меня в get.php одна только строчка f10110000
 

EvgenDRV

New member
Оказывается delay(5) нужно побольше сделать... тупо убил весь день. Теперь приходят заголовки HTTP/1.1 200 OK но не то что нужно
 

EvgenDRV

New member
Какой же я нуб. Нужно заменить client.readStringUntil на просто client.readString
и приходит
Код:
HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Fri, 12 Apr 2019 14:55:53 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: Accept-Encoding
X-Powered-By: PHP/5.6.40
X-Hosted-By: http://www.host-food.ru/

16
  f444777110000


0
а как лишнее отсечь? в примере BasicHTTPClient.ino приходило только f444777110000


Можно конечно пропарсить и все значения распихать куда нужно, но может есть более изящный способ
 

Vitaly

Member
Какой же я нуб. Нужно заменить client.readStringUntil на просто client.readString
а как лишнее отсечь? в примере BasicHTTPClient.ino приходило только f444777110000
Можно конечно пропарсить и все значения распихать куда нужно, но может есть более изящный способ
в httpclient используется библиотека более высокого уровня где есть отрезание лишнего
конечно можно переделать эту отправку на те функции и ими пользоваться, тем более что в этот скетч они тоже линкуются из-за системы обновлений
 

Dan Don

New member
Хочу поделится своим скетчем с конфигуратором в eeprom, может быть будет кому-то полезно
Сохранение настроек c crc, включение/выключение клиента wifi, отправлялки данных на сервер через GET
проверка адреса клиента и запрет менять настройки со стороны wifi station

имя точки задается из переменной и последних 4х символом мак адреса, пароль точки аналогично

Готов выслушать любые комментарии)

aESPtemplate.ino


edit:
Добавил возможность выключения точки при подключении в режиме клиента, сохранение пустых паролей и что-то еще по мелочи.

edit:
для работы http ota нужен сервер отдающий прошивки, например с таким скриптом esp.php.txt

Простите, только начинаю разбираться в тонкостях ESP... Нужна помощь по вашей программе. Из-за чего Ip ставится 0.0.0.0? проверил все, что смог понять... не знаю почему ip нулевой
 

Вложения

  • 22.2 KB Просмотры: 8

Vitaly

Member
затрудняюсь что-то так сказать, возможно это связано с более новой версией sdk?
стандартный пример с AP работает? там адрес точки как-то инициализируется?
 
Сверху Снизу