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

Разработка ‘библиотеки’ малого webсервера на esp8266.

pvvx

Активный участник сообщества
Последнее редактирование:

vad7

Active member
<time>105032091</time>
<rtctime>2265762444</rtctime>
<mactime>0x0000000906625a80</mactime>

Значит, похоже не перезагружается, вечером посмотрю, что в UART вылазит.
 

vad7

Active member
Вечером обнаружил, что модуль перезагрузился - uptime сбросился.

Вот что выдается в UART0 на 115200 при сбое, когда давишь на "main" при некотором бездействии:
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x40100000, len 108, room 16
tail 12
chksum 0x83
csum 0x83

подключил второй терминал на GPIO2 - буду дальше мониторить.
 

vad7

Active member
С включенной опцией GPIO2 debug UART пару часов не падал.
Выключил опцию, не отключая терминал, также закладка debug->main после бездействия - "страница не доступна", debug UART:
meSDK 1.4.1
don't use rtc mem data

Save rx_gain_dc table (0, 1)
Old reset: Fatal exception (28):
epc1=0x40236a8b, epc2=0x00000000, epc3=0x00000000, excvaddr=0x04010018, depc=0x00000000
 

vad7

Active member
Вот еще поймал:
UART0 (115200):
ets Jan 8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 108, room 16
tail 12
chksum 0x83
csum 0x83
debug UART:
Код:
meSDK 1.4.1
don't use rtc mem data

Save rx_gain_dc table (0, 1)
Old reset: Fatal exception (28):
epc1=0x40236a8b, epc2=0x00000000, epc3=0x00000000, excvaddr=0x04010018, depc=0x00000000

Simple WEB version: 0.1.4
OpenLoaderSDK v1.2
Found free IRAM: base: 0x40105358, size: 27816 bytes
System memory:
data  : 0x3ffe8000 ~ 0x3ffe8380, len: 896
rodata: 0x3ffe8380 ~ 0x3ffe8bfc, len: 2172
bss   : 0x3ffe8c00 ~ 0x3ffef428, len: 26664
heap  : 0x3ffef428 ~ 0x3fffc000, len: 52184
Start 'heap' size: 51920 bytes
Set CPU CLK: 80 MHz
sleep disable
ErrWiFiSet: 0x00010000

Disk init: 68 files, addr = 0x0003f000
mode : sta(18:fe:34:9c:b8:d1)
add if0
f r0,
SDK Init - Ok
Current 'heap' size: 50760 bytes
Run ini file: protect/init.ini
of1[protect/init.ini] [sys_ram0x60000f00=0x48]
H[sys_ram0x60000f00=0x65]
e[sys_ram0x60000f00=0x6c]
l[sys_ram0x60000f00=0x6c]
l[sys_ram0x60000f00=0x6f]
o[sys_ram0x60000f00=0x21]
!cf1 WiFi_set(0x0000ffff)=0x00000000
WiFi mode:1 phy:3 dhcp:1/0
AP:ESP8266[7] hiden(0) psw:[0123456789] au:3 chl:1 maxcon:4 beacon:100
ip:192.168.4.1 gw:192.168.4.1 msk:255.255.255.0 mac:1a:fe:34:9c:b8:d1
DHCP ip:192.168.4.2..192.168.4.10
ST:[vadw] psw:[qwertyuiop123456789] b:0 ff:ff:ff:ff:ff:ff ac:1
ip:192.168.20.111 gw:192.168.20.1 msk:255.255.255.0 mac:18:fe:34:9c:b8:d1
sleep:0, rect:30, maxtpw:82, sthn:[ESP_9CB8D1]
scandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 10
cnt
 

pvvx

