• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 работает? там адрес точки как-то инициализируется?
 
Сверху Снизу