roboforum.ru

Технический форум по робототехнике.

ESP8266 парсинг данных

ESP8266 парсинг данных

Korbofos » 12 мар 2018, 18:47

Кто сталкивался подскажите как лучше разобрать ответ от модуля, когда приходят данные в текстовом режиме проблем нет, узнаю что пакет пришёл полностью по символу конца строки. После этого начинаю разбирать пакет, а вот как быть когда приходит пакет +IPD,20: 0xF0, 0xFF //бла бла. Как этот пакет разобрать. Разбирать символы с самого начала?

Re: ESP8266 парсинг данных

Romikgy » 12 мар 2018, 19:26

а бла бла это что ?

Re: ESP8266 парсинг данных

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: //данные
или может придти частями?

Re: ESP8266 парсинг данных

Aseris » 15 мар 2018, 16:29

А датащит почитать :)
+IPD,10: //данные

Количество байт

А вобще ESP оч геморойная в етом плане, у них ответы на все команды разные

Добавлено спустя 4 минуты 40 секунд:
Пакет (+IPD...) приходит целый, но не факт что без пауз / задержек между байтами, зависит от внутренего настроя и версии прошивки.

Но! если с отправить 100 байт напр, TCP стек может отправить ето по кускам.

Re: ESP8266 парсинг данных

Madf » 15 мар 2018, 16:48

Aseris писал(а):А вобще ESP оч геморойная в етом плане, у них ответы на все команды разные

Я вообще не понимаю, как им люди рулят без NodeMCU.

Re: ESP8266 парсинг данных

Scorpio » 15 мар 2018, 17:44

Рулят через Arduino IDE. Всяко надо знать длину пакета, либо вычислять ее логически.

Re: ESP8266 парсинг данных

Aseris » 16 мар 2018, 18:49

:shock: зачем логически? там ж прямо написано

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 не так?

Re: ESP8266 парсинг данных

Scorpio » 17 мар 2018, 16:49

тогда и проблем быть не должно

Re: ESP8266 парсинг данных

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;   
      }
  }

А остальные данные буду разбирать по символу конца строки

Re: ESP8266 парсинг данных

Aseris » 20 мар 2018, 14:31

Отслеживать надо все, я отлавливаю по первым знакам ответа, и ожидаемому ответу. Хотя мож где парсер интереснее есть.

П.С. - существует strcmp из string.h

Re: ESP8266 парсинг данных

cheblin » 20 мар 2018, 19:40

использовать текстовый протокол не разумно.
его простота обманчива, и если он и работоспособен, то только в самых примитивных случаях.
BlackBox как раз решает именно проблему создания протокола обмена.

Подробнее обсуждение например тут

Остались вопросы? Отвечу.

Re: ESP8266 парсинг данных

Aseris » 21 мар 2018, 16:52

Есть стабильная/сертифицированая реализация из коробки под ESP8266 WROM2??? где??? :shock:

Но помойму вы перепутали AT based протокол модемов что обсуждается и Application layer... Вы о котлетах а мы о мухах 8)

Re: ESP8266 парсинг данных

Korbofos » 23 мар 2018, 14:50

Aseris писал(а):Отслеживать надо все, я отлавливаю по первым знакам ответа, и ожидаемому ответу. Хотя мож где парсер интереснее есть.

П.С. - существует strcmp из string.h

А можете пример показать как вы сделали?


Rambler\'s Top100 Mail.ru counter