Скрипт на луне для ESP8266. Мониторинг, управление и обновление ПО по WiFi.
- Войдите на сайт для отправки комментариев
Чт, 02/02/2017 - 21:12
Попалась мне темка, дома организовать очень простенькое управление устройством - 2-3 дискретных выход, возможно вход один. В перспективе не сложней одного ШИМ. Разумеется управлять с мобильника или планшета. Прямо из броузера проще всего. Подумалось о ESP и это как бы намекнуло, что и скриптик управления тоже можна заливать по тому же каналу по WiFi. Это очень кстати, т.к. разбирать для заливки не хочется совсем, а выводить спецом разем для этого практически не возможно. В общем попробовал и написал скетч, который это делает, его сейчас и выложу, если не запретит тот, кто всегда запрещает ;)
Тестился с на ESP8266-01 с NodeMCU 0.9.6 build 20150627 powered by Lua 5.1.4. Броузер Опера 36.0.2130.80 , но это думаю не принципиально. Код.
Код с пылу- с жару, сегодня дотестил. Но вроде работает, цикл обмена в 1 сек держит и софт обновляет ))
Теперь о проблемах.
Скрипт большой, очень большой. Больше в девайс одним куском не лезет. Даже попытка вынести айпишник в строку в начале кода дает not enough memory. Тоже самое при попытке запуска после софт-ресета, только хард;) И после обновления софта тоже ребутнуть. По ходу вопрос 1.Кто знает более экономную версию прошивки?
При разработке пробовал отправлять сообщения по инициативе ESP, но столкнулся с проблемой. Откуда отправлять? Из обработчика периодического по таймер глючит сильно, как при несинхронизации потока. Делать из вечного цикла, как бы некрвсиво, а любой делей в нем намертво убивает процесс обмена - в ТСP канале сразу куча ошибок, повторов передач. Вопрос 2. Кто то делал отправку сообщения по TCP не из обработчиков серверного сокета? Как?
Вобще там Send - источник гемора. В начале пока ответ на GET HTML укладывался в один TCP пакет, у меня 1514 байт, все работало без вопросов. По мере роста - при превышении, отправка одним куском выдавало ошибки. Побил на два куска, отправляемые сразу друг за другом. Работает, пока не доросло до 2*1514байт ))) Делить на 3 отправляемых подряд не помогает. Повесил отправку не первого куска в обработчик sent. Сново все работает, на в 8КБ проверил. Вопрос 3. Я правильно делаю или есть какой другой путь? Думал все. Нет не все. Когда вызовов Send чтало много мелких, и при обмене "тудысюды" раз в сек, снова начал подглючивать, отправляемые данные просто пропадали в, канале их нет. Начал обединять по типу Send(a) Send(b) Send(c) заменил на Send(a..b..c). Вроде попустило. Но не уверен. Вопрос 3 Это че за фигня с net.socket:send()?
Тепер самый прикол. Используются 2 порта, 80 и 5000. 80 открывается, но обработчика на 80 нет ))) Его запросы приходят на 5000, похоже на последний открытый ))) Вопрос 4. Че за фигня, эту багу ктото встречал, её фиксили?
С этой бы багой еще можна было бы жить, если б не запрос favicon.ico посреди обмена по WebSocket(( Вопрос 5 Как в ответе на GET HTML сделать так чтоб сраную favicon.ico не запрашивало? Т.е. можна как то ответить на запрос страницы так, чтоб про икону не спрашивало? Такое возможно? С учетом этого рекомендую открывать сокет секунд через 15 после открытия формы.
С учетом того, что скрипт "под завязку" в памяти (потому ни коментов ни форматирования нет и не будет), далее я собираюсь его разбить на 3-5 частей, как раз по логике там выходит. Соответственно уже одним куском не будет, не выложеш запросто и это собственно побудило опубликовать "как есть", т.к. если кому интересно - то стартонуть с этого проще.