Официальный сайт компании Arduino по адресу arduino.cc
ESP c AT-прошивкой выносит мозг :(
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вводные: AT-прошивка 0.40, режим множественных подключений (4 клиента), поднят сервер. ESP довольно интенсивно спамят с внешнего мира (вебморда), плюс из контроллера (Atmega2560) по UART в ESP пишется куча данных - MQTT и т.п.
Реализована параллельная неблокирующая обработка, когда в очередь помещаются команды, и по мере их разгребания происходит чудо :)
Трабла в следующем: как известно, ESP по приходу входящих данных плюёт в порт +IPD,<link id>,<data length>:<data>. Естественно, такую информацию надо отрабатывать безусловно - есть ли там что в очереди или нет - пришли данные, будь добр из разобрать и послать ответ. Однако (на конкретном примере) - неконтролируемо происходит пересечение клиентов, т.е.:
1. в ESP посылается AT+CIPSTART=1,"IP address",80;
2. В ответ приходит 1,CONNECT - пока всё штатно, после этой строки, по идее - уже можно писать в ESP данные вызовом AT+CIPSENDBUF;
3. ВНЕЗАПНО в порт падает +IPD,1,14:<тут данные>, и я понимаю, что это данные запроса с вебморды!
Т.е. получаем что: ПОСЛЕ вызова AT+CIPSTART ESP почему-то считает себя вправе законнектить другого клиента в этот же слот! Как итог - полкило волос на жопе уже вырвано, ибо данная трабла просто не поддаётся формализации.
Сталкивался кто? Как лечить? Что делать? Подорожник?
Понял неоднозначность: в одном случае в ответ на AT+CIPSTART приходит OK в конце, во втором - нет. Значит, ESP вроде как проглотило команду, но предпочло не выдавать ни OK, ни ERROR, вместо этого предпочтя выплюнуть в порт данные с внешнего клиента.
Замена AT+CIPSENDBUF на AT+CIPSEND - результата не дала. Буду рыть дальше.