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

vad7

Active member
@pvvx, подскажите как на вашей свалке запустить NMI timer?
NmiTimSetFunc вырезана из библиотеки, а если подсовываю nmi.c из info - таймер не срабатывает.

Нашел в свалке TIMER0_USE_NMI_VECTOR.
В общем, даже он виснет.
 
Последнее редактирование:

vad7

Active member
Еще чего заметил - если вставить задержку в пол-секунды и более сразу за "os_printf("\n\nmeSDK %s\n", SDK_VERSION)", то при подаче питания виснет на ней или чуть позже (в зависимости от задержки).
Опять же после reset все в порядке, задержку проходит и работает норм.

Загрузил с гитхаба свалку, говорит вот это и висюк:
meSDK 2.0.0
Save rf_cal (1, 1, 6, 2)
Reset event: RST

Simple WEB version: 0.1.4
Found free IRAM: base: 0x40105814, size: 10220 bytes
System memory:
data : 0x3ffe8000 ~ 0x3ffe838c, len: 908
rodata: 0x3ffe838c ~ 0x3ffe8bb0, len: 2084
bss : 0x3ffe8bb0 ~ 0x3ffeec28, len: 24696
heap : 0x3ffeec28 ~ 0x3fffc000, len: 54232
bssi : 0x40105814 ~ 0x4010645c, len: 3144
free : 0x4010645c ~ 0x40108000, len: 7076
Start 'heap' size: 53984 bytes
Set CPU CLK: 160 MHz
sleep disable

Disk init: 72 files, addr = 0x00080000
mode : sta(18:fe:34:13:92:51) + softAP(1a:fe:34:13:92:51)
add if0
add if1
dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
bcn 100

SDK Init - Ok
Current 'heap' size: 51288 bytes
Run ini file: protect/init.ini
of1[protect/init.ini] cf1 WiFi_set(0x0000ffff)=0x00008200
WiFi mode:3 phy:3 dhcp:1/1
AP:ESP8266[7] hiden(0) psw:[0123456789] au:0 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:13:92:51
DHCP ip:192.168.4.2..192.168.4.10
ST:[HOMEAP] psw:[0123456789] b:0 ff:ff:ff:ff:ff:ff ac:0
ip:192.168.1.50 gw:192.168.1.1 msk:255.255.255.0 mac:18:fe:34:13:92:51
sleep:0, rect:30, maxtpw:75, sthn:[ESP_139251]
а а ь а а ь ааааааа ааа а а а ь а а

Похоже надо задержку на reset ставить - если подать питание с зажатым ресетом, а потом его отпустить, то все стартует замечательно.
Чего за фигня такая, не понимаю....
 
Последнее редактирование:

pvvx

Активный участник сообщества
Добрый день. Пытался запустить оверлей, но так и не понял как :( (Использую проект Web-RS485) - не понятно как правильно записать команду :
1) 10.10.10.67 ....... &ovl=tcp_client.ovl
2)10.10.10.67 ....... &ovl&=1
Неверный HTTP синтаксис. "?переменная=значение&переменная1=значение1&...".
На первой странице самого web на модуле есть help по командам.
А так-же в примерах web страниц.
ovl=name_file - Загрузка файла оверлея с web-диска
ovl$=n - n - число (hex/dec). 0 - close, 1 - инициализация. Другие значения - специфичны для передачи опций конкретному оверлею.

Запуск оверлея после загрузки производится автоматически. Но есть различия - HTTP или WebSocket запрос...
На сколько я понял оверлеи надо запускать в пустом Web проекте, а не в проекте Web-RS485 ?
В любом, если включена их поддержка. По умолчанию включена в любом.
 
Последнее редактирование:

pvvx

Активный участник сообщества
@pvvx, подскажите как на вашей свалке запустить NMI timer?
NmiTimSetFunc вырезана из библиотеки, а если подсовываю nmi.c из info - таймер не срабатывает.
Смотрите meSDK, а не Web.
Для переключения таймера на NMI там есть опция.
в sdk_config.h:
// #define TIMER0_USE_NMI_VECTOR // использовать NMI вектор для таймера 0 (перенаправление таблицы векторов CPU) (см main-vectors.c)
Это связано с тем, что для обеспечения NMI требуется больше ресурсов и кода в проекте, а проект рассчитан на минимальное пожирание памяти и flash.
И так-же это не Arduino - если что переключаете - соизвольте обеспечить доп. поддержку сами, в своем коде. Т.е. не разобравшись - не переключайте.
+ использование глупостей от Espressif тоже отключено. Пример для NMI с таймером в проекте есть...
Использовать NMI можно только в крайнем случае. Беда у него с WiFi - требуется код обработки выполняемый за не более 1 us. Иначе рвет WiFi. Это описано и у китайцев. Вот в целях сокращения времени обработки и введены многие отличия...
 
