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

Прошивка TCP2UART переходника с настройкой по Web

mcmega

Member
Скажите, кто нибудь в Web добавлял страницу с отображением доступных сетей? Типа страница сканирования.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Скажите, кто нибудь в Web добавлял страницу с отображением доступных сетей? Типа страница сканирования.
Нет. У меня в Web стоит время ожидания до закрытия соединения 5 сек, а этого может не хватить для простого вывода в HTML по ожиданию опроса, как это делают в Lua, да и такой подход не верен. По тому надо писать выдачу XML и опрашивать на AJAX готовность данных.
Делается это всё элементарно. Причина почему нет указана тут: http://esp8266.ru/forum/threads/raz...go-webservera-na-esp8266.56/page-18#post-3922
 

okan_vitaliy

New member
Уважаемый PVVX !!! Я в диком восторге от Вашей прошивки. Это просто удар по дикому западу. Огромное Вам спасибо за Вашу работу, можно представить сколько у Вас на это ушло времени. Уже второй день мучаю прошивку и столкнулся с одной маленькой, но очень неприятной проблемой. Когда на телефоне или планшете с помощью программы ez-gui multiwii открываю соединение, то все работает. Затем ложу тело в спячку и через несколько секунд включаю, то все работает. Если через несколько минут включаю, то программа пишет, что соединение потеряно и нужно пересоединиться. Но повторно соединиться не удается. Полностью выключаю телефон или планшет и перегружаю. Результата никакого. Вебсервер все время работает и показывает, что соединение по уарту открыто. Короче соединение не пропадает при отключенном телефоне . Помогает лишь снятие питания с модуля. Поэтому вопрос - это так должно быть или это баг. Если так должно быть может Вы в вебсервере сделаете опцию принудительного сброса соединения по уарту. Заранее благодарю.
PS. Изменяя номер тсп порта для уарта и сохраняя соединение сбрасывается и потом восстановив старый адрес можно опять открывать порт. Так не очень удобно делать, когда модуль установлен на коптере или самолете, хотелось хоть бы кнопочку для сброса соединения.
 
Последнее редактирование:

pvvx

Активный участник сообщества
можно представить сколько у Вас на это ушло времени.
Не много, т.к. дописывалось кусами и кое-как. И примером письма на СИ это не является - я не проргаммист и культурному описанию на СИ или C++ не обучен и не хочу - для этого есть программисты. :)

Уже второй день мучаю прошивку и столкнулся с одной маленькой, но очень неприятной проблемой. Когда на телефоне или планшете с помощью программы ez-gui multiwii открываю соединение, то все работает. Затем ложу тело в спячку и через несколько секунд включаю, то все работает. Если через несколько минут включаю, то программа пишет, что соединение потеряно и нужно пересоединиться. Но повторно соединиться не удается.
Это связано с самим модулем ESP8266 и всей сетью. После долгой паузы, первый запрос имеет длительный, назовем "пинг".
А то что соединение разрывает телефон, уходя в спячку, решается закрытием соединения и повторным открытием при просыпании. Протоколам это не мешает. Открывайте соединение когда приложение активно и закрывайте, когда не требуется коммуникация.
Вебсервер все время работает и показывает, что соединение по уарту открыто.
У него нет таймаутов до передачи первого байта при соединении и ожидания следующего. При установке таймаутов получаем не туннель, а что-то другое. Если вам нужны таймауты на закрытие соединения - вставьте в СИ, в tcp_term_init(uint16 portn)
там счас так:
p->time_wait_rec = 0; // вечное ожидание
p->time_wait_cls = 0; // вечное ожидание
Укажите время в секундах, до 65535 сек. Можно сделать эти переменные и в 32 бита, изменив в заголовке struct t_TCP_SERV_CFG одновременно и у recv_check в t_TCP_SERV_CONN.
uint16 time_wait_rec; // время (сек) ожидания запроса (передачи пакета) от клиента, до авто-закрытия соединения, по умолчанию TCP_SRV_RECV_WAIT сек .
uint16 time_wait_cls; // время (сек) до авто-закрытия соединения после приема или передачи, по умолчанию TCP_SRV_END_WAIT сек.
и uint16 recv_check; // счет тиков соединения в tcpsrv_poll

Если соединение открыто, то его необходимо закрыть по протоколу TCP, а не бросать. Если бросили, то можно закрыть через HTTP - как раз тем что вы описываете далее - передав команду установки номера порта в нуль и далее вернуть в необходимый.

Для Web сервера эти времена меняются ~web_twrec=x~ и ~web_twcls=x~, но не сохраняются по сбросу питания, т.к. их изменять может быть необходимо только разово, для специфических HTML приложений... и они влияют на все Web соединения.
Могу вставить аналогичное и для TCP-UART в следующей версии...
 
Последнее редактирование:

okan_vitaliy

