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