前段时间我(作者:默)在网上看到了一款很有意思的点阵时钟,它可以播报天气,查看 YouTube 的订阅数,还有好看的时间动画。你可以把它当做普通闹钟,也可以连接蓝牙把它当做音箱来使用。它的许多功能都很有意思,其中我最喜欢的是它的时间显示动画效果,然而它一千多的价格让我望而却步,放弃了入手的打算。不过既然身为创客,我为什么不制作一个属于自己独一无二的创意网络时钟呢?
说干就干,于是我就做了一个创意点阵时钟,先来看一下演示视频吧:
预期目标及功能
网络自动校准时间
无网络连接时及时反馈
一键配置时钟网络
自定义精美时间显示字体
时间显示动画
亮度自动调节
时段提示
材料清单
ESP8266 Wemos mini 开发板 1 块;
杜邦线若干;
4 合 1 点阵模块;
激光切割外壳;
栎木滑面仿木纹贴纸。
电路原理图
电路连接关系如下图所示:
结构拼装
将 USB 数据线按下图所示方向由外壳背部插入开发板,使用热熔胶将开发板固定到木板上,保持稳定直到热熔胶凝固,主要热熔胶不要碰到数据线。
将外壳前部与点阵屏按下图所示方式放置入面板凹槽,使用热熔胶固定点阵,保持稳定直到热熔胶凝固。
然后使用杜邦线按原理图正确连接电路,并拼接外壳底部与左右两侧,最后将外壳顶部进行封顶。
剪切合适大小的栎木滑面仿木纹贴纸,粘贴至外壳表面。注意留出点阵位置,可以适当使用刻刀雕刻出 USB 下载接口,以便进行供电及程序下载或更新。
程序设计
下面开始详细讲解程序设计过程。
开发环境
我们使用 Aduino 软件来编写本项目的程序,开发板选择 ESP8266 类型。至于如何在 Arduino 中配置 ESP8266 的开发环境,不在本文的介绍范围,请自行查阅相关资料。
程序思路
为了达到我们的预期目标,我们先绘制功能的思维导图,再根据思维导图逐步实现创意点阵时钟的程序设计。
下面我们将具体讨论创意点阵时钟各个子功能是如何实现的。
获取网络时间
作为一个时钟,最重要的功能当然是显示时间啦。那么该如何从网络获取时间呢?
下面的例子演示了如何获取网络时间并将时间保存在变量中,其中 ESP8266WiFi.h
库的功能是连接网络,NtpClientLib.h
库的功能是获取 NTP 服务器的网络时间,SimpleTimer.h
库是用来设置定时器每秒刷新一次时间。该例子并没有串口打印当前时间,你可以添加串口打印相关代码用来调试程序。
#include <ESP8266WiFi.h>
#include <NtpClientLib.h>
#include <TimeLib.h>
#include <SimpleTimer.h>
SimpleTimer timer;
const PROGMEM char *ntpServer = "ntp1.aliyun.com";
int8_t timeZone = 8;
volatile int hour_variable;
volatile int minute_variable;
volatile int second_variable;
void Simple_timer() {
hour_variable = NTP.getTimeHour24();
minute_variable = NTP.getTimeMinute();
second_variable = NTP.getTimeSecond();
}
void setup() {
Serial.begin(9600);
WiFi.begin("ssid", "password");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Ser