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

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

Что-то подобное готовиться, но ещё далеко. Вам думаю не подойдет, т.к. это будет Modbus сервер на RS-485, а Web будет отображать/запрашивать значения у устройств на Modbus, но по типу через ОПС-сервер...
Мне бы модбас кстати подошел бы! У меня дома сеть будет "модбас рту" и нужно управлять и опрашивать приборы по модбас. Но я это хотел сделать главным контроллером (мастером) через веб морду.
 

pvvx

Активный участник сообщества
А что в этом файле содержится?
web.cgi - это специальный виртуальный файл. Данных в нем нет. Можно сказать, что его длина = 0 байт. Используется для GET/POST и т.д. запросов к WEB.
По умолчанию он выводит встроенную в код строку:
HTTPdefault : "<html><h3>ESP8266 Built-in Web server <sup><i>&copy</i></sup></h3></html>"
В Web существует 5 зарезервированных внутренних (виртуальных) файла, не имеющихся на диске, но доступных всегда. Они (их номера от 250 до 255) используются для обработки разных спец. запросов. А т.к. внутренние номера открытых файлов пока хранятся в байте, то имеем ограничение в 255-5 = 250 максимально открытых файла (и максимально присутствующих на диске). Для большинства задач ограничения в 250 файлов не сказываются, а это сделано для уменьшения потребления памяти на заголовки (структуры описаний открытых фалов и прочего)...
"fsupload" один из спец.файлов доступных всегда. Используется для загрузки данных во flash и т.д...
Пока задействованы следующие номерки:
Код:
typedef enum
{
    WEBFS_MAX_HANDLE = 251,
    WEBFS_NODISK_HANDLE,
    WEBFS_WEBCGI_HANDLE,
    WEBFS_UPLOAD_HANDLE
} WEBFS_NUM_HANDLE;
 
Последнее редактирование:

pvvx

