手把手教你制作ESP8266物联网创意点阵时钟,女朋友看了都想要!

本文作者:默 & 铁熊

前段时间我在网上看到了一款很有意思的点阵时钟,它可以播报天气,查看 YouTube 的订阅数,还有好看的时间动画。你可以把它当做普通闹钟,也可以连接蓝牙把它当做音箱来使用。它的许多功能都很有意思,其中我最喜欢的是它的时间显示动画效果,然而它一千多的价格让我望而却步,放弃了入手的打算。不过既然身为创客,我为什么不制作一个属于自己独一无二的创意网络时钟呢?

说干就干,于是我就做了一个创意点阵时钟,先来看一下演示视频吧:

[video(video-aynePODb-1591445136040)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=243386172)(image-https://img-blog.csdnimg.cn/img_convert/67e1039b0c8ef5ab8dd56e58dd5f5f14.png)(title-)]

预期目标及功能

  • 网络自动校准时间
  • 无网络连接时及时反馈
  • 一键配置时钟网络
  • 自定义精美时间显示字体
  • 时间显示动画
  • 亮度自动调节
  • 时段提示

材料清单

  • 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(".");
  }
    
  Serial.println("Local IP:");
  Serial.print(WiFi.localIP());
    
  NTP.setInterval(600);
  NTP.setNTPTimeout(1500);
  NTP.begin(ntpServer, timeZone, false);
    
  timer.setInterval(1000L, Simple_timer);
}

void loop() {
   
  timer.run();
}

点阵屏显示库:MD_Parola

MD_Parola 是 MAX7219 点阵屏的模块化滚动文本显示库,其主要特点如下:

  • 支持点阵屏显示文本时左对齐、右对齐或居中对齐;
  • 具有文字滚动,进入和退出效果;
  • 能够控制显示参数和动画速度;
  • 支持硬件 SPI 接口;
  • 可以在点阵屏虚拟多个显示区域;
  • 用户定义的字体和/或单个字符替换;
  • 支持双高显示;
  • 支持在混合显示文本和图形。

下面的例子简单演示了如何利用 MD_Parola 滚动显示字符串,其中 MD_Parola 对象有 4 个参数:分别为 SPI 管脚 DIN、CLK、CS 及点阵数目。下面我们所做的创意点阵时钟的显示功能均由此库开发。

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

MD_Parola P = MD_Parola(13,14,12,4);  //DIN(D7) CLK(D5) CS(D6)
MD_MAX72XX mx = MD_MAX72XX(13,14,12,4);  //DIN(D7) CLK(D5) CS(D6)

void setup() {
   
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值