前言
一直想做一个DIY小时钟,趁放假时间了解了一下单片机,本想用 ESP8266开发板+1.44寸TFT液晶屏+DHT22温湿度模块 做一个 时间显示+天气预报+当前温湿度显示 小电视,不过需要较多的时间,又临近开学,所以改成了 ESP8266开发板+4位LED数码管 的简单时钟,原先的想法就放到暑假来实现。
部件介绍
廉价开发板,单板10多块。自带WI-FI,不过只支持2.4G频段。接口是Micro-USB。
带时钟点的4位LED数码管,3.3v - 5v 供电均可。
使用附带的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"; const char* password = "password";
WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "ntp5.aliyun.com", 8*3600);
|
1 2 3 4 5 6
| #define CLK D3 #define DIO D2 TM1637 tm1637(CLK,DIO);
unsigned char ClockPoint = 1; int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
|
1 2 3 4 5 6 7 8 9 10 11
| void setup() { delay(500); WiFi.begin(ssid, password); while(WiFi.status() != WL_CONNECTED){ delay(500); } timeClient.begin(); tm1637.init(); tm1637.set(2); }
|
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; } 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; tm1637.display(0,TimeDisp[0]); tm1637.display(1,TimeDisp[1]); tm1637.display(2,TimeDisp[2]); tm1637.display(3,TimeDisp[3]); delay(1000); }
|
实现效果
作为寒假作业的一部分,又完成作业了 ( •̀ ω •́ )✧