Технический форум по робототехнике.
Korbofos » 12 мар 2018, 18:47
Кто сталкивался подскажите как лучше разобрать ответ от модуля, когда приходят данные в текстовом режиме проблем нет, узнаю что пакет пришёл полностью по символу конца строки. После этого начинаю разбирать пакет, а вот как быть когда приходит пакет +IPD,20: 0xF0, 0xFF //бла бла. Как этот пакет разобрать. Разбирать символы с самого начала?
Romikgy » 12 мар 2018, 19:26
а бла бла это что ?
Korbofos » 13 мар 2018, 23:56
Данные в хексе
Добавлено спустя 18 минут 36 секунд:Сделал вот так, потестить не могу, жду модуль с али(
- Код: Выделить всё • Развернуть
static uint8_t readAnsver(void)
{
char c;
if(u2.readByte())
{
if(timeOut() && stage) stage = 0; //если превышен таймаут ожидания следующего символа
c = u2.read()
if(stage == 0) //сбрасываем все счётчики
{
stage = 1;
mode = STRING_DATA;
countStr = 0;
countPack = 0;
lenPack = 0;
}
if(mode == STRING_DATA)
{
string[countStr++] = c;
switch(c)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
lenPack = lenPack * 10 + c - '0';
break;
case '+':
case 'I':
case 'P':
case 'D':
case ',':
case ':':
ipdMatch++;
if(ipdMatch == 6 && countStr == 6)mode = IPD_DATA;
break;
case '\r'
stage = 0;
return STRING_DATA;
case '>'
stage = 0;
return READY;
}
}
if(mode == IPD_DATA)
{
pack[countPack] = c;
if(countPack == lenPack)
{
stage = 0;
return IPD_DATA;
}
}
u2.setTimeOut(300);
}
return 0;
}
Добавлено спустя 1 час 26 минут 57 секунд:И ещё вопрос, отправленный пакет из 10 байт на esp модуль, придёт как
- Код: Выделить всё • Развернуть
+IPD,10: //данные
или может придти частями?
Aseris » 15 мар 2018, 16:29
А датащит почитать
+IPD,
10: //данные
Количество байтА вобще ESP оч геморойная в етом плане, у них ответы на все команды разные
Добавлено спустя 4 минуты 40 секунд:Пакет (+IPD...) приходит целый, но не факт что без пауз / задержек между байтами, зависит от внутренего настроя и версии прошивки.
Но! если с отправить 100 байт напр, TCP стек может отправить ето по кускам.
Madf » 15 мар 2018, 16:48
Aseris писал(а):А вобще ESP оч геморойная в етом плане, у них ответы на все команды разные
Я вообще не понимаю, как им люди рулят без NodeMCU.
Scorpio » 15 мар 2018, 17:44
Рулят через Arduino IDE. Всяко надо знать длину пакета, либо вычислять ее логически.
Aseris » 16 мар 2018, 18:49
зачем логически? там ж прямо написано
ESP8266 AT Instruction Set
5.2.21. +IPD—Receives Network Data
Single connection:
(+CIPMUX=0)+IPD,<len>[,<remote
IP>,<remote port>]:<data>
multiple connections:
(+CIPMUX=1)+IPD,<link ID>,<len>[,<remote
IP>,<remote port>]:<data>
Что с len не так?
Scorpio » 17 мар 2018, 16:49
тогда и проблем быть не должно
Korbofos » 19 мар 2018, 22:01
Aseris писал(а):А датащит почитать
+IPD,
10: //данные
Это понятно, просто интересно как кто отслеживает этот заголовок. Решил отлавливать по запятой
- Код: Выделить всё • Развернуть
if(c == ',')
{
if(len == 5)
{
if(data[0] == '+' &&
data[1] == 'I' &&
data[2] == 'P' &&
data[3] == 'D' &&
data[4] == ',') mode = RECEIVE_LEN;
}
}
А остальные данные буду разбирать по символу конца строки
Aseris » 20 мар 2018, 14:31
Отслеживать надо все, я отлавливаю по первым знакам ответа, и ожидаемому ответу. Хотя мож где парсер интереснее есть.
П.С. - существует strcmp из string.h
cheblin » 20 мар 2018, 19:40
использовать текстовый протокол не разумно.
его простота обманчива, и если он и работоспособен, то только в самых примитивных случаях.
BlackBox как раз решает именно проблему создания протокола обмена.
Подробнее обсуждение например тутОстались вопросы? Отвечу.
Aseris » 21 мар 2018, 16:52
Есть стабильная/сертифицированая реализация из коробки под ESP8266 WROM2??? где???
Но помойму вы перепутали AT based протокол модемов что обсуждается и Application layer... Вы о котлетах а мы о мухах
Korbofos » 23 мар 2018, 14:50
Aseris писал(а):Отслеживать надо все, я отлавливаю по первым знакам ответа, и ожидаемому ответу. Хотя мож где парсер интереснее есть.
П.С. - существует strcmp из string.h
А можете пример показать как вы сделали?