• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ArduinoJson - ошибка компиляции

Lucky13

New member
Здравствуйте!
Не получается завести библиотеку arduinojson при работе с esp8266. Код не мой, у автора все работет, у меня сначала ругается, что незадекларирована функция jsonGet, после того как декларирую ее перед функцией Setup, компиляция завершается ошибкой:

Arduino: 1.6.7 (Windows 7), Плата:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Serial, 115200, 4M (3M SPIFFS)"
sketch\OpenWeatherMap_json.ino.cpp.o: In function `ArduinoJson::Internals::JsonWriter::writeFloat(float, unsigned char)':
C:\Program Files (x86)\Arduino\libraries\ArduinoJson/include/ArduinoJson/Internals/../Internals/JsonWriter.hpp:127: undefined reference to `__cxa_guard_acquire'
C:\Program Files (x86)\Arduino\libraries\ArduinoJson/include/ArduinoJson/Internals/../Internals/JsonWriter.hpp:131: undefined reference to `__cxa_guard_release'
sketch\OpenWeatherMap_json.ino.cpp.o: In function `ArduinoJson::JsonArray::invalid()':
C:\Program Files (x86)\Arduino\libraries\ArduinoJson/include/ArduinoJson/Internals/../Internals/JsonWriter.hpp:134: undefined reference to `__cxa_guard_acquire'
sketch\OpenWeatherMap_json.ino.cpp.o: In function `ArduinoJson::JsonArray::invalid()':
C:\Program Files (x86)\Arduino\libraries\ArduinoJson/include/ArduinoJson/JsonArray.hpp:169: undefined reference to `__cxa_guard_release'
sketch\OpenWeatherMap_json.ino.cpp.o: In function `ArduinoJson::JsonObject::invalid()':
C:\Program Files (x86)\Arduino\libraries\ArduinoJson/include/ArduinoJson/JsonObject.hpp:143: undefined reference to `__cxa_guard_acquire'
C:\Program Files (x86)\Arduino\libraries\ArduinoJson/include/ArduinoJson/JsonObject.hpp:143: undefined reference to `__cxa_guard_release'
collect2.exe: error: ld returned 1 exit status
exit status 1
Ошибка компиляции.

Код:
// парсинг погоды с <a href="http://api.openweathermap.org" title="http://api.openweathermap.org" rel="nofollow">http://api.openweathermap.org</a>

// Arduino JSON library
// <a href="https://github.com/bblanchon/ArduinoJson" title="https://github.com/bblanchon/ArduinoJson" rel="nofollow">https://github.com/bblanchon/ArduinoJson</a>
// If you like this project, please add a star!

#include <ArduinoJson.h>
#include <ESP8266WiFi.h>

const char* ssid     = "WLAN1";
const char* password = "1231234123";


const char* host = "api.openweathermap.org";
String line;
void jsonGet();
void setup() {
  Serial.begin(115200);
  delay(10);
 
 
  // We start by connecting to a WiFi network

  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
 
  WiFi.begin(ssid, password);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected"); 
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

    jsonGet();
}
void loop() {
  
   StaticJsonBuffer<2000> jsonBuffer;                   /// буфер на 2000 символов
   JsonObject& root = jsonBuffer.parseObject(line);     // скармиваем String
   if (!root.success()) {
    Serial.println("parseObject() failed");             // если ошибка, сообщаем об этом
     jsonGet();                                         // пинаем сервер еще раз
    return;                                             // и запускаем заного
  }
 
 
                              /// отправка в Serial
  Serial.println(); 
  String name = root["name"];                           // достаем имя,
  Serial.print("name:");
  Serial.println(name); 
 
  float tempK = root["main"]["temp"];                   // достаем температуру из структуры main
  float tempC = tempK - 273.15;                         // переводим кельвины в цельси
  Serial.print("temp: ");
  Serial.print(tempC);                                  // отправляем значение в сериал
  Serial.println(" C");

  float tempKmin = root["main"]["temp_min"];            // и так далее
  float tempCmin = tempKmin - 273.15;
  Serial.print("temp min: ");
  Serial.print(tempCmin);
  Serial.println(" C");

  float tempKmax = root["main"]["temp_max"];
  float tempCmax = tempKmax - 273.15;
  Serial.print("temp max: ");
  Serial.print(tempCmax);
  Serial.println(" C");
 
  int pressurehPa = root["main"]["pressure"];
  float pressure = pressurehPa/1.333;
  Serial.print("pressure: ");
  Serial.print(pressure);
  Serial.println(" mmHc");

  int humidity = root["main"]["humidity"];
  Serial.print("humidity: ");
  Serial.print(humidity); 
  Serial.println(" %");

  float windspeed = root["wind"]["speed"];
  Serial.print("wind speed: ");
  Serial.print(windspeed); 
  Serial.println(" m/s");

  int winddeg = root["wind"]["deg"];
  Serial.print("wind deg :");
  Serial.println(winddeg); 

  Serial.println(); 
  Serial.println(); 
  delay(50000);
}

void jsonGet() {
 
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
 
    client.println("GET /data/2.5/weather?id=542420&appid=6a4ba421859c9f4166697758b68d889b HTTP/1.1");
    client.println("Host: api.openweathermap.org");
    client.println("Connection: close");
    client.println();
  delay(1500);
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    line = client.readStringUntil('\r');
  }
  Serial.print(line);
  Serial.println();
  Serial.println("closing connection");
}
 

nsklital

New member
день добрый. вы решили проблему с этим. нужна помощь у меня таже проблема((
 
Сверху Снизу