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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

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

Сообщение Korbofos » 12 мар 2018, 18:47

Кто сталкивался подскажите как лучше разобрать ответ от модуля, когда приходят данные в текстовом режиме проблем нет, узнаю что пакет пришёл полностью по символу конца строки. После этого начинаю разбирать пакет, а вот как быть когда приходит пакет +IPD,20: 0xF0, 0xFF //бла бла. Как этот пакет разобрать. Разбирать символы с самого начала?
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

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

Сообщение Romikgy » 12 мар 2018, 19:26

а бла бла это что ?
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

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: //данные
или может придти частями?
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

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

Сообщение Aseris » 15 мар 2018, 16:29

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

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

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

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

Но! если с отправить 100 байт напр, TCP стек может отправить ето по кускам.
Аватара пользователя
Aseris
 
Сообщения: 1142
Зарегистрирован: 01 сен 2009, 14:58
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python

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

Сообщение Madf » 15 мар 2018, 16:48

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

Я вообще не понимаю, как им люди рулят без NodeMCU.
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

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

Сообщение Scorpio » 15 мар 2018, 17:44

Рулят через Arduino IDE. Всяко надо знать длину пакета, либо вычислять ее логически.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

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 не так?
Аватара пользователя
Aseris
 
Сообщения: 1142
Зарегистрирован: 01 сен 2009, 14:58
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python

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

Сообщение Scorpio » 17 мар 2018, 16:49

тогда и проблем быть не должно
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18: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;   
      }
  }

А остальные данные буду разбирать по символу конца строки
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

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

Сообщение Aseris » 20 мар 2018, 14:31

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

П.С. - существует strcmp из string.h
Аватара пользователя
Aseris
 
Сообщения: 1142
Зарегистрирован: 01 сен 2009, 14:58
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python

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

Сообщение cheblin » 20 мар 2018, 19:40

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

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

Остались вопросы? Отвечу.
BlackBox: генератор исходных кодов (C,C#, JAVA) обработки высоко-оптимизированного, бинарного протокола обмена, по спецификации.
Аватара пользователя
cheblin
 
Сообщения: 46
Зарегистрирован: 12 янв 2018, 15:02
Откуда: Пекин, Китай
Skype: china_it_support
прог. языки: SCALA, JAVA, C, C#, DART...
ФИО: Чикирев Сергей

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

Сообщение Aseris » 21 мар 2018, 16:52

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

Но помойму вы перепутали AT based протокол модемов что обсуждается и Application layer... Вы о котлетах а мы о мухах 8)
Аватара пользователя
Aseris
 
Сообщения: 1142
Зарегистрирован: 01 сен 2009, 14:58
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python

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

Сообщение Korbofos » 23 мар 2018, 14:50

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

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

А можете пример показать как вы сделали?
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4