Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

ESP32-serial bridge
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=17200
Страница 1 от 2

Автор:  stefan63 [ Вто Мар 24, 2020 6:24 pm ]
Заглавие:  ESP32-serial bridge

Покрай вируса някак се захванах с ESP32 за нещо , което ми трябва.
Свалих Ардуино, питах Гугле как се почва,
краднах от Гитхъб , навързах 2 кита ESP32-PICO
https://store.comet.bg/Catalogue/Product/51155/ и я докарах донякъде
(В кода има някакви следи от блутут и ОТА, но не съм се
занимавал с тях).

Едната платка тръгва като AP и стартира 3 WiFi сърверa за трите физически кома.
Втората платка тръгва като STA и стартира 3 WiFi клиента към трите сървера на AP.
Не съм пробвал 3-те канала, само 2 - COM0 и COM1, предават и приемат на двете платки.

На второ четене нещата загрубяват, най-вече защото ми е мъгла в главата.
Когато рестартирам AP , клиентите се свързват отново - предполагам STA "зачиства" клиентите.
Когато изключа STA, сърверите в AP отказват да видят , че клиентите са отпаднали.
Когато рестартирам STA , Wifi-то се свързва към AP, клиентите не успяват да се свържат.

Когато по единия от терминалите, свързани към AP, опитам да предам нещо от клавиатурата -
опитът за предаване някак ресетва съответния сървер и след малко съответният клиент се закача.
През втория терминал се получава същото.

На практика излиза , че WiFiClient::connected() не може да ми покаже отпадане на
отпадане на връзката.
Моля за съвет и акъл.

Прикачени файлове:
ESP32-Serial-Bridge2.zip [65.36 KiB]
238 пъти

Автор:  gicho [ Вто Мар 24, 2020 7:48 pm ]
Заглавие:  Re: ESP32-serial bridge

Не съм гледал кода ти, но принципно можеш да ползваш събитията, генерирани от esp-то, например EVENT_SOFTAPMODE_STACONNECTED и EVENT_SOFTAPMODE_STADISCONNECTED.
Оттам нататък истината е keep-alive да правиш.

Edit: за справка може да погледнеш тук:
https://github.com/tonyp7/esp32-wifi-manager/blob/15cbd08bd28130e92893d881ef09d32f81acc3e0/src/wifi_manager.c

Автор:  TheWizard [ Вто Мар 24, 2020 7:57 pm ]
Заглавие:  Re: ESP32-serial bridge

WiFiClient::read/write не ти ли връща грешка?
щото socket FD се "скапва"....

Автор:  stefan63 [ Вто Мар 24, 2020 8:15 pm ]
Заглавие:  Re: ESP32-serial bridge

не го проверявам за грешка, но изглежда като се опитвам да пращам (в АП, Ком->сървер)
сърверът вижда грешката и се "самоАнулира". Вариант е по таймер да пускам някаква комбинация,
която да филтрирам и ползвам за хендшейкинг, но не ми харесва - надявам се да го има някак си
реализирано.
Опитах се да включа и лаптопа в тая мрежа...доста спорно..Wireshark показва някаква активност ..
но нищо смислено, поне за мене.

Нямам идея и пример как да търся състояние на сокета и съм забравил FD какво беше,
не виждам в хедърите "колбак" функционалност...

Автор:  TheWizard [ Вто Мар 24, 2020 10:06 pm ]
Заглавие:  Re: ESP32-serial bridge

ами редно е да ги проверяваш както и errno ... щото затова е return error :)
по принцип WiFiClient е class имплементация на lwip socket за ESP32
тези грешки и информация за lwip ги има из целия интернет
пример:
http://api.tst-sistemas.es/apitsmart-1. ... ebdfa9c7fe

Returns
Number of bytes sent
-1 - Failure .... а номера на истинската грешка е в errno

ако активираш лога на WiFiClient ще ти принтва и дебъг текста
https://github.com/espressif/arduino-es ... t.cpp#L392
https://github.com/espressif/arduino-es ... t.cpp#L436

Автор:  stefan63 [ Вто Мар 24, 2020 10:18 pm ]
Заглавие:  Re: ESP32-serial bridge

Разбирам какво казваш, не разбирам защо.
АP-Сърверът сам се ресетва , когато тръгна да натискам клавиши, а неговият клиент не е закачен след реконект на WiFi връзката откъм STA .
Моят въпрос е -при липса на серийни данни - как да следя за наличие/отпаддане на връзка, тоест да възстановя връзката -преди да са дошли данни за изпращане.

