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

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

pvvx

Активный участник сообщества
Не закрывает TCP и не сбрасывается:
TX-RX-1000bytes_no_flow.gif
ESP-12, 9600 baud, No Flow и всё остальное как писали + передачи по 1000 байт из txt файла во все стороны.
У вас возможно на роутере стоит обновление всякой фигни (WPA ключей и т.д) на WiFi в период менее пары минут и китай-WiFi софт это плохо переносит.
У меня такие настройки на роутере, с которым тестировал:
WiFi-route.gif
 
Последнее редактирование:

aloika

Active member
У вас возможно на роутере стоит обновление всякой фигни
Вообще без роутера, модуль в режиме точки доступа...
Попробую седня, если получится. Может, у меня страничка эта какая-нибудь особенная... Или модуль дохловатый. Надо другой попробовать тоже.
 

pvvx

Активный участник сообщества
Вообще без роутера, модуль в режиме точки доступа...
При тестах у меня соединение с модулем делается и через роутер и через "WiFi свисток". Т.е. ST модуля идет через роутер, а AP - через адаптер. Сразу два ip у WEB модуля и опрашиваю одновременно :) А в указанном ранее соединении двух модулей ESP8266 - без посредников, тоже ничего не падает, но есть кривости при соединении: бывает длинный реконнект, если соединение разорвано по тайм-ауту... пока модули сообразят и синхронизируются (задержка пока второй закроет оборванное соединение по своему тайм-ауту, а другой запросит новое соединение).
Счас у клиента TCP2UART стоит фиксированный перезапрос через 5 сек в расчете на соединение через тормозные GSM сети. Потом может вынесу этот параметр в настройки...
Приветствуется описание простого механизма синхронизации при разрывах соединений. :)
 
Последнее редактирование:

aloika

Active member
На всякий случай приведу схему подключения, может в ней что не так.

Без имени-1.png

Диод - это светодиод. Вниз пошел UART.
Питание получаю от LD1086V33 в корпусе TO220 на радиаторе, т.к. вход 12 В и рассеиваемая мощность около 0,7 Вт. Потом планирую ST1S10 использовать.
 

aloika

Active member
pvvx, ага, вычислил я кое-что тут:
если лить в уарт быстро, то действительно все работает.

А вот если по 10 байт с паузой в 240 мс, то валится с открытой штатной страничкой GPIO. Не более 8000 символов принимает и валится. На скриншоте вот ровно на 1000 упало.

Без имени-2.png

(Что еще исключил - модуль другой взял, благо они у меня на разъеме, та же история. И сетевуха у меня в компе дома глючная была, заменил, теперь стало одинаково (не) работать и дома, и на работе.)
 

pvvx

Активный участник сообщества
За 240 мс можно закрыть и открыть новое соединение :)

-----
Отковырял ещё 16 килобайт IRAM в чипе. Только не знаю пока куда их девать :)
Web-у и 32к IRAM хватает, а теперь можно и 48к включить:
Код:
Simple WEB version: 0.1.3
OpenLoaderSDK v1.2
Flash Header:
Number of segments: 3
SPI Flash Interface: QIO
SPI CLK: 80MHz
Flash size: 512K
Entry point: 0x40100078
Segment 1: offset: 0x40100000, size: 20912
Segment 2: offset: 0x3ffe8000, size: 2552
Segment 3: offset: 0x3ffe8a00, size: 4396
Real Flash size: 524288 bytes
Found free IRAM: base:0x401051b0, size:28240 bytes
Позже попробую пропатчить оф.либы к MP3 прошивке для увеличения буфера...
 
Последнее редактирование:

mcmega

Member
Может немного не по теме, но скажите пожалуйста, я хочу добавить кнопки в Web интерфейс:
1. При нажатии на кнопки в UART модуля должно выдаться соответствующие символы, как это сделать?
2. Как принять данные, которые приходят в UART модуля, куда они отправляются в сети?
 
Последнее редактирование:

mcmega

Member
Легко! Посмотрите пожалуйста "прокладку" Это далеко не идеальный, но рабочий проект.
Но мне нужно именно на этой прошивке, хочу сделать чтоб через Web можно было управлять МК по UART. В этой прошивке очень удобно, что есть сканер сетей и многое другое. А у меня точка доступа меняться будет постоянно, переносное устройство.
 
Последнее редактирование:

Andy Korg

Moderator
Команда форума
Но мне нужно именно на этой прошивке
Дык на ней и сделано. В файлы разбирающие web-переменные добавляете пару строк, а в проект добавляете файлы custom_uart и custom_web вроде. (если не разберетесь распишу подробнее) и создаете свои файлы со своими переменными. Вот собственно и все.
 

aloika

Active member
Я это ещё не смотрел - на такие эксперименты надо много времени. Может ничего не "падает".
Падает, чесслово! Да и времени много не надо, чтобы увидеть эффект - в течение 4-х минут гарантированно падает.

Далее мои предположения (может все и не так):

Это как-то связано с прерыванием UART. Я тут делал штуку, типа той, что Andy Korg сделал, про часы. И все пытался это прерывание использовать. У меня не получилось стабильной работы, используя это прерывание, хотя я все делал, как и у Вас, pvvx, в сборке. В конечном итоге плюнул на это прерывание, отключил его, завел таймер и по таймеру все считываю из UART-а. И все заработало стабильно. В моем случае это приемлемо, потому как я знаю с какой периодичностью МК шлет данные, сколько их и пр., да и передавать данные мне никуда дальше не надо - только распарсить и сохранить результат. Потом уже глянул у Andy Korg - а у него по сути также и сделано. Надо было раньше посмотреть и не мучаться.

Вообще, вот это прерывание UART_RXFIFO_FULL_INT_ENA - оно когда должно срабатывать по идее? При заполнении буфера? А почему оно у pvvx откомментировано как "по приему символа"? (и работает вроде как по приему символа, пока не падает).

И еще: у Andy Korg, если дефайны раскрыть, вычитывание буфера UART производится так:

while (((READ_PERI_REG(UART_STATUS(UART0)) >> UART_RXFIFO_CNT_S) & UART_RXFIFO_CNT)) { .... RxByte = READ_PERI_REG(UART_FIFO(UART0)) ; .... }

а у меня сейчас так (но это не я придумал, есс-но, скопипастил откуда-то):

while ((READ_PERI_REG(UART_STATUS(UART0))) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S)) {... uint8 ch= READ_PERI_REG(UART_FIFO(UART0)); .... }

а еще есть вариант (в новой сборке от pvvx):

while ((UART0_STATUS >> UART_RXFIFO_CNT_S) & UART_RXFIFO_CNT) {
uint8 ch=UART0_FIFO; .... }

Первый и третий вариант - это одно и то же?

Просто UART_RXFIFO_CNT_S - это 0, поэтому первая и вторая запись работаю в этом частном случае одинаково. Но правильно-то как?
 

pvvx

Активный участник сообщества
FO_FULL_INT_ENA - оно когда должно срабатывать по идее? При заполнении буфера? А почему оно у pvvx откомментировано как "по приему символа"? (и работает вроде как по приему символа, пока не падает).
По тому, что стоит кол-во символов UART_RXFIFO_FULL_THRHD равное 1. Т.е. при 1 символе в FIFO, оно считается заполненным. https://github.com/pvvx/esp8266web/blob/master/app/web/uart_tcp.c#L204

Первый и третий вариант - это одно и то же?
Одно и то-же, но размер генерируемого кода разный.
 
Сверху Снизу