Базовый WEB сервер
- Войдите на сайт для отправки комментариев
Основная идея была очень простая: реализовать отдельный модуль который будет общаться с основной платой по UART и отрабатывать как WEB сервер, в случае если он зависнет - его сможет перезапустить основная плата, и если зависнет основная плата и можно будет удаленно сделать ребут.
Теперь функционал к которому я стремлюсь
1. Все функциональные страницы сделаны в виде нормальных файлов и лежат на флеше, то есть внешний вид можно отлаживать на любом стандартном WEB сервере запущенном на локальном компьютере. (исключение является сборка Ajax ответа)
2. поддержка основных сервисных страниц (404 и еще некоторых)
3. многопоточность (минимум на 3 одновременных сессии с разных компьютеров)
4. некая "авторизация", с учетом того, что все-же это только для внутренней сети, то довольно упрощенная.
собственно сам проект выложу в первом посте (по сколько его можно менять и добавлять что-то)
Проект тестировался на ESP-01s
Начну с WEB морды, выглядит пока так
файл params.h
файл index.html
файл main.css
файл main.js
файл setup.ini
файлы картинок пока не буду выкладывать, если кому будет интересно - напишите
//минимум на 3 одновременных сессии с разных компьютеров)
но стр.24
// не более 5 клиентов
однако стр.25
#define MAX_SRV_CLIENTS 4
Так таки сколько выдержало тестирование?
А в остальном - детский сад.
Коннект с роутером живет типа вечно. А я давал ссылку почитать о проблеме. Соединение WiFi иногда просто разрывается, ну роутер ребутнули к примеру. Что будет?
012
передает в UART порт статус в формате
013
<status=OK>, или <status=E1>
Не верю, в стр.59,73 и т.д. совсем другое написано. Определись таки зачем uart: для связи с второй платой или вывода отладки.
701
unsigned
long
time_pause(unsigned
long
tlo, unsigned
long
tln) {
702
if
(tlo <= tln) {
703
return
(tln - tlo);
704
}
else
{
705
return
(4294967295 - tln + tlo);
706
}
707
}
Миллис переполняется? Как мило)))
Про концепцию двух взаимно ребутящихся устройств. Увы, тоже известные грабли. Ребуты могут приходить в любой момент в т.ч. во время записи в энергонезависимую память. При этом инфа бьется и все валится. Надо софт без глюков писать, а не взаимными ребутами развлекатся.
1. в библиотеке есть ограничение на 5 конектов, его можно расширить, но лично мне это не очень нужно. MAX_SRV_CLIENTS=4 я сделал для того, что бы зарезервировать пятый конект на очистку входящего буфера, хотя наверно можно и не делать, но я сделал. Кроме того я тестировал именно множественное подключение
генерил 20 подключений с разных портов, при этом работало стабильно 4 браузера но за счет локальных кешей, как только запускал большие скачки (например страница в параллель грузит 3 файла JS+CSS+HTML) то библиотека сама создает на каждую скачку отдельный клиентский сеанс (клиент один а сеансов я видел до 3х шт) вот в таком режиме 2 браузера работали нормально, третий уже мог выдавать ошибки.
то есть при работе с клиентским кешем (когда изначально прогружают в разное время) хорошо работает на 4х разных машинах, если без кеша - только на 2х
2. >>>Коннект с роутером живет типа вечно.
не вечно, он рубится но потом сам востанавливается (роутером), про ребут роутера - спасибо за замечание, надо будет учесть. Конечно я не испытывал на "дальняк", максимум это на ночь оставлял с записью статистики на клиенте.
3. С UART - да пока не доделал, вернее пока он только на прием работает
4. >>>Миллис переполняется?
мне уже писали много раз, что это лишнее, но я сторонник старой школы, и обработку переполнения отработаю лучше явным образом
5. про ребут в момент записи ERROM - спасибо, возьму на заметку
6. про детский сад, в целом согласен - но у меня пока задача а-ля "тестовый велосипед"
7. просьба прокомментировать подсчет "загружености" (переменная "res_time_loop_sum"), сделал "по наитию", без какой либо теоретической базы.
ps
Вы не поверите чего иногда можно найти в промышленных устройствах на nix :) , в том году ковырял NAS от компании ZUXEL там столько рудиментов от других устройств, что вообще странно как он работает ....
4. Мое дело предупредить. На форуме тут жестко пинают за такое и не зря. Поищи темы, почитай. Там все сто раз разжевано. Еще раз повторюсь, больше читай форум - меньше граблей будет. И про ESP это тоже в полной мере, сервера на нем, ну кто во что гаразд, уже много лет лабают. И много шишек набито. Зачем повторятся.
7. Мысль верная, контролировать надо. Но 5мсек - это целая вечность для МК на 80МГц. Хотя именно веб-сервер в плане быстроты отклика и не критично. Там, где критично, там иногда даже гистограммы собираю. Прямо в "обертке" для миллис.
Если просто отдавать страницы - думаю это лишнее. Если вдруг через веб управлять и быстродействие требуется, тогда уже может потребоваться. Для такого WebSocket хорош.