- 分类:铝合金外壳
- 发布人:
fsjaflk
- 发布时间:2025-08-08 09:33
- 开源协议:CC CC0协议
- 下单次数:1次
#include
#include
#include
#include
#include
#include
#include
#include
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// WiFi配置
const char* ssid = "YOURSSID";
const char* password = "YOURPASSWORD";
//ALAPL配置
const String apiKey = "api";
const String city = "城市";
const String countryCode = "CN";
// NTP客户端
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 900000);
// 传感器模拟数据(实际使用时替换为真实传感器读取)
float temperature = 25.0;
float humidity = 45.0;
int airQuality = 85;
void setup() {
Serial.begin(115200);
Wire.begin(4, 5); // ESP32-C3默认I2C引脚
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Connecting WiFi...");
display.display();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
display.print(".");
display.display();
}
timeClient.begin();
display.clearDisplay();
display.println("WiFi Connected!");
display.display();
delay(1000);
}
void loop() {
updateTime();
updateWeather();
updateSensorData();
display.clearDisplay();
// 第一行:时间
display.setTextSize(1);
display.setCursor(0,0);
display.print(timeClient.getFormattedTime());
// 第二行:天气
display.setCursor(0,16);
display.print("Weather: ");
display.print(getWeatherDescription());
// 第三行:温湿度
display.setCursor(0,32);
display.print("Temp: ");
display.print(temperature);
display.print("C Hum: ");
display.print(humidity);
display.print("%");
// 第四行:空气质量
display.setCursor(0,48);
display.print("Air Q: ");
display.print(airQuality);
display.print(" (");
display.print(getAirQualityText());
display.print(")");
display.display();
delay(900000); // 每钟更新一次
}
void updateTime() {
timeClient.update();
}
void updateWeather() {
if(WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String url = "http://api.openweathermap.org/data/2.5/weather?q=" + city + "," + countryCode + "&appid=" + apiKey + "&units=metric";
http.begin(url);
int httpCode = http.GET();
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString();
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload);
temperature = doc["main"]["temp"];
humidity = doc["main"]["humidity"];
}
http.end();
}
}
void updateSensorData() {
// 这里添加实际传感器读取代码
// 示例使用模拟数据
airQuality = random(0, 100);
}
String getWeatherDescription() {
// 简化实现,实际应从API获取
if(temperature > 30) return "Sunny";
if(temperature < 10) return "Cold";
return "Cloudy";
}
String getAirQualityText() {
if(airQuality > 80) return "Excellent";
if(airQuality > 60) return "Good";
if(airQuality > 40) return "Moderate";
return "Poor";
}
ALAPI为API获取网站
