0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用ESP8266做一个高颜值的RGB时钟的项目

GReq_mcu168 来源:DF创客社区 作者:sainisagar7294 2022-07-28 14:17 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

给大家分享一个用ESP8266做一个高颜值的RGB时钟的项目!

这个时钟还具有自动亮度控制功能并配备了温度传感器

材料准备

  • PCB
  • ESP8266或Nodemcu
  • 跳线
  • 焊接工具

第1步: 准备工作

2a1d8b40-0e3b-11ed-ba43-dac502259ad0.png2a39a56e-0e3b-11ed-ba43-dac502259ad0.png

Neo Pixel是可寻址的LED,我们可以通过编程,让它显示任何一种颜色或者数字。

Neo Pixel有不同的smd封装,这个项目使用的是Ws2812b-5050 mini RGB。

这种迷你LED的额定电压为3.0V到5.5V,电流为16mA(每个LED)。

NodeMCU有3.3V的稳压器,可以正常驱动所有的LED。

第2步:使用Neo Pixel Led制作7段显示器

2a4ed074-0e3b-11ed-ba43-dac502259ad0.png2a5c04f6-0e3b-11ed-ba43-dac502259ad0.png2a79c8a6-0e3b-11ed-ba43-dac502259ad0.png

在这里,我们需要把所有的电源并联起来,把所有的数据连接串联起来,使用7段显示方法,如上图连接所有的LED。

每段有2个LED,整个面板总共有14个LED。

我们需要4个面板来显示时间(2个显示小时,2个显示分钟)。

当然还可以再连接两个面板来显示秒/任何其他数值,或者温度。

不管怎么连接,记住总是要把第一个面板的DOUT连接到第二个面板的DIN

第3步:连接仪表盘

2a888080-0e3b-11ed-ba43-dac502259ad0.gif2b4f0336-0e3b-11ed-ba43-dac502259ad0.png

为了连接小时和分钟面板,在两面板之间有一个小的PCB板,名为Dash,包含了2个LED作为二进制数字,这2个LED灯每隔一秒就会发光一次。

第4步:NodeMCU/ESP8266介绍

2b76c498-0e3b-11ed-ba43-dac502259ad0.png

ESP8266集成了一个32位Tensilica处理器,标准的数字外围接口

我们的ESP8266具有板载Wi-Fi支持,通过它我们可以连上互联网调整时间,而不需要任何RTC(实时时钟)模块。

这样子的话可以减少连接,使整个项目变得更简单一些。

第5步:代码中支持的功能

2b85489c-0e3b-11ed-ba43-dac502259ad0.png

如果使用本文提供的代码,那么我们可以在这个7段时钟中增加2个额外的功能:

  1. 使用触觉开关的温度和湿度显示

在13号针脚上添加一个DHT11传感器,在12号针脚上添加一个触觉按钮,可以在屏幕上获得摄氏或华氏的温度值。

用一个10k电阻将按钮的第12针脚连接到5V,另一端连接到GND。也就是说,当按钮针脚被拉到GND时,显示器将显示温度读数。如果没有这个温度传感器,代码也可以工作,所以如果你想让项目简单一点,也可以不需要这些连接。

  1. 使用引脚A0的LDR传感器进行亮度控制
2b99f6f2-0e3b-11ed-ba43-dac502259ad0.png

通过在A0引脚上做一个电阻分压器网络,添加一个带有10k电阻的LDR传感器,可以相应地改变亮度。

白天的亮度高,晚上的亮度低。如果你不想要可调节亮度,这部分代码也可以在没有这些传感器的情况下工作,它将会锁定在默认设置。

第6步:视频演示

第7步:7段时钟

2bb13fb0-0e3b-11ed-ba43-dac502259ad0.gif2c12d07c-0e3b-11ed-ba43-dac502259ad0.png

现在,我们有4个面板和一个Dash(仪表盘)。

根据上面GIF图来连接面板和仪表盘;将2个面板串联在一起。

然后使用上面给出的原理图连接NodeMCU。

第8步:代码

  1. 首先使用库来初始化代码:
#include
#include
#include
#include
#include
#include
#include
  1. 定义所有像素、I/O引脚、传感器引脚:
#definePIXEL_PER_SEGMENT2//NumberofLEDsineachSegment
#definePIXEL_DIGITS4//NumberofconnectedDigits
#definePIXEL_PIN2//GPIOPin
#definePIXEL_DASH1//Binarysegment
#defineLDR_PINA0//LDRpin
#defineDHT_PIN13//DHTSensorpin
#defineBUTTON_PIN12//Buttonpin

