返回
再也不做掉时差星人!ESP8266 + MAX7219 制作简易自动同步倒计时时钟
闲谈
2023-10-26 05:27:56
作为一名现代人,我们都被时差这个烦人的问题所困扰。无论是出差、旅行还是与海外友人联系,时差总能让我们头晕目眩,不知所措。为了帮助您轻松应对时差挑战,今天,我们将共同制作一个简易的自动同步倒计时时钟。有了它,您再也不用担心错过重要时刻,成为名副其实的“时差克星”!
为了实现这一目标,我们将利用ESP8266 和 MAX7219 这两个强大的电子组件。ESP8266 是一款功能强大的微控制器,而 MAX7219 则是一款 8 位数的 LED 显示驱动器。我们将利用这两个组件来构建一个可以自动同步时间、并在天数和秒数之间切换显示的倒计时时钟。
在动手制作之前,我们需要先准备好必要的材料:
- ESP8266 开发板
- MAX7219 模块
- 7 段数码管
- 电阻
- 电容器
- 面包板
- 跳线
准备好这些材料后,就可以按照以下步骤进行组装:
- 将 ESP8266 开发板和 MAX7219 模块连接到面包板上。
- 将 7 段数码管连接到 MAX7219 模块上。
- 为电路供电。
- 将 ESP8266 开发板连接到计算机。
- 将代码上传到 ESP8266 开发板上。
代码如下:
/*
* ESP8266 + MAX7219 自动同步倒计时时钟
* 作者:**您的大名**
* 日期:**今日日期**
*/
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
// WiFi SSID 和密码
const char* ssid = "**您的 WiFi SSID** ";
const char* password = "**您的 WiFi 密码** ";
// NTP 服务器地址
const char* ntpServer = "pool.ntp.org";
// MAX7219 引脚定义
const int dataPin = 2;
const int clockPin = 3;
const int loadPin = 4;
// 倒计时时间(天数)
const int days = 1;
// 倒计时时间(秒数)
const int seconds = 24 * 60 * 60;
// 当前时间戳
unsigned long currentTime;
// 上次切换时间
unsigned long lastSwitchTime;
// 显示天数或秒数的标志位
bool showDays = true;
// 7 段数码管数字编码表
const byte numDigits[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
void setup() {
// 初始化串口
Serial.begin(9600);
// 连接 WiFi
Serial.println("正在连接 WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
Serial.println("已连接 WiFi");
// 初始化 NTP 客户端
Serial.println("正在初始化 NTP 客户端...");
NTPClient timeClient(ntpServer);
timeClient.begin();
while (!timeClient.update()) {
timeClient.forceUpdate();
}
Serial.println("已初始化 NTP 客户端");
// 初始化 MAX7219 模块
Serial.println("正在初始化 MAX7219 模块...");
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(loadPin, OUTPUT);
digitalWrite(loadPin, LOW);
Serial.println("已初始化 MAX7219 模块");
// 设置上次切换时间为当前时间
lastSwitchTime = millis();
}
void loop() {
// 获取当前时间戳
currentTime = timeClient.getEpochTime();
// 每八秒切换显示天数或秒数
if (millis() - lastSwitchTime >= 8000) {
showDays = !showDays;
lastSwitchTime = millis();
}
// 显示天数或秒数
if (showDays) {
displayDays();
} else {
displaySeconds();
}
}
// 显示天数
void displayDays() {
// 计算剩余天数
int daysLeft = days - (currentTime / (24 * 60 * 60));
// 显示天数
displayNumber(daysLeft);
}
// 显示秒数
void displaySeconds() {
// 计算剩余秒数
int secondsLeft = seconds - (currentTime % (24 * 60 * 60));
// 显示秒数
displayNumber(secondsLeft);
}
// 显示数字
void displayNumber(int number) {
// 逐位显示数字
for (int i = 0; i < 4; i++) {
digitalWrite(loadPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, numDigits[number % 10]);
digitalWrite(loadPin, HIGH);
number /= 10;
}
}
上传代码后,倒计时时钟即可正常工作。每八秒,时钟将在天数和秒数之间切换显示。这样,您就可以轻松地知道还剩多少天或多少秒才能到达目标时间。
这款简易自动同步倒计时时钟不仅制作简单,而且功能强大。它可以自动同步时间,并根据您的需要在天数和秒数之间切换显示。有了它,您再也不用担心错过重要时刻,随时随地都能掌控时间流逝。
如果您想了解更多有关ESP8266和MAX7219 的信息,可以参考以下资源: