基于ESP32-C3 的时钟外壳
ESP32-C3 的时钟外壳
  • 分类:
    铝合金外壳
  • 发布人:
    fsjaflk
  • 发布时间:
    2025-08-08 09:33
  • 开源协议:
    CC CC0协议
  • 下单次数:
    1次
0
侵权投诉 免责声明
简介
应用场景
ESP32-C3 的时钟外壳
项目描述


#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获取网站

评论(0)
评论(0)
目前还没有讨论,等你来发挥!