• Система автоматизации с открытым исходным кодом на базе 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
день добрый. вы решили проблему с этим. нужна помощь у меня таже проблема((
 
Сверху Снизу