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
Ошибка компиляции.
Не получается завести библиотеку 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");
}