ArduinoJson - ошибка компиляции

Нет ответов
Nestor Mahno
Offline
Зарегистрирован: 03.10.2015

Здравствуйте, уважаемые ардуинщики!

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

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
Ошибка компиляции.
 
// парсинг погоды с http://api.openweathermap.org

// Arduino JSON library
// https://github.com/bblanchon/ArduinoJson
// 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");
}