Автор:  TheWizard [ Вто Мар 24, 2020 10:18 pm ]
Заглавие:  Re: ESP32-serial bridge

а и виж gicho ко рече
WiFiGeneric има event call-баци за диконект...

Автор:  gicho [ Вто Мар 24, 2020 10:43 pm ]
Заглавие:  Re: ESP32-serial bridge

На ниво тцп има keep-alive (дето му викаш хендшейк-а). Само той може да се спаси от внезапно прецакана връзка - иначе правилното затваряне ще се индицира и ще е ясно за стека че тоя сокет (FD) не е ок.
Каква ти е генералната концепция за това нещо? Какво ще рече "wifi сървър" - това TCP сървър ли е, или нещо друго (http, ...)? Как събираш байтовете от уарт-а и кога ги пращаш - на време, на натрупан размер, при наличие на поне един?

Edit: погледнах кода, ползва ардуино-есп32. Ето пример как да ползваш евенти от вифи:
https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino

В ESP-IDF имаше примери за работа с уарта, които също са евент-базирани. Би трябвало да пасне на твоя дизайн.

edit: ей ги тук:
https://github.com/espressif/esp-idf/tree/master/examples/peripherals/uart

Автор:  stefan63 [ Вто Мар 24, 2020 11:26 pm ]
Заглавие:  Re: ESP32-serial bridge

Благодаря,Гичо,

Цитат:
На ниво тцп има keep-alive (дето му викаш хендшейк-а). Само той може да се спаси от внезапно прецакана връзка - иначе правилното затваряне ще се индицира и ще е ясно за стека че тоя сокет (FD) не е ок.

Намерих в библиотеките от Еспресиф нещо , за MQTT,базирано на Микрософт сокет библиотека :D - нещо съдържащо keep alive словосъчетанието.
Засега не гледам натам, искам нещо просто, примитивна замяна на сериен кабел, прозрачна,без АТ команди.
Тоя евент хандлер, от линка ти - не помага за случая, когато и двата адаптера са STA и са свързани през произволен АП.
Май без усложняване на сокетите не може да стане.

Засега май ще се ориентирам да поддържам сокета с периодични пакети.

=============
Най вероятно бъркам терминологията , но обектът WiFiserver е нещо като сокет сървер или
IPсървер, но не чак TCP сървер.

Мисля че с уартовете нямам проблем...поне логически.

Автор:  stefan63 [ Вто Мар 24, 2020 11:54 pm ]
Заглавие:  Re: ESP32-serial bridge

P.S. В оригинала има три сървера ,по един на уарт.
Работят като разклонител/обединител - до 4 клиента пращат към един уарт, данните от този уарт
се препращат към до 4 клиента.

Автор:  slav4o.com [ Сря Мар 25, 2020 12:22 am ]
Заглавие:  Re: ESP32-serial bridge

stefan63 написа:
примитивна замяна на сериен кабел, прозрачна

Ами приемаме, че транспарентният режим е безжичният еквивалент на серийния кабел. Обикновеният кабел няма такова следене на връзката... ...Всъщност там има RTS DTR CTS DSR RI , които ако са имплементирани в прозрачният режим, може да се използват за следене на връзката.

Автор:  stefan63 [ Сря Мар 25, 2020 12:25 am ]
Заглавие:  Re: ESP32-serial bridge

Не разбрах съвета :D

Автор:  TheWizard [ Сря Мар 25, 2020 12:26 am ]
Заглавие:  Re: ESP32-serial bridge

WiFiServer е TCP сокет сървър
WiFiClient е обратното ... TCP socket client

Автор:  stefan63 [ Сря Мар 25, 2020 12:35 am ]
Заглавие:  Re: ESP32-serial bridge

TCP в името не предполага ли, ако не "гарантираност" на връзката, то поне нотификация за
разпадане?
Или аз бъркам TCP или IP e по-горното в съчетанието TCP/IP.

Автор:  slav4o.com [ Сря Мар 25, 2020 12:50 am ]
Заглавие:  Re: ESP32-serial bridge

RTS и DTR се сетват от теб, през UART програмата. Един вид освен символи да пращаш, може да им задаваш нива. От другата страна ( приемащата ) трябва да имат пинове които съответно се вдигат/слизат във ниско ниво. На първо виждане от това което изгуглих се вижда, че са имплементирани дори в ESP8266.

ESP32 pdf страница 6 :
3.2.7. AT+UART_CUR
.............................
............................
• <flow control>: flow control
‣ 0: flow control is not enabled
‣ 1: enable RTS
‣ 2: enable CTS
‣ 3: enable both RTS and CTS

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/