Активный участник сообщества
В последних SDK, вроде с версии 1.2.0, появился странный глюк:
Не всегда срабатывает установка режима wifi-sleep (NONE, LIGHT, MODEM).
Сильно зависит от многих факторов - последовательности установки опций WiFi и если сбилось что-то в китай-части SDK, то при старте модуля режим WiFi-sleep не устанавливается. Т.е. устанавливается частично. К примеру в режиме LIGHT китайцы так и не починили работу модуля. Проявляется в том, что большие файлы или длинные данные LwIP передать не может. Данная опция тупо увеличивает времена таймеров в сотню раз, по которым LwIP производит обслуживание потока. По умолчанию, для нормальной работы LwIP использует таймер на 25ms, а они ставят на тысячи, чтобы во время паузы вызовов таймера остановить CPU. Естественно у него возникают глюки...
Обходной маневр нормальной установки режимов wifi-sleep пока не найден, да и прошлый "патч" не проходит... Намудрили что-то китайцы с этим...
Вообще wifi-sleep (LIGHT, MODEM) в последних SDK работает только для режима WiFi STATION (тоже странность). Установка wifi-sleep отрабатывает если произвести принудительную смену режима из AP+ST в ST. Иначе, даже при старте с прошлыми запомненными значениями установок в китай-части SDK режим wifi-sleep не включается (это происходит на любых прошивках, хоть их IOT, если что-то там в китай-сохранениях сбилось). Включается глюк не дающий передавать много данных, а потребление не падает. Такая фича.... И таких глюков в китай-части SDK ещё сотни :( 2 явных глюка (вызывает протектед), связанных с wifi_set_opmode() (похоже она-же и завязана с установкой wifi-sleep) им отправлено давно...
В своих частях ещё можно что-то исправить, а в китай - нет и главное, что исправлять и проверять они ничего не хотят, а только пиарятся со своей программой для "Баунти" (для буратин?) :(
 
Последнее редактирование:
Уважаемый Pvvx!
Пытаюсь прочитать данные из UART0 , и никак не получается...

Так отображается:
Безымянный.png

Код такой:
Код:
<p class="center">
Data READ: ~start=0x60000000~ ~start~=~xml_ram~ ~start~=~xml_ram~ ~start~=~xml_ram~ ~start~=~xml_ram~ Password: ~wifi_ap_psw~<br>
</p></div>
Как получить строку символов АСКИ2 вместо HEX ?
 

pvvx

Активный участник сообщества
Пытаюсь прочитать данные из UART0 , и никак не получается...
Ну не приспособлено это.
~xml_ram~ при каждом чтении 32-х бит увеличивает адрес на +4.
Как получить строку символов АСКИ2 вместо HEX ?
На javascript...

Поставьте эмуляцию COM порта на windows и пишите/читайте UART.
Работает почти любой
К примеру:
http://www.westermo.com/web/web_en_idc_com.nsf/AllDocuments/8543F0EC9ABBAC8CC125789300337F04
Внизу страницы Software(2), Westermo COM-port re-director.

Со всеми опция есть пакет Tibbo...
 
Последнее редактирование:
Ну не приспособлено это.
~xml_ram~ при каждом чтении 32-х бит увеличивает адрес на +4.
Я это заметил.. А нельзя поправить? В принципе - не страшно . Я могу в МК подпилить отправку данных.
Дайте пожалуйста простой пример , как это можно сделать... Буду Вам очень благодарен.
 

pvvx

Активный участник сообщества
Дайте пожалуйста простой пример , как это можно сделать... Буду Вам очень благодарен.
Уже много раз сказано - чтение/запись UART на HTTP странице не будет, т.к. каждый раз свой случай. Пишите свой протокол и вставляете в исходники. Стандартного не дано.
 
Уже много раз сказано - чтение/запись UART на HTTP странице не будет, т.к. каждый раз свой случай. Пишите свой протокол и вставляете в исходники. Стандартного не дано.
ок, не вопрос.
Тогда возникает еще вопросик . Только не бейте .. :) знаю что уже надоел.
Зашел на веб страничку чтения данных, вот сюда: http://192.168.4.1/protect/hexdmpb.htm
И наблюдаю такую картину. Данные отображаются неверно . Проверяю с адреса 0х60000000 , предварительно отправив строку в юарт... символы отображаются неверно. Выводится так:
отправляю: "test_data"

вижу:
t....
обновил страницу:
e....
снова обновил страницу:
s....
снова обновил страницу:
t....
снова обновил страницу:
_....

браузер хром. Может в нем косяк?
 
Поставьте эмуляцию COM порта на windows и пишите/читайте UART.
Работает почти любой
К примеру:
http://www.westermo.com/web/web_en_idc_com.nsf/AllDocuments/8543F0EC9ABBAC8CC125789300337F04
Внизу страницы Software(2), Westermo COM-port re-director.

Со всеми опция есть пакет Tibbo...
Вы меня наверное неправильно поняли.. Я поставил уже терминал (terminal v1.9b - by Br@y)

Я хочу отображать на веб странице аски а не хекс
 
Уже много раз сказано - чтение/запись UART на HTTP странице не будет, т.к. каждый раз свой случай. Пишите свой протокол и вставляете в исходники. Стандартного не дано.
Уважаемый pvvx. Подскажите пожалуйста в каком файле идет обработка строки:
HTML:
'~start=0x60000000~ ~start~=~xml_ram~'
и
HTML:
'web.cgi?sys_ram0x60000000=0x46'
?
Я попробую подправить исходник под свои задачи.
Буду очень признателен вам за подсказку.
 

pvvx

Активный участник сообщества
Подскажите пожалуйста в каком файле идет обработка строки:
HTML:
'~start=0x60000000~ ~start~=~xml_ram~'
и
HTML:
'web.cgi?sys_ram0x60000000=0x46'
?
Я попробую подправить исходник под свои задачи.
В esp8266web\app\web\web_int_callbacks.c и esp8266web\app\web\web_int_vars.c
 

Vitaly

Member
чтобы время локально получать где-то нужно определять SNTP_GET_SERVERS_FROM_DHCP ?
отключит ли это обращение к внешним адресам?
 

pvvx

Активный участник сообщества
Планов поддерживать сервер полученный в dhcp нет?
у меня и свой dhcpserver.c, т.е. немного корректированный.
Они все из примеров идущих к офиц. LwIP
И SNTP IP получает из DHCP, а назначен:
[HASHTAG]#define[/HASHTAG] SNTP_SERVER_ADDRESS "pool.ntp.org"
Поставьте прямой IP и используйте ipaddr_aton(), чтобы определить является ли он IP строкой или именем.
Встройте переменную назначения sntp сервера в WEB и ... пользуйте :)
 
Последнее редактирование:

Vitaly

Member
И SNTP IP получает из DHCP
недопонял, как я вижу сейчас идет работа только с pool.ntp.org
из dhcp адрес не используется и/или не получается

что-либо про получение ntp из dhcp есть только в \app\sdklib\lwip\core\sntp.c
в app\web\sntp.c только резольв и работа с ntp
 

pvvx

Активный участник сообщества
недопонял, как я вижу сейчас идет работа только с pool.ntp.org
из dhcp адрес не используется и/или не получается

что-либо про получение ntp из dhcp есть только в \app\sdklib\lwip\core\sntp.c
в app\web\sntp.c только резольв и работа с ntp
А толку? Она всё равно [HASHTAG]#define[/HASHTAG] SNTP_GET_SERVERS_FROM_DHCP 0 :)
и процедуру
void dhcp_set_ntp_servers(u8_t num, ip_addr_t *server) никто не вызывает.

И вооще не понятно что вы хотите - описали бы сначала, а то гадать нет желания.

err = dns_gethostbyname(buf_sntp_server_addresses, &sntp_server_address, sntp_dns_found, NULL); - это и есть обращение к dns за IP.
 
Последнее редактирование:

Vitaly

Member
Понять используется адрес из dhcp или нет.
Из того что вижу получается, что адрес не получается и не используется.

Поскольку в себе не уверен, переспрашиваю.

В идеале конечно хочется чтобы при наличии адреса в dhcp в интернет модуль не ходил, интернета может и не быть.
Но пока хочу просто понимания ситуации.
 
Сверху Снизу