• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Разработка ‘библиотеки’ малого 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, а мне нужен аналоговый (ШИМ).
Попробую разобраться и переделать.
 
Сверху Снизу