#include <Wire.h>
#include <WiFi.h>
#include <TM1637Display.h>
#include <DHT.h>
// WiFi配置
const char *ssid = "Wokwi-GUEST";
const char *password = "";
unsigned long startTime = 0;
unsigned long maxT = 300000;
// TM1637配置
#define CLK_PIN_TEMP 13 // 连接到TM1637的CLK引脚(温度)
#define DIO_PIN_TEMP 16 // 连接到TM1637的DIO引脚(温度)
TM1637Display tm1637Temp(CLK_PIN_TEMP, DIO_PIN_TEMP);
#define CLK_PIN_HUMID 5 // 连接到TM1637的CLK引脚(湿度)
#define DIO_PIN_HUMID 2 // 连接到TM1637的DIO引脚(湿度)
TM1637Display tm1637Humid(CLK_PIN_HUMID, DIO_PIN_HUMID);
#define CLK_PIN_TIME 12 // 连接到TM1637的CLK引脚(时间)
#define DIO_PIN_TIME 14 // 连接到TM1637的DIO引脚(时间)
TM1637Display tm1637Time(CLK_PIN_TIME, DIO_PIN_TIME);
// DHT22配置
#define DHT_PIN 4
DHT dht(DHT_PIN, DHT22);
#define LDR_PIN A0
void setup() {
Serial.begin(115200);
// 连接到WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// 初始化TM1637
tm1637Temp.setBrightness(4);
tm1637Humid.setBrightness(4);
tm1637Time.setBrightness(4);
tm1637Time.clear();
tm1637Humid.clear();
tm1637Temp.clear();
pinMode(LDR_PIN, INPUT);
dht.begin();
}
void loop() {
Time();
//Temp();
}
void Time() {
// 获取网络时间
configTime(8 * 3600, 0, "pool.ntp.org", "time.nist.gov");
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
// 显示时间在TM1637上,点亮冒号
int hour = timeinfo.tm_hour;
int minute = timeinfo.tm_min;
tm1637Time.showNumberDecEx(hour * 100 + minute, 0b11100000, true); // 第二个参数表示是否点亮冒号
Temp();
//delay(1000);
}
void Temp() {
// 获取温湿度
if (startTime == 0) {
startTime = millis();
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// 显示温度和湿度在TM1637上
//Serial.println(temperature);
int temp = (int)(temperature * 100);
int dots1 = 0b00010000; // 0x10
tm1637Temp.showNumberDecEx(temp, 0b11100000);
//delay(1000);
//Serial.println(humidity);
int hum = (int)(humidity * 100);
int dots2 = 0b00010000; // 0x10
tm1637Humid.showNumberDecEx(hum, 0b11100000);
SetBri();
}
if (millis() - startTime >= maxT) {
startTime = millis();
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// 显示温度和湿度在TM1637上
//Serial.println(temperature);
int temp = (int)(temperature * 100);
int dots1 = 0b00010000; // 0x10
tm1637Temp.showNumberDecEx(temp, 0b11100000);
//delay(1000);
//Serial.println(humidity);
int hum = (int)(humidity * 100);
int dots2 = 0b00010000; // 0x10
tm1637Humid.showNumberDecEx(hum, 0b11100000);
SetBri();
}
return;
}
void SetBri() {
int ldrValue = analogRead(LDR_PIN);
//Serial.println(ldrValue);
// 根据亮度调整TM1637的亮度
int brightness = map(ldrValue, 1023, 0, 1, 4);
tm1637Temp.setBrightness(brightness);
tm1637Humid.setBrightness(brightness);
tm1637Time.setBrightness(brightness);
//Serial.println(brightness);
return;
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
sevseg1:CLK
sevseg1:DIO
sevseg1:VCC
sevseg1:GND
sevseg3:CLK
sevseg3:DIO
sevseg3:VCC
sevseg3:GND
sevseg4:CLK
sevseg4:DIO
sevseg4:VCC
sevseg4:GND
dht1:VCC
dht1:SDA
dht1:NC
dht1:GND