Активный участник сообщества
Вот еще поймал:
Old reset: Fatal exception (28):
epc1=0x40236a8b, epc2=0x00000000, epc3=0x00000000, excvaddr=0x04010018, depc=0x00000000
Это не web и система. Это что-то неверно задано в переменных, выводящихся на страницу... Вроде в web_int_callback() при обращении куда-то в отладку с выводом из i/o из 0x60000800. Регистры портов - iomuх... Точно сказать не могу - не знаю на какой версии прошивки и что по тем адресам, да и её уже (старой) нет. Но так - на вскидку примерно на 80%, по областям процедур... Весь этот демо-хлам не откатать никогда :) В рабочую прошивку надо большую часть просто стереть, оставив необходимое и заодно проверив...
Короче это из области - незачем "на машине рулить в столб" - она тоже сломается :)
 

vad7

Active member
Понятно, а когда ожидается поновей библиотека?
Прежде чем начать погружаться в ESP8266 вот хотел выбрать наиболее стабильную прошивку/среду разработки.
Чистый UDK, я как понимаю не вариант, Arduino тем более....
 

pvvx

Активный участник сообщества
Понятно, а когда ожидается поновей библиотека?
Я думаю уже закат.
Прежде чем начать погружаться в ESP8266 вот хотел выбрать наиболее стабильную прошивку/среду разработки.
Чистый UDK, я как понимаю не вариант, Arduino тем более....
Ну кто ж сделает среду разработки один, да ещё и без базы "торпедных катеров" ? :) Китайцам, как показала практика, этого тоже не надо и информацию по чипу они до сих пор скрывают, хотя уже слепили новый (ESP32). Его ждет аналогичная ситуация, но более скоротечная...
 

vad7

Active member
Понятно.

А такой вопрос - можно как-то отключить/запатчить перезапись секторов при загрузке?
При реконнекте WiFi, насколько я понял, перезаписи нет.
 

Andy Korg

Moderator
Команда форума

pvvx

Активный участник сообщества
vad7 Ну и выключить отладку раз стабильность вам важнее проверить.
Это связано не с выводом отладки (debug), а что запрашиваетcя по переменным в HTML. Можно же вызвать запись в любую область памяти по переменной...
А такой вопрос - можно как-то отключить/запатчить перезапись секторов при загрузке?
Это китайское сохранение настроек WiFi, плюс с последних версий там сохраняются настройки ухода частот от питания и т.д. для быстрой загрузки после deep_sleep.
При реконнекте WiFi, насколько я понял, перезаписи нет.
А неизвестно. При старте у китайцев некоторые настройки WiFi по умолчанию приходится менять, а это у них вызывает перезапись конфигов. Они не проверяют, изменилось ли что в записанном, а просто всегда стирают и пишут. Смените их процедуры на свои. Об этом уже где-то писали...
Ищите wifi_param_save_protect_with_check() и меняйте на свою.
http://esp8266.ru/forum/search/1607226/?q=wifi_param_save_protect_with_check&o=date&c[node]=8
Исходник тоже дан https://github.com/pvvx/esp8266web/blob/master/info/libs/main/user_interface.c#L679
Да и патчить для замены функций ничего не надо
Есть опции линковщику: -Wl,--wrap=имя_функции
Далее в СИ пишите
тип __wrap_имя_функции(аргументы)
{
а обращение к старой выглядит так __real_имя_функции(аргументы);
}
Но есть беда, если обращение к замененной функции уже в либе в одном объектнике. По тому ручками допатчиваете китай-либы :) Я этого делать за вас не буду - т.к. это надо делать для каждой версии SDK...
Сохранение калибровок WiFi по старту находится в meSDK -> https://github.com/pvvx/esp8266web/blob/master/app/sdklib/system/app_main.c#L540
Так что меняете как хотите...
 
Последнее редактирование:
  • Like
Реакции: vad7

Alexander

Member
Я тут снова с вопросами, возможно, глупыми :oops:
Нельзя ли портировать WEBFS22 или исходники? Оно вроде и не критично - под вайном нормально все работает, но хочется, чтобы уж совсем нативно.