New member
Для Web сервера эти времена меняются ~web_twrec=x~ и ~web_twcls=x~, но не сохраняются по сбросу питания, т.к. их изменять может быть необходимо только разово, для специфических HTML приложений.. .
Могу вставить аналогичное и для TCP-UART в следующей версии...
Буду ждать с нетерпением изменений в следующей версии. И если есть возможность добавьте плиз кнопочку принудительного закрытия соединения. А то при плохой связи соединение физически прервется, а стек будет думать, что соединение еще активно. По идее должна быть где то проверка на наличие физического соединения. Ну типа как в юсб, когда выдергивается само устройство, то программа видет, что физически устройства нет и закрывает порт. По крайней мере я так когда то делал и винда не подвисала и программа потом сама могла при подключении восстановить соединение. В тсп я не сильно понимаю, но думаю аналогичный механизм там должен быть.
 

pvvx

Активный участник сообщества
По идее должна быть где то проверка на наличие физического соединения.
Это не предусмотрено в простой работе с TCP. Т.е. вы не сможете этим воспользоваться в приложениях выше уровнем, чем сам драйвер TCP.
 

FGX

Member
Добрый день. А в MIT App Inventor 2 есть возможность подключения к TCP?
И еще вопрос, чтобы был законченный продукт нам же нужно иногда соединить два ESP модуля между собой, чтобы получился как бы удлинитель без участия ПК или еще кого шипко умного, но ESP только умеет создавать порт, а подключаться он не умеет, т.е. я могу данные с UART передавать только на комп... или ставить на второй мк модуль с AT прошивкой и подключаться к порту, что не совсем удобно, однобоко как-то выходит. Эта проблема нерешаема в принципе или просто до этого еще руки не дошли?
 

pvvx

Активный участник сообщества
Добрый день. А в MIT App Inventor 2 есть возможность подключения к TCP?
А посмотрите - он же online и требует только google disk (регистрацию)

И еще вопрос, чтобы был законченный продукт нам же нужно иногда соединить два ESP модуля между собой, чтобы получился как бы удлинитель без участия ПК или еще кого шипко умного, но ESP только умеет создавать порт, а подключаться он не умеет, т.е. я могу данные с UART передавать только на комп... или ставить на второй мк модуль с AT прошивкой и подключаться к порту, что не совсем удобно, однобоко как-то выходит. Эта проблема нерешаема в принципе или просто до этого еще руки не дошли?
В ней существует беда "от мало памяти". Комп может держать буфера, а с двумя ESP, да ещё и на разных скоростях UART у нас буфер ограничен их размером TCP стека (до 4 кило). Вторая причина - это то, что тогда данная прошивка убьет всех конкурентов. По этой совокупности и не реализовано. (Политика очень простая - не хотите покупать готовые решения - извольте хоть немного поработать сами и дописать необходимую часть для себя.)
 

pvvx

Активный участник сообщества
По просьбе okan_vitaliy в 0.1.7 встроены такие переменные для WEB и написания своих страниц:

Для текущего соединения TCP-UART:


tcp_disconnect=x – закрыть текущее соединение TCP2UART, где x – любой символ

~tcp_twrec~ - возвращает время в сек стартового ожидания приема/передачи первого пакета, до авто-закрытия соединения. =0 –> без ограничения.
tcp_twrec=x установить это время для текущего соединения TCP2UART

~tcp_twcls~ - возвращает время в сек до авто-закрытия соединения после приема или передачи последнего пакета. =0 –> без ограничения.
tcp_twcls=x установить это время для текущего соединения TCP2UART

Для конфигурации TCP-UART:

~cfg_tcp_twrec~ - возвращает время в сек стартового ожидания приема/передачи первого пакета, до авто-закрытия соединения. =0 –> без ограничения.
cfg_tcp_twrec=x установить это время для текущего соединения TCP2UART и последующей конфигурации*.

~cfg_tcp_twcls~ - возвращает время в сек до авто-закрытия соединения после приема или передачи последнего пакета. =0 –> без ограничения.
cfg_tcp_twcls=x установить это время для текущего соединения TCP2UART и последующей конфигурации*.

(*) сохранение конфигурации в памяти модуля: cfg_save=1
Проверяйте.
Полный список переменных уже очень большой и его сложно описать :)

Изменены базовые HTMl...
 

pvvx

Активный участник сообщества
Завтра протестю и отпишусь.
уже нашел ошибку в HTMl - не то вписал в установку порта WEB на странице Setup :) Скоро исправлю...
То было открыть ещё один порт для Web :)
web_port=x - открыть новый порт
web_close=x - закрыть Web с номером порта x
А надо было cfg_web_port=x и ~cfg_web_port~ для чтения номера порта...
 
Последнее редактирование:

mcmega

Member
Было бы неплохо добавить функцию восстановления заводских настроек без сброса питания (установить режим Клиент + Точка), а при замыкании GPIOn в течении 5 секунд на землю.
Скажем если модуль стоит в выключателе не очень каждый раз разбирать и автоматом щёлкать, проще кнопку сброса впаять. К тому же лишнее излучение дома совершенно не к чему, настроил подключение, проверил, что модуль зацепился с сетью и перевел в режим клиента.
 

FGX

