0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

用ESP8266做一個(gè)高顏值的RGB時(shí)鐘的項(xiàng)目

GReq_mcu168 ? 來源:DF創(chuàng)客社區(qū) ? 作者:sainisagar7294 ? 2022-07-28 14:17 ? 次閱讀

給大家分享一個(gè)用ESP8266做一個(gè)高顏值的RGB時(shí)鐘的項(xiàng)目!

這個(gè)時(shí)鐘還具有自動亮度控制功能并配備了溫度傳感器

材料準(zhǔn)備

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

第1步: 準(zhǔn)備工作

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

Neo Pixel是可尋址的LED,我們可以通過編程,讓它顯示任何一種顏色或者數(shù)字。

Neo Pixel有不同的smd封裝,這個(gè)項(xiàng)目使用的是Ws2812b-5050 mini RGB。

這種迷你LED的額定電壓為3.0V到5.5V,電流為16mA(每個(gè)LED)。

NodeMCU有3.3V的穩(wěn)壓器,可以正常驅(qū)動所有的LED。

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

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

在這里,我們需要把所有的電源并聯(lián)起來,把所有的數(shù)據(jù)連接串聯(lián)起來,使用7段顯示方法,如上圖連接所有的LED。

每段有2個(gè)LED,整個(gè)面板總共有14個(gè)LED。

我們需要4個(gè)面板來顯示時(shí)間(2個(gè)顯示小時(shí),2個(gè)顯示分鐘)。

當(dāng)然還可以再連接兩個(gè)面板來顯示秒/任何其他數(shù)值,或者溫度。

不管怎么連接,記住總是要把第一個(gè)面板的DOUT連接到第二個(gè)面板的DIN

第3步:連接儀表盤

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

為了連接小時(shí)和分鐘面板,在兩面板之間有一個(gè)小的PCB板,名為Dash,包含了2個(gè)LED作為二進(jìn)制數(shù)字,這2個(gè)LED燈每隔一秒就會發(fā)光一次。

第4步:NodeMCU/ESP8266介紹

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

ESP8266集成了一個(gè)32位Tensilica處理器,標(biāo)準(zhǔn)的數(shù)字外圍接口。

我們的ESP8266具有板載Wi-Fi支持,通過它我們可以連上互聯(lián)網(wǎng)調(diào)整時(shí)間,而不需要任何RTC(實(shí)時(shí)時(shí)鐘)模塊。

這樣子的話可以減少連接,使整個(gè)項(xiàng)目變得更簡單一些。

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

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

如果使用本文提供的代碼,那么我們可以在這個(gè)7段時(shí)鐘中增加2個(gè)額外的功能:

  1. 使用觸覺開關(guān)的溫度和濕度顯示

在13號針腳上添加一個(gè)DHT11傳感器,在12號針腳上添加一個(gè)觸覺按鈕,可以在屏幕上獲得攝氏或華氏的溫度值。

用一個(gè)10k電阻將按鈕的第12針腳連接到5V,另一端連接到GND。也就是說,當(dāng)按鈕針腳被拉到GND時(shí),顯示器將顯示溫度讀數(shù)。如果沒有這個(gè)溫度傳感器,代碼也可以工作,所以如果你想讓項(xiàng)目簡單一點(diǎn),也可以不需要這些連接。

  1. 使用引腳A0的LDR傳感器進(jìn)行亮度控制
2b99f6f2-0e3b-11ed-ba43-dac502259ad0.png

通過在A0引腳上做一個(gè)電阻分壓器網(wǎng)絡(luò),添加一個(gè)帶有10k電阻的LDR傳感器,可以相應(yīng)地改變亮度。

白天的亮度高,晚上的亮度低。如果你不想要可調(diào)節(jié)亮度,這部分代碼也可以在沒有這些傳感器的情況下工作,它將會鎖定在默認(rèn)設(shè)置。

第6步:視頻演示

第7步:7段時(shí)鐘

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

現(xiàn)在,我們有4個(gè)面板和一個(gè)Dash(儀表盤)。

根據(jù)上面GIF圖來連接面板和儀表盤;將2個(gè)面板串聯(lián)在一起。