Уж больно понравился мне данный проект. Я было потыкался в Arduino и Sming - не мое. Наверняка от неумения Готовить, но... :)
После AVR долго скрипел мозгами, но с подсказками и примером @pvvx, за что ему премного благодарен, дело потихоньку пошло.
Может позже OpenSDK освою. Просто здесь очень много халявы - готовый http сервер, да еще и удобная сборка диска. :)
 

pvvx

Активный участник сообщества
Я тут снова с вопросами, возможно, глупыми :oops:
Нельзя ли портировать WEBFS22 или исходники? Оно вроде и не критично - под вайном нормально все работает, но хочется, чтобы уж совсем нативно.
https://github.com/pvvx/esp8266web/blob/master/lib/WEBFS22.zip
На питоне так и не написал - https://github.com/pvvx/esp8266web/tree/master/webfs . Хотел, но лень, т.к. есть уже работающий...
 

pvvx

Активный участник сообщества
Alexander, сюда еще HTTP GET/POST нужно добавить для полной халявы :)
Переменные разбираются и передаются не только через GET/POST, но и через куки. И через формат multipart/form-data в POST. Т.е. ограничения в кол-ве за раз передаваемых параметров нет. С передачей по HHTP-Web файлов в ESP в формате multipart/form-data немного сложнее - неудобно сделан разбор, но тоже есть :)
Основная задача для пользователя при применении данной свалки для какого-то проекта - удаление лишнего и написание своих HTML файлов.

Счас вот на основе данного Web делаю логер/сборщик данных с десятка датчиков с выводом графиков с накоплениями за 1 год... и другой вариант - передача позиции устройства (примерно это, но дешевле и больше датчиков, т.к. позиция только для указания где произведены измерения других величин)... Но опять китайцы расстраивают:
IMG_6237sm.jpg
(плата висит на магните!)
Какого фигу к датчику магнитного поля на плате стоят магнитные детали? Это же приведет к искажению замеров магнитного поля не только вектора, но интенсивности, которые не скомпенсировать! Существует понятие магнитная вязкость, а мне надо измерять и изменения поля! А оно будет зависеть от скорости изменения, и чтобы откалиброваться потребуется неимоверная таблица ещё с параметрами по скорости намагничивания этих магнитных элементов на плате, а так-же их остаточной намагниченности! В общем испорченный датчик.
 
Последнее редактирование:

Alexander

Member
Снова я невнимателен, оно там и раньше было. Спасибо.
Какого фигу к датчику магнитного поля на плате стоят магнитные детали?
Это экономия такая безмозглая. Медь дорогая и сейчас выводф часто делают стальными. Практически все корпуса попадаются в варианте со стальными выводами. А что поставить... Да кто смотрит. Недавно с Али покупал ардуинки, так эти идиоты в платы с вариантом 5В 16МГц запаяли ATmega168V.
Спрашиваю продавца: "Ты что мне продал?" Все нормально, говорит и тычет скриншотом ардуино иде, с выбором типа платы, утверждая, что это доказательство работоспособности. Шлю ему фото платы, картинку с выдержкой из даташита и ссылку на даташит. Отвечает, что, наверное, я не то купил и если мне нужна мега 328, так ее бы и покупал. Толи дурака включил, толи реально идиот. Открыл спор, объясняю, что. мать вашу, нельзя ATmega168V на 16МГц, без V нужна ну и фото, ссылки. Мне отвечают, что раз я не предоставил видео, как это все не работает, то и предмета спора нет. Ну, я понимаю, удобно заменит кварц и стабилизатор, а контроллер оставить - сокращение номенклатуры и все такое.
 

pvvx

Активный участник сообщества
Я HTTP клиента имел ввиду, чтобы датчик сам передавал данные в БД (например, на сайт thingspeak.com).
Используйте Arduino или ещё чего. Я не делаю проектов зависящих от внешнего платного сервиса.
 
Сверху Снизу