久久综合九色综合97婷婷-美女视频黄频a免费-精品日本一区二区三区在线观看-日韩中文无码有码免费视频-亚洲中文字幕无码专区-扒开双腿疯狂进出爽爽爽动态照片-国产乱理伦片在线观看夜-高清极品美女毛茸茸-欧美寡妇性猛交XXX-国产亚洲精品99在线播放-日韩美女毛片又爽又大毛片,99久久久无码国产精品9,国产成a人片在线观看视频下载,欧美疯狂xxxx吞精视频

有趣生活

當(dāng)前位置:首頁>時(shí)尚>esp8266點(diǎn)陣時(shí)鐘制作(基于ESP8266做一個(gè)漂亮的迷你時(shí)鐘)

esp8266點(diǎn)陣時(shí)鐘制作(基于ESP8266做一個(gè)漂亮的迷你時(shí)鐘)

發(fā)布時(shí)間:2024-07-31閱讀(9)

導(dǎo)讀本周分享一個(gè)迷你但功能齊全的時(shí)鐘項(xiàng)目,帶有RGB效果,兼具溫度監(jiān)測功能。第1步:材料準(zhǔn)備NodeMCU(ESP8266)定制PCB板連接線電池5v構(gòu)思用No....

本周分享一個(gè)迷你但功能齊全的時(shí)鐘項(xiàng)目,帶有RGB效果,兼具溫度監(jiān)測功能。

第1步:材料準(zhǔn)備

  • NodeMCU (ESP8266)
  • 定制PCB板
  • 連接線
  • 電池 5v

構(gòu)思

用NodeMCU顯示時(shí)間,用Arduino監(jiān)測溫度;可以選擇在每秒鐘改變顯示的顏色。

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

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

第2步:LED WS2812B 3030

這里使用了WS2812 NeoPixel Led,它帶有集成的IC,這樣我們就可以對(duì)每段進(jìn)行單獨(dú)尋址。不僅LED是可尋址的,而且還可以改變每個(gè)像素的顏色(改變0-255(8位值)的數(shù)字值)。

LED有4個(gè)引腳,此外,這些LED具有數(shù)據(jù)輸入和數(shù)據(jù)輸出功能,通過這些功能,我們可以把它們連接起來,顯示文字或數(shù)據(jù)。

第3步:使用NeoPixel Led制作

要制作這個(gè)面板,首先我們可以仔細(xì)觀察一下實(shí)際的液晶顯示器。這樣我們就可以復(fù)制段的排列,并為它編寫代碼。

在上圖,各段被命名為A、B、C、D、E、F、G,為了連接所有的段,我們使用串聯(lián)數(shù)據(jù)和平行電源的方法:所有的電源線,GND和VCC被并聯(lián)到所有的LED上;數(shù)據(jù)輸出被提供給串聯(lián)的下一個(gè)LED的數(shù)據(jù)輸入;把第一個(gè)面板的Dout連接到第二個(gè)面板的Din。

第4步:連接

為了連接小時(shí)和分鐘的面板,我們在兩者之間放一個(gè)小的PCB板,就是上圖中的"Dash"。

第5步:NodeMCU/ESP8266

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)目變得更簡單一些。

如果你使用下面的代碼,那么可以在這個(gè)7段時(shí)鐘中添加兩個(gè)額外的功能。

第6步:溫度和濕度

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

用一個(gè)10k電阻將按鈕的12號(hào)針腳連接到5V,另一端連接到GND。也就是說,當(dāng)按鈕針腳被拉到GND時(shí),顯示器將顯示溫度讀數(shù)。

如果沒有這個(gè)溫度傳感器,代碼也可以正常運(yùn)行,所以如果你想保持盡可能簡單的話,可以不需要這些連接。

第7步:亮度控制

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

白天的亮度高,晚上的亮度低。

如果你不想要可調(diào)節(jié)的亮度,下面的代碼也可以在沒有這些傳感器的情況下正常運(yùn)行,它會(huì)保持默認(rèn)設(shè)置。

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

我在EasyEDA中設(shè)計(jì)了電路,這里使用了3個(gè)LED。因此,每塊面板總共需要21個(gè)LED。

底層做了連接引腳,這樣別人就看不到連接和布線了。

CPL、BOM和Gerber文件在GitHub倉庫:

https://github.com/halfstudents/ESP8266-Wi-Fi-based-7-Segment-Display-clock

或者也可以在文末打包下載。

第9步:連接

使用上面的原理圖連接NodeMCU。

這邊用到的軟件是Cirkit Designer,一個(gè)非常不錯(cuò)的軟件。

平時(shí)你可以在學(xué)校演示的時(shí)候用這個(gè)線圖、面包板電路以及創(chuàng)建一些自定義組件。另外,它最近還增加了代碼編譯、BOM和一些新的元件。

使用Cirkit Designer,我們可以繪制出逼真的電路圖,這些電路圖與物料清單相連接,這樣就可以無縫訂購電路中的部件。

Windows、Linux、Mac都可以使用,下載地址:https://www.cirkitstudio.com/download.html

第10步:代碼部分
  1. 首先用librarie初始化代碼:

#include <ESP8266WiFi.h>#include <Adafruit_NeoPixel.h>#include <WiFiUDP.h>#include <NTPClient.h>#include <TimeLib.h>#include <DHT.h>#include <Adafruit_Sensor.h>

  1. 定義所有Pixels、I/O引腳、傳感器引腳:

