#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
// OLED display
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// ASR01 serial communication
SoftwareSerial asrSerial(12, 13); // RX, TX
// WiFi credentials
const char* ssid = "新工科2201";
const char* password = "1234567890";
// Weather API endpoint
const char* weatherApiUrl = "http://api.seniverse.com/v3/weather/now.json?key=Sy9BRuWBCIlXN94tZ&location=SHIZUISHAN&language=zh-Hans&unit=c";
// Variables
String weatherData;
String currentTime;
void setup() {
Serial.begin(115200);
asrSerial.begin(9600);
// Initialize OLED display
Wire.begin(D2, D1);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
// Connect to WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Fetch weather data
fetchWeatherData();
}
void loop() {
// Display weather data on OLED
displayWeatherData();
// Output weather data via ASR01
asrSerial.println(weatherData);
delay(10000); // Send every 10 seconds
}
void fetchWeatherData() {
WiFiClient client;
if (client.connect("api.seniverse.com", 80)) {
client.print(String("GET ") + weatherApiUrl + " HTTP/1.1\r\n" +
"Host: api.seniverse.com\r\n" +
"Connection: close\r\n\r\n");
while (client.connected() || client.available()) {
if (client.available()) {
String line = client.readStringUntil('\n');
if (line.startsWith("{")) {
weatherData = line; // Capture JSON data
break;
}
}
}
client.stop();
} else {
Serial.println("Connection failed");
}
}
void displayWeatherData() {
// Parse JSON data
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, weatherData);
if (!error) {
const char* location = doc["results"][0]["location"]["name"];
const char* temperature = doc["results"][0]["now"]["temperature"];
const char* weather = doc["results"][0]["now"]["text"];
// Display on OLED
display.clearDisplay();
display.setCursor(0, 0);
display.print("Location: ");
display.println(location);
display.print("Temp: ");
display.print(temperature);
display.println(" °C");
display.print("Weather: ");
display.println(weather);
display.display();
} else {
Serial.println("Failed to parse JSON");
}
}
以上代码出现了以下问题,不知道怎么解决。谢谢大佬们。
In file included from C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Numbers/FloatTraits.hpp:13:0,
from C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Numbers/convertNumber.hpp:15,
from C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantData.hpp:10,
from C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Memory/ResourceManager.hpp:13,
from C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/JsonVariantConst.hpp:10,
from C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Variant/VariantRefBase.hpp:9,
from C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/ElementProxy.hpp:7,
from C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Array/JsonArray.hpp:7,
from C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:29,
from C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9,
from C:\Users\admin\Documents\Arduino__.ino:7:
C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Polyfills/pgmspace_generic.hpp: In instantiation of 'const T* ArduinoJson::V720PB22::detail::pgm_read(const T* const*) [with T = char]':
C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Deserialization/DeserializationError.hpp:85:42: required from here
C:\Users\admin\Documents\Arduino\libraries\ArduinoJson\src/ArduinoJson/Polyfills/pgmspace_generic.hpp:25:52: error: 'const void*' is not a pointer-to-object type
return reinterpret_cast<const T*>(pgm_read_ptr(p));
^
exit status 1
为开发板 NodeMCU 1.0 (ESP-12E Module) 编译时出错。