发作品签到
标准版

[已停更] WS2812 Ring Clock

工程标签

4.0k
0
0
15

简介

基于ESP8266的时钟

简介:基于ESP8266的时钟

开源协议

GPL 3.0

创建时间:2022-09-28 07:04:22更新时间:2023-01-11 14:53:28

描述

板载资源:

  1路MAX7219

    (DIN-GPIO13;CLK-GPIO14;CS-GPIO15)

  1路DHT11

    (GPIO2)

  1路蜂鸣器

    (GPIO4)

  1路22枚WS2812b彩灯

    (GPIO5)

  1路光敏传感器

    (型号:GL5528(10K-20K),通过两级分压电路

        (第一级光敏+10K电阻,第二级220K电阻+100K电阻)连接至ESP-12F的A0引脚)

  2枚按键

    (一枚MODE/SET“万能”按键(所有功能均由它控制,该按键为上拉输入,连接至GPIO12,可设置为INPUT_PULLUP)、

          一枚RST重置按键)

  主控ESP-12F模组

    (TTL的TX、RX、GND已引出,GPIO0和GND连接至“FLASH”跳线,背面还引出供电引脚(带SS34防反接),

        解决MicroUSB立式插座难焊接的问题)

 

代码已放在附件中,有需要可自行下载。

 

Arduino添加ESP8266环境和烧录模组的方式请自行百度,烧录方式参考这篇文章:

https://blog.csdn.net/lyndon_li/article/details/124181888

 

以下是程序变量定义:

①开机初始状态设置,true代表有声音,false代表静音。在开机状态下按住MODE/SET键后短按一下RST,数码管全显后再松开MODE/SET键,则可以切换为和snd相反的状态(即true变false,false变true,该状态不保存,每次开机需重新设定)

②是否有DHT11模块存在,若有则设为true(在模式4和模式5会显示温湿度),若没有则设为false(模式4和模式5会显示FAIL,避免系统一直检测不存在的DHT11)

③整点报时设置,true代表开启,false代表关闭。

 

模式解析:

