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

前段时间我(作者:)在网上看到了一款很有意思的点阵时钟,它可以播报天气,查看 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(".");
  }
    
  Serial.println("Local IP:");
  Serial.print(WiFi.localIP());
    
  NTP.setInterval(600);
  NTP.setNTPTimeout(1500)
在FreeType库中,FT_Bitmap是一个结构体,它包含了位图字体的像素数据。如果你想要将这个位图转换成更常见的点阵信息(比如像素坐标或宽度高度),可以按照以下步骤进行: 1. **获取位图数据**: 使用`FT_Load_Char(face, glyph_index, FT_LOAD_RENDER)`加载字符,其中`face`是`FT_Face`指针,`glyph_index`是要处理的字符索引。如果设置`FT_LOAD_RENDER`标志,FreeType会生成该字符的位图表示。 2. **访问位图信息**: `FT_GlyphSlot`结构中包含一个`bitmap`字段,指向FT_Bitmap结构。你可以通过`FT_Bitmap.bitmap_top`、`FT_Bitmap.rows`和`FT_Bitmap.width`获取位图的高度、行数和宽度。 3. **转换像素坐标**: 如果需要将位图转换为屏幕上的像素坐标,你需要知道位图的偏移量(例如`FT_GlyphSlot-> bitmap_left`和`FT_GlyphSlot-> bitmap_top`),以及位图在屏幕上的实际位置和缩放因子。 ```cpp int x = FT_GlyphSlot->bitmap_left + ...; // 根据实际需求调整偏移 int y = FT_GlyphSlot->bitmap_top + ...; for (int i = 0; i < FT_Bitmap.rows; ++i) { for (int j = 0; j < FT_Bitmap.width; ++j) { if (FT_Bitmap.buffer[i * FT_Bitmap.pitch + j / 8] & (1 << (j % 8))) { // 点阵信息对应的像素值设为白色或其他颜色 } else { // 设为黑色或其他颜色 } } } ``` 4. **释放内存**: 记得在不需要位图数据时,释放由`FT_Bitmap.buffer`指向的内存,这通常在`FT_Render_Glyph()`后发生。 请注意,具体的实现可能会因应用场景而有所不同,这里提供了一个基本的概念框架。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值