Последнее редактирование:

pvvx

Активный участник сообщества
Похоже надо задержку на reset ставить - если подать питание с зажатым ресетом, а потом его отпустить, то все стартует замечательно.
Чего за фигня такая, не понимаю....
Не знаю - на модулях ESP-01, ESP-12, плате DEV Kit (NodeMCU) все норм.
Уточняйте что и как до и после.
 

vad7

Active member
@pvvx, да в том то и дело, что у меня на двух esp-01 тоже работает.
щас вообще накатил родную АТ прошивку SDK 2.0.
Тоже самое. При включении зависон, жмешь ресет - "ready".
Модуль подключал и в USB 2.0 и в 3.0. завтра шнур покороче принесу.

Мне другое стало интересно - если вставить задержку хоть в секунду в начальный код даже до инициализации WiFi, то при включении на ней виснет, а после ресета нет.
Это как так получается?
 

pvvx

Активный участник сообщества
Мне другое стало интересно - если вставить задержку хоть в секунду в начальный код даже до инициализации WiFi, то при включении на ней виснет, а после ресета нет.
Это как так получается?
До исполнения диспетчера системы (ets_run() в ROM_BIOS) никакие программные таймеры не отрабатываются. ets_run() запускается везде - и в китай SDK, и в meSDK, и ... после инициализации...
Только в Arduino процедура Setup() вызывается уже апосля всего. Используйте Arduino.
 

vad7

Active member
@pvvx, причем здесь ардуино?
Вы же копались в нутрях, и много всего наковыряли, что там может подвешивать вначале, даже до инита кучи и т.п.?
И в то же время после ресета уже не подвешивать?
 

pvvx

Активный участник сообщества
@pvvx, причем здесь ардуино?
Там дописано много кода, чтобы можно было юзать без разбора, не задумываясь...

Вы же копались в нутрях, и много всего наковыряли, что там может подвешивать вначале, даже до инита кучи и т.п.?
И в то же время после ресета уже не подвешивать?
Описано же - не включены таймеры и не работает распределение задач. Как вы вставляете задержку?
 

vad7

Active member
@pvvx, обычный цикл, например, os_delay тоже.
Для реальной задачи мне эти задержки вообще не нужны.
Это когда я где зависает искал.

Зависон случается похоже через определенное время после подачи питания.
До куда код успел доработать - там и зависли.

А зависон, какой он бы не был очень плохо. И особенно, что ни ватчдог, ни NMT таймер не срабатывает.
 

pvvx

Активный участник сообщества
@pvvx, обычный цикл, например, os_delay тоже.
Для реальной задачи мне эти задержки вообще не нужны.
Это когда я где зависает искал.

Зависон случается похоже через определенное время после подачи питания.
До куда код успел доработать - там и зависли.

А зависон, какой он бы не был очень плохо. И особенно, что ни ватчдог, ни NMT таймер не срабатывает.
Если есть зависимость до действа, то значит что-то ещё не проинито. Тот-же WDT. Ресет сбрасывает часть внутренних устройств. ROM-BIOS инициализирует по минимуму - UART и SPI к Flash. Всё остальное инится уже в загруженном коде...
Так-же по сбросу защелкивается состояние всех I/O пинов чипа, 7-мь из которых используется для типа загрузки. При включении питания на них скорость нарастания сигнала разная - зависит от схемы включения модуля. Возможно, что у вас срабатывает WDT и модуль перезагружается в другом режиме, определяемом ногами...
Т.е. без описания предварительных действий и состояний I/O говорить тут не о чем.

PS: Защелкивание I/O для типа загрузки происходит по фронту RESET. Как их изменить - я не знаю и описаний не встречал. Так-же часть I/O в ROM-BIOS проверяется и на текущее состояние... плюс проверяется реакция RTC блока, для определения типа старта... Всё это в куче дает сотни условий для нормальной перезагрузки...
Описания в esp_init_data_default.bin ещё дают дополнительные комбинации в закрытой части либ инициализации... К примеру в esp_init_data_default.bin задаются переключения UART выходов, частоты кварца и т.д...
 
Последнее редактирование:

vad7

Active member
@pvvx, ага, спасибо, буду дальше ковырять, либо повешу кондер на ресет побольше...

А модуль обычный LoLin Nodemcu 3, с перепутанными 3-мя ногами. К нему только проводки 15 см подцеплены (7 шт), но никуда не подключены. Впрочем, от их подключения к nrf24l01 ничего не меняется.
 

vad7

Active member
@pvvx, Ну да, модуль перезагружается в режиме прошивки (1,6):

ets Jan 8 2013,rst cause:2, boot mode:(3,7)

