Не могу найти библиотеку JsonParser.h

Mihay
Offline
Зарегистрирован: 07.08.2020

Здравствуйте!


Не могу найти библиотеку JsonParser.h чтобы можно было использовать

Код (C++):
using namespace ArduinoJson::Parser;

Библиотеки которые я нахожу, не поддерживают данную строчку кода.


Пытаюсь создать проект http://digitrode.ru/computing-devices/mcu_cpu/186-pogodnaya-stanciya-na-osnove-arduino-i-wi-fi-modulya-esp8266.html

b707
Offline
Зарегистрирован: 26.05.2017

Mihay пишет:

Библиотеки которые я нахожу, не поддерживают данную строчку кода.

если написать вместо for - "Far", а вместо while - whoile - компилятор тоже будет ругаться, но это вовсе не означает. что "Ардуино не поддерживает циклы for и while" :) - намек понятен?

Выкладывайте свой код и текст ошибки, посмотрим, что там "не поддерживает"

Mihay
Offline
Зарегистрирован: 07.08.2020
#include <ArduinoJson.h>
// #include <JsonParser.h> - эта библиотека в приведенном проекте (здесь ее нет)

#include <SoftwareSerial.h>

using namespace ArduinoJson::Parser;
 
#define SSID "Sigma" // введите ваш SSID
#define PASS "7712810m" // введите ваш пароль
#define LOCATIONID "2925533" // id местоположения
#define DST_IP "188.226.224.148" //api.openweathermap.org
SoftwareSerial dbgSerial(3, 4); // RX, TX для отладки
JsonParser<32> parser;

void setup()
{
  Serial.begin(115200);
  Serial.setTimeout(5000);
  dbgSerial.begin(115200); // для отладки
  dbgSerial.println("Init");
  Serial.println("AT+RST"); // сброс и проверка, если модуль готов
  delay(1000);
  if(Serial.find("ready")) 
  {
    dbgSerial.println("WiFi - Module is ready");
  }
  else
  {
    dbgSerial.println("Module dosn't respond.");
    while(1);
  }
  delay(1000);
  // try to connect to wifi
  boolean connected=false;
  for(int i=0;i<5;i++){
    if(connectWiFi()){
      connected = true;
      dbgSerial.println("Connected to WiFi...");
      break;
    }
    delay(1000);
  }
  if (!connected){
    dbgSerial.println("Coudn't connect to WiFi.");
    while(1);
  }
  delay(5000);
  Serial.println("AT+CIPMUX=0"); // установка в режим одиночного соединения
}
void loop()
{
  String cmd = "AT+CIPSTART=\"TCP\",\"";
  cmd += DST_IP;
  cmd += "\",80";
  Serial.println(cmd);
  dbgSerial.println(cmd);
  if(Serial.find("Error")) return;
  cmd = "GET /data/2.5/weather?id=";
  cmd += LOCATIONID;
  cmd += " HTTP/1.0\r\nHost: api.openweathermap.org\r\n\r\n";
  Serial.print("AT+CIPSEND=");
  Serial.println(cmd.length());
  if(Serial.find(">")){
    dbgSerial.print(">");
  }
  else
  {
    Serial.println("AT+CIPCLOSE");
    dbgSerial.println("connection timeout");
    delay(1000);
    return;
  }
  Serial.print(cmd);
  unsigned int i = 0; //счетчик времени
  int n = 1; // счетчик символов
  char json[100]="{";
  while (!Serial.find("\"main\":{")){}
  while (i<60000) {
    if(Serial.available()) {
      char c = Serial.read();
      json[n]=c;
      if(c=='}') break;
      n++;
      i=0;
    }
    i++;
  }
  dbgSerial.println(json);
  JsonObject root = parser.parse(json);
  double temp = root["temp"];
  double pressure = root["pressure"];
  double humidity = root["humidity"];
  temp -= 273.15; // Перевод градусов кельвины-цельсии
  dbgSerial.println(temp);
  dbgSerial.println(pressure);
  dbgSerial.println(humidity);
  dbgSerial.println("====");
  delay(600000);
}
 
boolean connectWiFi()
{
  Serial.println("AT+CWMODE=1");
  String cmd="AT+CWJAP=\"";
  cmd+=SSID;
  cmd+="\",\"";
  cmd+=PASS;
  cmd+="\"";
  dbgSerial.println(cmd);
  Serial.println(cmd);
  delay(2000);
  if(Serial.find("OK")){
    dbgSerial.println("OK, Connected to WiFi.");
    return true;
  }else{
    dbgSerial.println("Can not connect to the WiFi.");
    return false;
  }
}

b707
Offline
Зарегистрирован: 26.05.2017

сообщения компилятора еще.

Только текстом!!! - а то многие норовят скриншот вставить.

Mihay
Offline
Зарегистрирован: 07.08.2020
openWeather:6:30: error: 'Parser' is not a namespace-name
 using namespace ArduinoJson::Parser;
 
мне нужна библиотека <JsonParser.h> как в приведенном проекте. Эту библиотеку найти не могу, ту что поддерживала бы данную строку
Mihay
Offline
Зарегистрирован: 07.08.2020

Есть библиотека ArduinoJsonParser-master

в которой подключаются следующие h-шники:

#include <JsonArray.h>
#include <JsonHashTable.h>
#include <JsonObjectBase.h>
#include <JsonParser.h>
 
Но ошибка та же остается

 

b707
Offline
Зарегистрирован: 26.05.2017

Похоже вы пытаетесь запустить пример от старой версии библиотеки, с новой он не работает.

Вот совершенно точно та самая библиотека, от которой у вас пример https://github.com/bblanchon/ArduinoJson

но файла JsonParser.h в ней теперь нет, хотя в 2014 году был

 

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

Mihay
Offline
Зарегистрирован: 07.08.2020

Не могу найти простой пример парсинга. Вернее чтобы он более менее соответствовал приведенному коду. Есть примеры, но в них я не понимаю. Может быть подскажите?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Значить, брось пока парсить json, начни с простого. 

Mihay
Offline
Зарегистрирован: 07.08.2020

мне надо понять распаривание на Ардуине. Простое я давно попробовал.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Темы про парсинг на этом форуме возникают с завидной регулярностью. Поищите - не ленитесь. В свое время Евгений замечательно про это рассказал. Без всяких левых библиотек.

b707
Offline
Зарегистрирован: 26.05.2017

Mihay пишет:

мне надо понять распаривание на Ардуине. Простое я давно попробовал.


нет никакого "распарсивания на ардуине", так же как нет отдельных ВУ на форд и мерседес. Вы либо умеете водить, либо нет