#define PIXEL_PER_SEGMENT 3 // Number of LEDs in each Segment#define PIXEL_DIGITS 4 // Number of connected Digits#define PIXEL_PIN 2 // GPIO Pin#define PIXEL_DASH 1 // Binary segment#define LDR_PIN A0 // LDR pin#define DHT_PIN 13 // DHT Sensor pin#define BUTTON_PIN 12 // Button pin

  1. 調(diào)整時(shí)間,使用Wi-Fi連接互聯(lián)網(wǎng)到ESP8266:

WiFi.begin(SSID, password);Serial.print("Connecting.");while ( WiFi.status() != WL_CONNECTED )

  1. Pixel上的時(shí)間設(shè)置:

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

完整代碼:

#include <ESP8266WiFi.h>#include <Adafruit_NeoPixel.h>#include <WiFiUdp.h>#include <NTPClient.h>#include <TimeLib.h>#include <DHT.h>#include <Adafruit_Sensor.h>#define PIXEL_PER_SEGMENT 3 // Number of LEDs in each Segment#define PIXEL_DIGITS 4 // Number of connected Digits #define PIXEL_PIN 2 // GPIO Pin#define PIXEL_DASH 1 // Binary segment#define LDR_PIN A0 // LDR pin#define DHT_PIN 13 // DHT Sensor pin#define BUTTON_PIN 12 // Button pin// Uncomment the type of sensor in use#define DHT_TYPE DHT11 // DHT 11//#define DHT_TYPE DHT22 // DHT 22 (AM2302)//#define DHT_TYPE DHT21 // DHT 21 (AM2301)#define TIME_FORMAT 12 // 12 = 12 hours format || 24 = 24 hours format Adafruit_NeoPixel strip = Adafruit_NeoPixel((PIXEL_PER_SEGMENT * 7 * PIXEL_DIGITS) (PIXEL_DASH * 2), PIXEL_PIN, NEO_GRB NEO_KHZ800);DHT dht(DHT_PIN, DHT_TYPE);// set Wi-Fi SSID and passwordconst char *ssid = "Hackster";const char *password = "*************";WiFiUDP ntpUDP;// time.nist.gov is used (default server) with 1 hour offset (3600 seconds) 60 seconds (60000 milliseconds) update intervalNTPClient timeClient(ntpUDP, "time.nist.gov", 19800, 60000); //GMT 5:30 : 5*3600 30*60=19800int period = 2000; //Update frequencyunsigned long time_now = 0;int Second, Minute, Hour;// set default brightnessint Brightness = 40;// current temperature, updated in loop()int Temperature;bool Show_Temp = false;//Digits arraybyte digits[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};//Clear all the Pixelsvoid clearDisplay() { for (int i = 0; i < strip.numPixels(); i ) { strip.setPixelColor(i, strip.Color(0, 0, 0)); } strip.show();}void setup() { 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);}void loop() { if (WiFi.status() == WL_CONNECTED) { // check WiFi connection status int sensor_val = analogRead(LDR_PIN); Brightness =40; timeClient.update(); int Hours; unsigned long unix_epoch = timeClient.getEpochTime(); // get UNIX Epoch time Second = second(unix_epoch); // get seconds Minute = minute(unix_epoch); // get minutes Hours = hour(unix_epoch); // get hours 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(); // Show Time }}void disp_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();}void disp_Dash() { int dot, dash; for (int i = 0; i < 2; i ) { dot = 2 * (PIXEL_PER_SEGMENT * 7) i; for (int j = 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)); } }}void writeDigit(int index, int val) { byte digit = digits[val]; int margin; if (index == 0 || index == 1 ) margin = 0; if (index == 2 || index == 3 ) margin = 1; if (index == 4 || index == 5 ) margin = 2; for (int i = 6; i >= 0; i--) { int offset = index * (PIXEL_PER_SEGMENT * 7) i * PIXEL_PER_SEGMENT margin * 2; uint32_t color; 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 (int j = offset; j < offset PIXEL_PER_SEGMENT; j ) { strip.setPixelColor(j, color); } digit = digit >> 1; }}

第11步:完整電路圖

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

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

這個(gè)項(xiàng)目涉及到的所有文件,可以在文末打包下載。

第13步:故障處理

  1. “Din”與“Dout”是串聯(lián)在一起的,如果接反了或從哪里斷開了,整個(gè)裝置就會(huì)停止工作。
  2. 如上圖所示,連接“Dash”部分。
  3. 確保所有的連接都焊接好了,干焊會(huì)導(dǎo)致數(shù)據(jù)值和顏色的改變。
  4. 在焊接的時(shí)候,注意PCB溫度不要太高。

原文鏈接:https://www.instructables.com/ESP8266-Wi-Fi-Based-7-Segment-Display-Clock/

GitHub倉庫鏈接:https://github.com/halfstudents/ESP8266-Wi-Fi-based-7-Segment-Display-clock

譯文首發(fā)于DF創(chuàng)客社區(qū):https://mc.dfrobot.com.cn/thread-313635-1-1.html

項(xiàng)目作者:sainisagar7294

歡迎分享轉(zhuǎn)載→http://www.avcorse.com/read-363631.html

Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號(hào)-5 TXT地圖HTML地圖XML地圖