ArduinoJson - ошибка компиляции
- Войдите на сайт для отправки комментариев
Вс, 13/11/2016 - 01:05
Здравствуйте, уважаемые ардуинщики!
Не получается завести библиотеку 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"); }