0%

ESP8266单片机DIY数码管小时钟

MCU-Clock (6)

前言

一直想做一个DIY小时钟,趁放假时间了解了一下单片机,本想用 ESP8266开发板+1.44寸TFT液晶屏+DHT22温湿度模块 做一个 时间显示+天气预报+当前温湿度显示 小电视,不过需要较多的时间,又临近开学,所以改成了 ESP8266开发板+4位LED数码管 的简单时钟,原先的想法就放到暑假来实现。


部件介绍

  • ESP8266开发板

廉价开发板,单板10多块。自带WI-FI,不过只支持2.4G频段。接口是Micro-USB。

MCU-Clock (1) MCU-Clock (2)
  • TM1637 4位LED数码管

带时钟点的4位LED数码管,3.3v - 5v 供电均可。

MCU-Clock (3) MCU-Clock (4)
  • 整体效果
MCU-Clock (5)

使用附带的4根15cm杜邦线连接,稍微有点长,有条件可以用更短的。

店家送的30cm Micro-USB数据线也不太好用,线材偏硬,不好弯折,会把部件往原来弯折的方向带。推荐用比较细的Micro-USB手机数据线。


软件实现

从阿里云NTP服务器获取时间,每秒更新一次。

此处将整体代码分块解释,按顺序连接就是完整代码。

  • 头文件及初始设置部分
1
2
3
4
5
6
7
8
9
10
11
#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include "TM1637.h"

const char* ssid = "ssid"; //WI-FI名称
const char* password = "password"; //WI-FI密码

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "ntp5.aliyun.com", 8*3600); //使用阿里云的NTP服务器
//NTP服务设置: 第一个数为时区偏移,单位秒。第二个数(未使用)为更新间隔,单位为毫秒。
  • 数码管设置部分
1
2
3
4
5
6
#define CLK D3 //数码管CLK接D3口(可变)
#define DIO D2 //数码管DIO接D2口(可变)
TM1637 tm1637(CLK,DIO);

unsigned char ClockPoint = 1; //时钟点设置,1为亮,0为灭
int8_t TimeDisp[] = {0x00,0x00,0x00,0x00}; //4位显示的内容,先初始化为0
  • 主程序(单次执行)部分
1
2
3
4
5
6
7
8
9
10
11
void setup() {
delay(500);
WiFi.begin(ssid, password); //连接WI-FI
while(WiFi.status() != WL_CONNECTED){
delay(500);
} //若未连上则等待

timeClient.begin();
tm1637.init(); //数码管初始化
tm1637.set(2); //数码管显示亮度,0-7 BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7
}
  • 主程序(重复执行)部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void loop() {
if(ClockPoint){
tm1637.point(POINT_ON);
ClockPoint = 0;
}
else {
tm1637.point(POINT_OFF);
ClockPoint = 1;
} //时钟点 亮1秒灭1秒

timeClient.update();
int hour = timeClient.getHours();
int minute = timeClient.getMinutes(); //获取时间

TimeDisp[0] = hour / 10;
TimeDisp[1] = hour % 10;
TimeDisp[2] = minute / 10;
TimeDisp[3] = minute % 10; //分解成4位

tm1637.display(0,TimeDisp[0]);
tm1637.display(1,TimeDisp[1]);
tm1637.display(2,TimeDisp[2]);
tm1637.display(3,TimeDisp[3]); //显示上屏

delay(1000); //时间每秒更新一次
}

实现效果

MCU-Clock (6)

作为寒假作业的一部分,又完成作业了 ( •̀ ω •́ )✧