3. 对于时间格式,使用Wi-Fi把ESP8266连接到互联网:

WiFi.begin(ssid,password);
Serial.print("Connecting.");
while(WiFi.status()!=WL_CONNECTED)
  1. 时间设置:
voiddisp_Time(){
clearDisplay();
writeDigit(0,Hour/10);
writeDigit(1,Hour%10);
writeDigit(2,Minute/10);
writeDigit(3,Minute%10);
writeDigit(4,Second/10);
writeDigit(5,Second%10);
disp_Dash();

5. 面板上的颜色设置:

if(index==0||index==1)color=strip.Color(0,Brightness,0);
if(index==2||index==3)color=strip.Color(0,Brightness,0);
if(index==4||index==5)color=strip.Color(Brightness,0,0);

这只是一个简单的介绍,同时代码还有温度和自动时间选项。

温度模式可以通过数字针脚12的开关来选择。

第9步:完整代码

#include
#include
#include
#include
#include
#include
#include

#definePIXEL_PER_SEGMENT2//NumberofLEDsineachSegment
#definePIXEL_DIGITS4//NumberofconnectedDigits
#definePIXEL_PIN2//GPIOPin
#definePIXEL_DASH1//Binarysegment

#defineLDR_PINA0//LDRpin
#defineDHT_PIN13//DHTSensorpin
#defineBUTTON_PIN12//Buttonpin

//Uncommentthetypeofsensorinuse
#defineDHT_TYPEDHT11//DHT11
//#defineDHT_TYPEDHT22//DHT22(AM2302)
//#defineDHT_TYPEDHT21//DHT21(AM2301)

#defineTIME_FORMAT12//12=12hoursformat||24=24hoursformat

Adafruit_NeoPixelstrip=Adafruit_NeoPixel((PIXEL_PER_SEGMENT*7*PIXEL_DIGITS)+(PIXEL_DASH*2),PIXEL_PIN,NEO_GRB+NEO_KHZ800);
DHTdht(DHT_PIN,DHT_TYPE);

//setWi-FiSSIDandpassword
constchar*ssid="Hackster";
constchar*password="Sainisagar7294";

WiFiUDPntpUDP;
//'time.nist.gov'isused(defaultserver)with+1houroffset(3600seconds)60seconds(60000milliseconds)updateinterval
NTPClienttimeClient(ntpUDP,"time.nist.gov",19800,60000);//GMT+5:30:5*3600+30*60=19800

intperiod=2000;//Updatefrequency
unsignedlongtime_now=0;
intSecond,Minute,Hour;

//setdefaultbrightness
intBrightness=40;
//currenttemperature,updatedinloop()
intTemperature;

boolShow_Temp=false;

//Digitsarray
bytedigits[12]={
//abcdefg
0b1111110,//0
0b0110000,//1
0b1101101,//2
0b1111001,//3
0b0110011,//4
0b1011011,//5
0b1011111,//6
0b1110000,//7
0b1111111,//8
0b1110011,//9
0b1001110,//C
0b1000111,//F
};

//ClearallthePixels
voidclearDisplay(){
for(inti=0;i< strip.numPixels(); i++) {
    strip.setPixelColor(i, strip.Color(0,0,0));
}
strip.show();
}

voidsetup(){
Serial.begin(115200);
strip.begin();
strip.show();

dht.begin();
pinMode(BUTTON_PIN,INPUT);

WiFi.begin(ssid,password);
Serial.print("Connecting.");
while(WiFi.status()!=WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("connected");
timeClient.begin();
delay(10);
}

voidloop(){
if(WiFi.status()==WL_CONNECTED){//checkWiFiconnectionstatus
intsensor_val=analogRead(LDR_PIN);
Brightness=40;
timeClient.update();
intHours;
unsignedlongunix_epoch=timeClient.getEpochTime();//getUNIXEpochtime
Second=second(unix_epoch);//getseconds
Minute=minute(unix_epoch);//getminutes
Hours=hour(unix_epoch);//gethours

if(TIME_FORMAT==12){
if(Hours>12){
Hour=Hours-12;
}
else
Hour=Hours;
}
else
Hour=Hours;
}

if(digitalRead(BUTTON_PIN)==LOW){
Show_Temp=true;
}
else
Show_Temp=false;

if(Show_Temp){
Temperature=dht.readTemperature();
Serial.println(Temperature);
clearDisplay();
writeDigit(0,Temperature/10);
writeDigit(1,Temperature%10);
writeDigit(2,10);
strip.setPixelColor(28,strip.Color(Brightness,Brightness,Brightness));
strip.show();
delay(3000);
clearDisplay();
Show_Temp=false;
}
while(millis()>time_now+period){
time_now=millis();
disp_Time();//ShowTime
}
}

voiddisp_Time(){
clearDisplay();
writeDigit(0,Hour/10);
writeDigit(1,Hour%10);
writeDigit(2,Minute/10);
writeDigit(3,Minute%10);
writeDigit(4,Second/10);
writeDigit(5,Second%10);
disp_Dash();
strip.show();
}

voiddisp_Dash(){
intdot,dash;
for(inti=0;i< 2;i++){
dot=2*(PIXEL_PER_SEGMENT*7)+i;
for(intj=0;j< PIXEL_DASH; j++) {
      dash = dot + j * (2*(PIXEL_PER_SEGMENT*7)+2);
Second%2==0?strip.setPixelColor(dash,strip.Color(0,Brightness,0)):strip.setPixelColor(dash,strip.Color(0,Brightness,0));
}
}
}

voidwriteDigit(intindex,intval){
bytedigit=digits[val];
intmargin;
if(index==0||index==1)margin=0;
if(index==2||index==3)margin=1;
if(index==4||index==5)margin=2;
for(inti=6;i>=0;i--){
intoffset=index*(PIXEL_PER_SEGMENT*7)+i*PIXEL_PER_SEGMENT+margin*2;
uint32_tcolor;
if(digit&0x01!=0){
if(index==0||index==1)color=strip.Color(Brightness,0,Brightness);
if(index==2||index==3)color=strip.Color(Brightness,0,Brightness);
if(index==4||index==5)color=strip.Color(Brightness,0,0);
}
else
color=strip.Color(0,0,0);

for(intj=offset;j< offset + PIXEL_PER_SEGMENT; j++) {
      strip.setPixelColor(j, color);
    }
    digit = digit >>1;
}
}

第10步:完整电路图(高清版本文末下载)

2c25a1f2-0e3b-11ed-ba43-dac502259ad0.png2c38a4f0-0e3b-11ed-ba43-dac502259ad0.png

第11步:PCB设计(面板部分)

2c646e6e-0e3b-11ed-ba43-dac502259ad0.png

主要的PCB设计,用于显示数字和其他字母。

点击阅读原文可以下载源文件

第12步:PCB设计(Dash部分)

2c735316-0e3b-11ed-ba43-dac502259ad0.png2c8430aa-0e3b-11ed-ba43-dac502259ad0.png

第13步:故障排除

  • DIN总是与DOUT串联在一起,如果接反了或从任何地方断开了,整个装置就会停止工作;

  • 按上面的图连接Dash;

  • 确保所有的连接都焊接好,干焊会导致数据值和颜色的改变;

  • 在焊接时,不要把印刷电路板加热太多,温度保持在300度。

第14步:完整展示

2c91e2d6-0e3b-11ed-ba43-dac502259ad0.gif

2cd82f20-0e3b-11ed-ba43-dac502259ad0.png

喜欢大家喜欢这个项目!

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    243

    文章

    24447

    浏览量

    687582
  • pcb
    pcb
    +关注

    关注

    4391

    文章

    23746

    浏览量

    420899
  • 稳压器
    +关注

    关注

    24

    文章

    4897

    浏览量

    98825

原文标题:酷,用ESP8266做一个高颜值的RGB时钟!

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) ESP8285/ESP8266芯片案例

    本,两者可以共用同套SDK,只是ESP8285内部集成了1MBFlash,SPIMode设置为DOUT,而ESP8266则需要外接Flash,并且是Din模式。除此之外,ESP828
    的头像 发表于 11-21 15:37 4081次阅读
    晶科鑫 | 国产26MHz晶振匹配Espressif(乐鑫) <b class='flag-5'>ESP</b>8285/<b class='flag-5'>ESP8266</b>芯片案例

    ESP8266ESP32开发板常见的2种下载方式

    ESP32和ESP8266是性价比很高而且使用较为广泛的的Wi-Fi模块,在物联网(IoT)领域的DIY项目中可以首先考虑这2款产品。 两款芯片都属于32位处理器。ESP32是低功耗
    的头像 发表于 11-10 20:30 364次阅读
    <b class='flag-5'>ESP8266</b>和<b class='flag-5'>ESP</b>32开发板常见的2种下载方式

    ESP8266ESP32开发板常见的2种下载方式

    开发板时需要注意网络哦,可以用手机发热点)。这里已经是安装好的ESP8266开发板,第次搜索会在右下角删除那里显示安装。 3.点击项目-加载库-管理库,添加开发板所需要的库文件
    发表于 10-24 18:04

    请问下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗

    请问下我想用ESP8685直接替换ESP8266而不用写程序,可以让ESP8685直接通过之前ESP8266的外挂的flash运行程序吗
    发表于 09-17 12:06

    ESP8266】进入透传模式后,数据间隔怎么调整,

    01.TCP客户端ESP8266透传模式发送数据是10ms发送次,(连续发送) 02.TCP服务器接收到的数据是200ms左右接收次,数据未丢失,但是更新不及时; 03.通过TC
    发表于 09-15 10:16

    【RA-Eco-RA6M4开发板评测】——4.使用ESP8266获取任意城市的天意预报

    手头上有ESP8266,闲置了很久,突然想起来可以和RA6M4开发板连接起来,使用AT指令来获取网络天气预报,于是就把它们连接起来。就有了这个帖子。 开始创建工程,打开 RA smart 配置
    发表于 07-23 19:50

    STM32+esp8266连接机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码移植)

    本教程将详细介绍如何将STM32微控制器与ESP8266Wi-Fi模块连接到机智云平台,实现温湿度数据的上传与继电器的远程控制。通过此过程,您将学会如何配置机智云平台,烧录ESP8266固件,移植
    的头像 发表于 07-15 18:54 759次阅读
    STM32+<b class='flag-5'>esp8266</b>连接机智云,上传温湿度数据并控制继电器开关(平台配置、代码生成、代码移植)

    单片机实例项目ESP8266串口WIFI

    单片机实例项目ESP8266串口WIFI,推荐下载!
    发表于 06-03 21:01

    基于STM32 HAL库与标准库的esp8266接入机智云方案(二)

    在《基于STM32HAL库与标准库的esp8266接入机智云方案()》中,我们详细介绍了硬件连接和机智云客户端的创建。本篇将重点讲解如何下载代码、分析下载的代码,并直接使用这些代码连接机智云。同时
    的头像 发表于 05-28 18:02 1127次阅读
    基于STM32 HAL库与标准库的<b class='flag-5'>esp8266</b>接入机智云方案(二)

    ESP8266烧录与机智云键配网教程

    ESP8266模块因其低成本和高性能,广泛应用于智能家居和工业自动化等领域。机智云平台提供了键配网功能,简化了设备的联网过程。本教程将详细介绍如何使用ESP8266进行烧录,并通过机智云实现
    的头像 发表于 05-24 11:04 1580次阅读
    <b class='flag-5'>ESP8266</b>烧录与机智云<b class='flag-5'>一</b>键配网教程

    stm32外部供电无法运行

    stm32f103c8t6做一个项目,之前的是STlink连接stm32通过串口打印esp8266的连接信息,能够连接WiFi并且上报数
    发表于 05-13 16:49

    【RA-Eco-RA4M2开发板评测】RA4M2 + ESP8266获取城市天气预报(

    数据,并通过串口打印输出。 我会使用到两串口,用来调试,用来连接ESP8266。具体架
    发表于 05-02 14:28

    esp8266 at device做一个网页服务器 ,运行webnet_test显示错误怎么解决?

    我现在想用esp8266 at device 做一个网页服务器 但是文件系统什么都做好了 运行webnet_test 显示下边的错误 查了论坛 说at不支持服务器 但是是20年的帖子了 现在有支持吗 如果不支持是不是换rw007就可以了
    发表于 03-07 06:47

    零知开源——ESP8266+MPU6050 实现运动姿态检测

    零知ESP8266的I2C通信        在运动姿态检测、机器人平衡控制、VR头戴设备等应用中,MPU6050(三轴加速度计+三轴陀螺仪)是常见的姿态传感器。而ESP8266
    的头像 发表于 02-20 17:54 2822次阅读
    零知开源——<b class='flag-5'>ESP8266</b>+MPU6050 实现运动姿态检测

    STM32和ESP32应该学哪个

    等等,市场占有率也很高。 ESP32相对年轻了不少,满打满算也不到 10 岁,他的前身,还得从 ESP8266 说起,都属于乐鑫科技的产品。 如果你单片机做过些物联网产品,那多多少
    的头像 发表于 02-18 09:52 1131次阅读