Member
Добрый день, а саму прошивку можно только через прошивальщик обновлять? Вопрос снят, обновил через прошивальщик. В версии 1.0.8 пропали вкладки отладка с графиками. Если загрузить WEBFiles.bin старый то они появятся, т.е. поддержка осталась в самой прошивке?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Если загрузить WEBFiles.bin старый то они появятся, т.е. поддержка осталась в самой прошивке?
В "пакете" есть каталог с полной демкой и файлами WEBFiles и make_webfs.bat, создающий новую версию WEBFiles.bin...
Базовые файлы диска для TCP2UART находятся в папке WEBFilesTCP2UART и преобразуются make_webfs_tcp2uart.bat или PVFS2.exe в WEBFiles.bin.
Расширенная версия - это только для демонстрации как и что писать в своих HTM для вашего проекта на основе данного Web.
 

FGX

Member
В "пакете" есть каталог с полной демкой и файлами WEBFiles и make_webfs.bat.
Спасибо, работает, просто уже привык к тому меню и графики красивые жалко было) Еще такой вопрос, wav файл не хочет открывать саундфордж, хотя в редакторе я вижу заголовок и все нормально вроде(если скопировать заголовок полностью с рабочей wav, то открывает, но неправильно, так как там и битрейт чужой получается и каналы и размер..) Это просто саундфордж выделывается, чем вы открываете его?
 

pvvx

Активный участник сообщества
Спасибо, работает, просто уже привык к тому меню и графики красивые жалко было)
Дык всё осталось, теперь просто два варианта для создания WEBFiles.bin - "простой TCP2UART" и "демонстрационный проект".
adc.gif
Про параметры интрасети в Вынь и обращение по имени, вместо IP, плюс поведение EI указано тут http://esp8266.ru/forum/threads/raz...go-webservera-na-esp8266.56/page-18#post-4077

Еще такой вопрос, wav файл не хочет открывать саундфордж, хотя в редакторе я вижу заголовок и все нормально вроде(если скопировать заголовок полностью с рабочей wav, то открывает, но неправильно, так как там и битрейт чужой получается и каналы и размер..) Это просто саундфордж выделывается, чем вы открываете его?
Заголовок там нормальный, стандартный и отклонений нет. Если ваш "саундфордж" его не понимает, то тут я ничем не могу помочь. Любой проигрыватель его ест.
Есть одно примечание, когда в первый раз создаете WEBFiles.bin программой PVFS2.exe, то в ней надо дополнить список расширений файлов и/или названий файлов подлежащих "парсингу" файлами с расширением *.wav. Она запоминает установки. Если не дополнили, то wav генерироваться не будет и будет содержать 10 байт, равных: ~test_adc~. В случае использования make_web.... .bat это не требуется - там это разово передается в параметрах и не запоминается.
 

FGX

Member
Добрый день. Еще такой вопрос, я представляю ответ, но все же спрошу. Есть ли возможность подключения к серверу ESP и к его TCP порту с данными не из локальной сети? Может быть через какой-то сторонний ресурс или если подключить статичный ip адрес?
 

Victor

Administrator
Команда форума
Добрый день. Еще такой вопрос, я представляю ответ, но все же спрошу. Есть ли возможность подключения к серверу ESP и к его TCP порту с данными не из локальной сети? Может быть через какой-то сторонний ресурс или если подключить статичный ip адрес?
на домашнем роутере можно поднять Dynamic DNS (все еще есть бесплатные сервисы, предлагающие такую услугу), если у вас на нем динамический внешний адрес и, если роутер позволяет (а новые почти все позволяют), прокинуть 80 порт во внешний мир. Т.е. вы будете из интернета заходить браузером http://100.100.100.100 или http://esp8266.домен_дднс.org а попадать будете на вебсервер ESP8266. Однако это очень небезопасный подход, да и вебсервер ESP8266 просто не осилить весь тот трафик, который приходит из сети.
 

FGX

Member
Нашел сервис https://thingspeak.com, можно через него выводить немного информации и смотреть ее через интернет и мобилку, правда реализовать это в этой прошивке не получиться...
Вообще интересная задача -это потоковая передача на мобилу данных с УАРТА по wifi, чтобы на мобиле рисовался график, в общем сделать простенький осциллограф с удаленным экраном.
Т.к. веб сервер уже умеет выводить график со своего АЦП, то может можно выводить график именно из данных, которые приходят по УАРТУ через будущий web soket. Например в 8-ми битном режиме, каждый байт -новый отсчет. Тогда со стороннего мк трамбуем данные с АЦП в УАРТ и смотрим через сервер график. Конечно с настройками шкалы тут будет не очень, но можно сделать настройку цены деления, типа 0h00=-310В, 0hFF=310V и все, а количество выборок в секунду настаиваем в мк который делает измерения, т.е. тоже задействуем будущий web soket и шлем настройки измеряющему МК. Такая интересная идея сделать монитор каких-либо внешних датчиков, жаль я в web программировании совсем не секу. Да и приложение осциллографа, наверное, лучше писать в среде программирования, чтобы там синхронизация была. А то переменка будет прыгать по графику и ничего не разберешь. В принципе на ПК уже сейчас это можно реализовать...но на мобилке более мобильно, а веб реализация еще и универсальнее. В общем это так, мои мечты в слух, прошу сильно не пинать.
 
Сверху Снизу