板载资源:
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 | 正极接3V3或5V均可,使能端连接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秒的误差)
!注意:请使用浏览器自带下载,迅雷等下载软件可能无法下载到有效资源。
欢迎加入EEWorld参考设计群,也许能碰到搞同一个设计的小伙伴,群聊设计经验和难点。 入群方式:微信搜索“helloeeworld”或者扫描二维码,备注:参考设计,即可被拉入群。 另外,如您在下载此设计遇到问题,也可以微信添加“helloeeworld”及时沟通。
EEWorld Datasheet 技术支持