然后使用上面給出的原理圖連接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. 對于時(shí)間格式,使用Wi-Fi把ESP8266連接到互聯(lián)網(wǎng):

WiFi.begin(ssid,password);
Serial.print("Connecting.");
while(WiFi.status()!=WL_CONNECTED)
  1. 時(shí)間設(shè)置:
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. 面板上的顏色設(shè)置:

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);

這只是一個(gè)簡單的介紹,同時(shí)代碼還有溫度和自動時(shí)間選項(xiàng)。

溫度模式可以通過數(shù)字針腳12的開關(guān)來選擇。

第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;i0,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;i2;i++){
dot=2*(PIXEL_PER_SEGMENT*7)+i;
for(intj=0;j2*(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>1;
}
}

第10步:完整電路圖(高清版本文末下載

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

第11步:PCB設(shè)計(jì)(面板部分)

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

主要的PCB設(shè)計(jì),用于顯示數(shù)字和其他字母。

點(diǎn)擊閱讀原文可以下載源文件。

第12步:PCB設(shè)計(jì)(Dash部分)

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

第13步:故障排除

  • DIN總是與DOUT串聯(lián)在一起,如果接反了或從任何地方斷開了,整個(gè)裝置就會停止工作;

  • 按上面的圖連接Dash;

  • 確保所有的連接都焊接好,干焊會導(dǎo)致數(shù)據(jù)值和顏色的改變;

  • 在焊接時(shí),不要把印刷電路板加熱太多,溫度保持在300度。

第14步:完整展示

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

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

喜歡大家喜歡這個(gè)項(xiàng)目!

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23333

    瀏覽量

    662174
  • pcb
    pcb
    +關(guān)注

    關(guān)注

    4324

    文章

    23148

    瀏覽量

    399056
  • 穩(wěn)壓器
    +關(guān)注

    關(guān)注

    24

    文章

    4254

    瀏覽量

    94003

原文標(biāo)題:酷,用ESP8266做一個(gè)高顏值的RGB時(shí)鐘!

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    ESP8266 太空人動畫的 OLED 顯示

    ESP8266 太空人動畫的 OLED 顯示
    的頭像 發(fā)表于 10-08 15:06 ?319次閱讀
    <b class='flag-5'>ESP8266</b> 太空人動畫的 OLED 顯示

    STM32 ESP8266阿里云鏈接源碼

    stm32F103C8T6 ESP8266 物聯(lián)網(wǎng)電表 登錄阿里云
    發(fā)表于 08-29 14:21 ?6次下載

    esp32和esp8266代碼共用嗎

    本文將介紹ESP32和ESP8266兩款流行的微控制器在代碼共用性方面的可能性與差異性。 、引言 隨著物聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,越來越多的智能設(shè)備開始進(jìn)入我們的生活。其中,ESP32和
    的頭像 發(fā)表于 08-19 18:23 ?1319次閱讀

    esp8266esp32區(qū)別是什么

    以下是關(guān)于ESP8266ESP32的主要區(qū)別: 處理器和架構(gòu) : ESP8266 :使用個(gè)Tensilica L106 80MHz的處理
    的頭像 發(fā)表于 08-19 18:16 ?5785次閱讀

    ESP8266需要燒錄固件庫嘛

    需要。ESP8266款非常流行的Wi-Fi模塊,廣泛應(yīng)用于物聯(lián)網(wǎng)項(xiàng)目中。它具有低成本、低功耗、易于編程等特點(diǎn),因此受到了許多開發(fā)者的喜愛。在開發(fā)ESP8266
    的頭像 發(fā)表于 08-19 17:30 ?997次閱讀

    esp8266不燒錄可以使用嗎

    ESP8266款非常流行的Wi-Fi模塊,廣泛應(yīng)用于物聯(lián)網(wǎng)項(xiàng)目中。然而,如果不進(jìn)行燒錄,ESP8266將無法正常工作。 1. ESP8266
    的頭像 發(fā)表于 08-19 17:28 ?945次閱讀

    esp8266wifi模塊怎么連接手機(jī)

    ESP8266 WiFi模塊連接手機(jī)主要可以通過兩種方式實(shí)現(xiàn): 通過路由器連接(STA模式)和直接作為熱點(diǎn)連接(AP模式) 。以下是兩種連接方式的步驟: 、通過路由器連接(STA模式) 配置
    的頭像 發(fā)表于 08-19 17:27 ?3418次閱讀

    機(jī)智云ESP8266開發(fā)板RGB彩燈控件

    隨著智能家居技術(shù)的迅猛發(fā)展,RGB彩燈控件正逐漸成為現(xiàn)代家庭不可或缺的部分。在這潮流中,機(jī)智云(Gizwits)的ESP8266開發(fā)板RGB
    的頭像 發(fā)表于 08-09 08:10 ?443次閱讀
    機(jī)智云<b class='flag-5'>ESP8266</b>開發(fā)板<b class='flag-5'>RGB</b>彩燈控件

    如何對ESP8266進(jìn)行降頻?

    大家好,我正在做一個(gè)電池供電的物聯(lián)網(wǎng)項(xiàng)目,正在考慮使用 esp8266。我需要讓 esp 直運(yùn)行,以不斷記錄來自我的傳感器的數(shù)據(jù)。不幸的是
    發(fā)表于 07-19 10:55

    可以使用esp8266處理實(shí)時(shí)視頻和音頻流到服務(wù)器到移動設(shè)備?

    各位專家,您好: 我是 esp8266 的新手,我正在做一個(gè)項(xiàng)目,我需要使用 esp8266 使用服務(wù)器到移動設(shè)備處理實(shí)時(shí)視頻和音頻流??梢允褂?e
    發(fā)表于 07-19 08:40

    ESP8266EX開發(fā)板PWM非常不準(zhǔn)確是怎么回事?

    , 根據(jù)開發(fā)文檔,我編譯下載了 IOT_DEMO 控制燈的案例到開發(fā)板,實(shí)際測試 RGB 的3路PWM控制信號,發(fā)現(xiàn)PWM非常不準(zhǔn)確(根據(jù)代碼查看估計(jì)ESP8266可能不是硬件PWM定時(shí)器實(shí)現(xiàn)
    發(fā)表于 07-12 08:16

    開源項(xiàng)目!ESP8266 DIY會爬墻的無人機(jī)

    的錢買飛行控制器,怎么辦?我們可以自己做一個(gè)自己的飛行控制器。之前作者已經(jīng)做了個(gè)非常便宜的飛行控制器,使用了ESP8266,鏈接如下:<span>https
    發(fā)表于 07-04 09:22

    ESP8266網(wǎng)絡(luò)天氣時(shí)鐘OLED顯示

    基于ESP8266實(shí)現(xiàn)網(wǎng)絡(luò)獲取天氣和時(shí)鐘并OLED顯示
    的頭像 發(fā)表于 06-28 04:46 ?1353次閱讀
    <b class='flag-5'>ESP8266</b>網(wǎng)絡(luò)天氣<b class='flag-5'>時(shí)鐘</b>OLED顯示

    國產(chǎn)低成本W(wǎng)i-Fi SoC解決方案芯片ESP8266ESP8285對比差異

    ESP8266ESP8285對比差異 ESP8285相當(dāng)于在ESP8266基礎(chǔ)上多加了1/2MB Flash, ESP8285與
    的頭像 發(fā)表于 05-17 11:44 ?1442次閱讀
    國產(chǎn)低成本W(wǎng)i-Fi SoC解決方案芯片<b class='flag-5'>ESP8266</b>與<b class='flag-5'>ESP</b>8285對比差異

    使用Wi-Fi ESP8266方案模組接入云平臺

    ESP8266的模塊芯片是基于無線通信協(xié)議的UARTWi-Fi透傳模塊芯片,支持802.11b/g/n的無線標(biāo)準(zhǔn),并帶有三種可選擇的工作模式。ESP8266模塊的控制是通過AT指令的形式控制,例如
    的頭像 發(fā)表于 05-10 08:20 ?1904次閱讀
    使用Wi-Fi <b class='flag-5'>ESP8266</b>方案模組接入云平臺