load 0x40100000, len 268, room 16
tail 12
chksum 0xca
csum 0xca
.............................
ets Jan 8 2013,rst cause:2, boot mode:(1,6)
Везде стоит подтяжка:
GPIO0_MUX = VAL_MUX_GPIO0_SDK_DEF;
Да и резистор GPIO0 - VCC стоит.
 

DorianGray

New member
Неверный HTTP синтаксис. "?переменная=значение&переменная1=значение1&...".
На первой странице самого web на модуле есть help по командам.
А так-же в примерах web страниц.
ovl=name_file - Загрузка файла оверлея с web-диска
ovl$=n - n - число (hex/dec). 0 - close, 1 - инициализация. Другие значения - специфичны для передачи опций конкретному оверлею.

Запуск оверлея после загрузки производится автоматически. Но есть различия - HTTP или WebSocket запрос...
В любом, если включена их поддержка. По умолчанию включена в любом.
Я так пытался сделать, но что-то оно не заработало. Не уверен в правильности моего запроса:
http://10.10.10.67/protect/uart.htm?ovl=tcp_client.ovl
http://10.10.10.67/protect/uart.htm?ovl$=1

Но в отладчике ничего не происходит :(
Код:
srv[80] 10.10.10.62:55047 [1] read: 418 of1[protect/uart.htm] 'ESP8266:0123456789' GET f[/protect/uart.htm] [ovl=tcp_client.ovl]<\r><\n>
head[201]:200 send: of2[menu.inc] cf2 2692 ...<\r><\n>
И на некоторых веб страницах иногда начали появляться куски моего кода из проекта :(
Код:
    },
    "data": {
        "numb_dev": "1",
        "numb_reg": "203",
        "value": "0",
    },
    "crc": "0xFFFF",
}
<html><body style='margin:100px'><form method='post' action='/fsupload' enctype='multipart/form-data'><b>File Upload</b><p><input type='file' name='file' size=40> <input type='submit' value='Upload'></form></body></html>{
    "header": {
        "ser_numb": "0x0010",
        "date": "071216",
        "time": "180853",
        "prot_ver": "0x01",
        "pack_type": "0xFFF",
 
Последнее редактирование:

pvvx

Активный участник сообщества
И на некоторых веб страницах иногда начали появляться куски моего кода из проекта :(
Скорее всего не соответствует основная прошивка к оверлею. Не синхронизованы по версиям трансляции. Перетранслируйте и перепрошейте саму прошивку с оверлеем и не забудьте обновить оверлей в образе диска...
Методика проста:
  • Если меняете что в самом коде основной прошивки, то требуется замена и оверлеев.
  • Если меняете только оверлеи, то обновлять-перепрошивать основную прошивку не требуется.
Связано это с картой адресации любых переменных и функций-процедур для оверлея в основной прошивке. Иначе не получить доступа к любым функциям основной прошивки.
 

DorianGray

New member
Проблема в том, что поток данных, который идет на сервер через соединение TCP (ESP8266 TCP slave - соединение постоянно открыто), попадает как-то в web поток, и данные которые должны были отправляться по TCP вылазят на WEB страницу.:(
 

pvvx

Активный участник сообщества
Проблема в том, что поток данных, который идет на сервер через соединение TCP (ESP8266 TCP slave - соединение постоянно открыто), попадает как-то в web поток, и данные которые должны были отправляться по TCP вылазят на WEB страницу.:(
Написал - же не совпадает адресация у оверлея и основной прошивки.
 

ciuafm

New member
Добрый день.
Я хотел бы реализовать управление LED лентами (ШИМ 3 пин с циклической программой, задаваемой через http страничку) на esp8266. Мне хотелось бы попробовать использовать ваш web-server.
Я попробовал дергать ноги через web.cgi?gpio_set , но получается очень медленно - 10 циклов вкл-выкл в секунду. Причем изредка происходят зависания по 2-3 секунды.
В таком случае вероятно понадобиться писать специальный оверлей? Возможно у Вас уже есть готовый оверлей для программного ШИМ? Если нет, возможно Вам не трудно будет собрать его? Возможно ли сделать, чтобы после активации web-get оверлей работал неограниченно долго, вплоть до нового вызова этого-же оверлея?
Заранее спасибо,
Алекс.
 

pvvx

Активный участник сообщества
Я хотел бы реализовать управление LED лентами (ШИМ 3 пин с циклической программой, задаваемой через http страничку) на esp8266.
Когда-то давно, несколько лет назад, управление лентами было встроено, но потом выкинуто :)
Какой-то код, что нашел:
 

Вложения

ciuafm

New member
Когда-то давно, несколько лет назад, управление лентами было встроено, но потом выкинуто :)
Какой-то код, что нашел:
Спасибо за быстрый ответ.
К сожалению это код WS2812, а мне нужен аналоговый (ШИМ).
Попробую разобраться и переделать.
 
Сверху Снизу