m的值 模式名称 屏幕显示内容 DIG1显示内容 DIG2显示内容 WS2812显示内容 备注
0 Empty 0-EP 时间 休眠 休眠 亮度最低、最省电的模式
1 Second 1-SE 时间 休眠 上下两只数码管秒点同时闪烁
2 Weekday 2-Ed 时间 星期 休眠 DIG2显示"d:x",周一至周六对应的x值为1~6,周日时x=0(可根据需要修改程序让DIG2在周日显示d:7,存储星期的变量是int类型的”weekDay“)
3 Date 3-dA 时间 日期 休眠 日期有时准,有时不准,可根据需要更改算法或设为其他模式
4 Temperature 4-tE 时间 温度 休眠 DIG2格式:xx℃
5 Humidity 5-HU 时间 湿度 休眠 DIG2格式:xx%(百分号有点不像)
6 Only LED 6-OL 休眠 休眠 虚拟时钟表盘 红色代表时针,绿色代表分针,蓝色代表秒针
7 LED Clock 7-LC 时间 虚拟时钟表盘 同上
8 Night Light 8-NL 休眠 休眠 小夜灯(暖色) RGB(5,5,2) 颜色配置
9 Colorful Light 9-CL 休眠 休眠 彩灯(循环跑马) (黑)→红→绿→蓝→红→黄→白→青→蓝 (循环)
- 自定义 ---- / / / 可自定义函数(全局搜索”//Undefined“,第一处为更改模式时的显示(”----“),第二处为自定义代码放置处(需先删除已有的三行代码))

以上是模式介绍。

 

放几张图片:

m=0:

m=1:

m=2:

m=3:

m=4:

m=5:

m=6:

m=7:

m=8:

m=9:

以上是10个模式的示意图。

 

使用方法:

1.焊接或贴片元件。(DIG1为0.56寸共阴时钟数码管,DIG2为0.4寸共阴时钟数码管,若使用白色数码管,则R1应在100K以上而非10K,否则亮度会太高(我用的是220K,效果不错,若是在夜间使用,则建议680K;焊接DHT11时请先将引脚从根部往下折弯90°(开孔朝上),然后对准孔位进行焊接。如果顺利的话,DHT11应该能覆盖下图中的矩形))

 

2.先用跳线帽或杜邦线短接丝印“FLASH”的2pin插针(新版使用丝印“FLASH”的按键,按住“FLASH”按键再上电,等ESP-12F的蓝灯闪一下之后再松开按键;也可以在上电之后按住“FLASH”键再短按“RST”键,等ESP-12F蓝灯闪一下后松手),然后给时钟上电,ESP-12F的蓝灯会闪一下,说明电路搭建没有问题。

 

3.将USB转TTL模块插上电脑,TTL模块的TX、RX、GND分别接时钟正面(新版的TTL排针在反面)丝印“TTL”的3pin插针的R、T、G(交差连接),并打开设备管理器记录下当前TTL模块的端口号。

 

4.打开配置好ESP8266开发环境的Arduino IDE软件,Ctrl+O打开程序文件(MAX7219_PCB_Clock.ino),打开库管理器,搜索并安装以下库:

        AceSegment (0.12.0)

        AceSPI (0.4.0)

        NTPClient (3.2.1)

        DHT sensor library (1.4.3)

        Adafruit NeoPixel (1.10.4)

        WiFiManager (0.15.0)

 

5.安装好后,先选择刚刚记录下的端口(“工具”>“端口”),然后点击上传,如果提示没有库文件就把附件中的库复制到“项目文件夹\libraries”文件夹中并替换,或者按报错信息修改参数。(有时会遇到奇怪的问题,如“为xxx编译时出错”,解决方法是复制所有代码后新建一个草稿并将代码粘贴进去,然后保存并上传)

 

6.等待编译并上传。

 

7.上传成功后,拔掉短接“FLASH”跳线的杜邦线或跳线帽(新版使用“FLASH”按键,可以跳过这一步),然后按下按键“RST”,系统应该会重启,两只数码管都显示“88:88”,所有LED点亮白色。若有灯不亮或数码管不亮,则检查焊点是否有虚焊,尤其是MAX7219四个角的引脚(那四个是信号脚,分别是DIN、DOUT、CLK、CS。WS2812旁边的电容可以不焊,但MAX7219芯片旁的C22一定要焊!由于信号通讯原因,MAX7219必须要有滤波电容。我曾经就有一次忘记焊了,屏幕只会闪一下,我当时还以为它坏了,结果接上电容立马就好了)和WS2812的四个引脚(焊盘非常小,电烙铁很难焊接,可以根据需要更改焊盘大小)。有时数码管会在上电时一直全显,那是因为电路中的噪音误触发了MAX7219的检测模式。此时只要断电在重新上电就可以了。(PCB中的信号线已加粗)

 

8.若snd=false,则在开机后DIG1会显示NS(No Sound),等待几秒后,所有LED会熄灭;若snd=true,则蜂鸣器会发出提示音。接着LED_STATE点亮红色,DIG1显示“AP”。等待一会儿后,就可以用手机或电脑(甚至Kindle)在WiFi设置中搜寻到名为“ESP8266_Clock”的AP接入点,连接并等待页面跳转到192.168.4.1,若没有则手动输入该IP地址,等界面加载完成后,点击“Configure WiFi”,选择你的WiFi网络的名称(SSID)并输入密码,然后点“Save”,若密码无误,则不久后DIG1会显示“GO”,若环境足够亮,LED_STATE会亮绿色。如果snd=true,则蜂鸣器会在联网成功后响4声。

 

9.如果本来有声音而你想静音,或者本来没声音而你想打开声音,则先按住 MODE/SET 键不放,再短按 RST 键,等屏幕显示的内容变化后再松开 MODE/SET 键,此时ESP8266会重新连接网络,并静音或打开声音。一句话说就是在开机时按住 MODE/SET 键可以改变当前的声音设置。

 

10.如果以上步骤都完成了,那么恭喜你,你现在可以开始使用时钟了。长按 MODE/SET 键直到屏幕显示你想要的模式(模式代码见前文表格)后立刻松手(程序中有500ms的模式切换间隔),ESP8266将会切换至相应模式并将其写入EEPROM,下次启动时会记忆上次的模式,不需重新设定。

 

11.若在时间显示模式(模式0~模式7)中WiFi断开,则屏幕和彩灯会熄灭,LED_STATE会红色呼吸慢闪,此时系统不接受 MODE/SET 的按键信号(即按键没反应),网络连接恢复后会自动重新连接,并显示时间(该时钟没有RTC实时时钟模块)。如果你想更换网络,那就按下 RST 键,系统会重启并显示“AP”,这时你就可以用手机为其重新配网。若是在其他模式下网络断开,则LED_STATE会点亮浅红色,不影响当前模式使用。在正常使用模式下,如果环境光足够亮,则LED_STATE会点亮浅绿色。

 

12.程序中有设置整点报时,在整点时如果snd=true,则蜂鸣器会响10声(00秒至09秒);如果snd=false,则正面的LED_STATE和背面的LED_BACKGROUND会蓝色呼吸快闪10次左右(原来的程序只会闪7次左右,附件中的视频就是原先的程序)。注意,该时钟不支持设置报时范围,所以如果需要在夜间使用,那么请将snd设为false以免打扰到睡眠,或更改程序。(程序中的报时功能可在变量定义中设定(前文有))

 

------------------------------PCB已更新(2022-10-01)------------------------------

1.更新后的PCB删除了原先的LED_BUZ,因为这个灯没什么用;

 

2.改变了USB_IN立式母座的位置,方便后期加固焊点(原先在数码管正后方,松动了也加固不了,因为焊点被数码管盖住了);

 

3.改用四层板(原先的两层板自动布线一直布不上,总是无法连接MAX7219芯片和数码管,改了很多次才发现有两条线确实无法跨过其他走线,于是只好改用四层板),加粗走线(JLC依然可以免费打板,不过限制在绿色)。

 

------------------------------PCB已更新(2022-11-01)------------------------------

1.增加PWR指示灯,上电即点亮,可以不焊接。

 

2.更改蜂鸣器位置,方便焊接(请先焊接蜂鸣器再焊接数码管,否则蜂鸣器非常难安装)。

 

3.引出MAX7219、DHT11、WS2812的数据引脚,可以只焊接ESP-12F最小系统并外接其他模块(如MAX7219显示模块、DHT11模块、WS2812灯环等),也可以把该时钟当作显示模块使用(适用于已经有NodeMCU或D1 Mini等开发板的情况),两种接法见下:

①外接模块:

②作为模块使用:

③当然,也可以不使用本时钟板,直接使用NodeMCU和显示模块、按键模块等对接。

为方便改装,现给出各按键GPIO定义:

按键 对应引脚 电阻
MODE/SET GPIO12 10K上拉
RST RST 10K上拉
FLASH GPIO0 10K上拉

可以使用网上便宜的按键(一般默认上拉,需将NodeMCU开发板的3V3引脚接到按键模块的GND引脚,NodeMCU开发板的GND引脚接到按键模块的VCC引脚,输入引脚直接连接按键模块的OUT引脚即可)或者触摸模块代替(TTP223触摸需要设置为触摸时输出低电平+点动)。

e.g.按键模块(红线是NodeMCU的3V3,橙线是NodeMCU的GPIO12,棕线是NodeMCU的GND,三根线分别连接按键模块的GND、OUT、VCC)

这些是其余模块的引脚:

模块引脚 ESP8266 GPIO  (请根据引脚映射连接NodeMCU) 备注
DHT11温湿度传感器---DAT 2

推荐接3V3供电

BUZZER蜂鸣器模块---I/O 4 正极接3V35V均可,使能端连接GPIO4,负极接GND
WS2812彩灯---DAT 5 灯珠使用5V供电,数据线直连GPIO5
MAX7219数码管显示模块---DIN 13 MAX7219模块使用5V供电

MAX7219数码管显示模块---CLK

14 MAX7219模块使用5V供电

MAX7219数码管显示模块---CS

15 MAX7219模块使用5V供电

光敏电阻模块---AO

A0 光敏电阻模块使用3.3V供电

按键MODE/SET---OUT

12 连接GPIO12上拉10K电阻输入

 

 

4.为了便于焊接,大部分电阻采用R2512封装,少数R2010封装(R2512的全部是10K电阻,R2010的是光敏电阻的分压电路,一个220K,一个100K)。

 

5.将FLASH跳线更改为按键(在背面),便于调试时烧录,也可以在程序中为其自定义功能(GPIO0也是可以作为输入的)。

 

------------------------------程序已更新(2022-11-04)------------------------------

增加新的程序文件:MAX7219_PCB_Clock_Inverted.zip。若使用MAX7219模块而非本时钟作为时间显示的话,原来的程序MAX7219_PCB_Clock.ino会出现以下问题(对比一下):

很明显,下面那个MAX7219数码管模块的显示顺序反了,“8:57:08”变成了“80:75:8”。如果遇到该问题,请烧录MAX7219_PCB_Clock_Inverted.ino而非MAX7219_PCB_Clock.ino*。MAX7219_PCB_Clock.ino是按Seg7至Seg0的顺序写的,MAX7219_PCB_Clock_Inverted.ino是按Seg0至Seg7的顺序写的,可以适配几乎所有的MAX7219显示模块。

 

________________________________________________________

*因为设计PCB时是按MAX7219CWG芯片的Datasheet连线的,第一位到第八位分别对应MAX7219芯片的DIG0至DIG7,而市面上大多数MAX7219模块是按DIG7到DIG0的顺序连接数码管的(就连“AceSegment”库的开发者都是按DIG7到DIG0的顺序写的),所以如果使用PCB作为时钟就需要把0-7倒过来,第一位(左上↖)至第八位(右下↘)分别对应程序中的Seg7至Seg0。

 

这是刷了MAX7219_PCB_Clock_Inverted.ino的ESP8266控制MAX7219显示模块的效果:

该问题已经修复了。(显示的秒不一样是由于NTP时间更新问题,程序中设置每一秒校准一次时间,所以会有±1秒的误差)

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
Arduino相关库文件.zip
102
2
MAX7219_PCB_Clock.zip
44
3
IMG_3982.JPG
16
4
IMG_3986.JPG
10
5
BOM_WS2812-Clock_2022-10-31.csv
23
6
Mode7-整点报时.MOV
170
7
MAX7219_PCB_Clock_Inverted.zip
29
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航