在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何利用ESP8266制作一個迷你功能齊全的時鐘

科技觀察員 ? 來源:Sagar Saini ? 作者:Sagar Saini ? 2022-05-13 15:05 ? 次閱讀

我準備做的是一個迷你但功能齊全的時鐘,并且還具有RGB效果和溫度監控功能。

構建

首先,我想做一個7段顯示器。但這一次需要顯示較大的數字和RGB效果。因為這可用于顯示一些讀數,例如使用Nodemcu的時鐘,使用Arduino進行溫度監控。此外,還可以選擇在每秒鐘或下一次讀數后改變顏色。

poYBAGJ-An-AN0QNAANcxItVJ7Q299.png

之前因為我使用2個LED來顯示每段數字,致使我們的眼睛無法快速準確地識別數字。意味著我們需要專注,我對設計很滿意,但現在是時候更新了。

pYYBAGJ-AnuAF6vkAATl2bPXI6Y767.png

這款迷你LED具有額定電壓:3.0v至5.5volts@16mA(每個LED)。我們的NodeMCU具有3.3伏穩壓器,可正確驅動所有LED。

LEDWS2812B3030:

我使用了ws2812Neopixelled,它帶有集成ic,因此我們可以單獨處理每個段。不僅LED是可尋址的,而且每個像素的顏色也可以改變,在0-255(8位值)之間改變數字值。

pYYBAGJ-AnaAbBoHAALjHmh8U8g864.png

這個LED有4個引腳,引腳的配置可以在上面提到的圖片中看到。此外,這些LED帶有數據輸入和數據輸出功能,這能夠使它們更有趣,通過這個我們可以加入它們來顯示文本或數據。

使用新像素LED制作7段顯示:

要制作面板,首先我們必須仔細看看實際的液晶顯示器。這樣我們就可以復制段的排列并為此設計代碼。

pYYBAGJ-AnKAebwxAAFKvm7CK7M540.png

所以在這里,段被命名為A,B,C……到G,所以為了連接所有的段,我們使用串聯數據和并聯功率的方法。所有電源線、GND和VCC與所有LED并聯。數據OUT被串聯提供給下一個Led的數據輸入。始終將第一個面板的Dout連接到第二個面板的Din。

連接:

pYYBAGJ-Am6AKbvmAAWsec_UA_c736.png

為了連接小時和分鐘面板,中間有一塊名為Dash的小PCB,包含2個LED作為二進制數字。這2個LED每秒都會發光。

poYBAGJ-AmqAclePAAUHPqmj1PM183.png

NodeMCU/ESP8266的需求:

ESP8266集成了32位Tensilica處理器,標準數字外設接口。

poYBAGJ-AmaAeQOvAAMB5m6bEy4987.png

我們的Esp8266具有板載Wi-Fi支持,通過它我們可以在沒有任何RTC(實時時鐘)模塊的情況下通過互聯網調整時間。這將減少連接并使該項目變得簡單。

如果您使用我的代碼,那么您可以在這個7段時鐘中添加2個額外功能。

1)溫濕度采用輕觸開關

在引腳13上添加DHT11傳感器,在引腳12上添加觸覺按鈕,以獲取屏幕上攝氏或華氏溫度的溫度值。

poYBAGJ-AmKAaJlcAAJVlmBU5pg329.png

使用10k電阻將按鈕引腳12連接到5伏,另一端連接到GND。表示當按鈕引腳下拉至GND時,顯示屏將顯示溫度讀數。該代碼在沒有此溫度傳感器的情況下也可以工作,因此如果您想保持簡單,則不需要這些連接。

2)在引腳A0使用LDR傳感器進行亮度控制

pYYBAGJ-AluAR3XSAAKEMrnQFS0961.png

通過在A0引腳上制作一個電阻分壓器網絡來添加一個帶有10k電阻的LDR傳感器,這將相應地改變亮度。白天亮度高,晚上亮度低。如果您不想調節亮度,該代碼也可以在沒有這些傳感器的情況下工作,它將鎖定默認設置。

7-段時鐘:

pYYBAGJ-AliARB40AAPRbiCX7Qo031.png

我在EasyEDA中為每個部分設計了電路,這里我使用3個LED。因此,每個面板總共需要21個LED才能進行此配置。我在底層制作了連接引腳,這樣第二個人就看不到連接和布線。

poYBAGJ-AlSAdju7AARTGQoerV0806.png

現在在中間連接破折號并使用下面給出的示意圖連接NodeMCU:

pYYBAGJ-AlCAScR6AARnUfjbvMA543.png

我一直在使用cirkit設計器軟件,我認為這是表達和呈現電路的最佳方式。

pYYBAGJ-AkuAHviYAAKcHIzIcl0789.png

代碼:
1)首先使用庫初始化代碼

#include
#include
#include
#include
#include
#include
#include
2) 定義所有像素、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
3) 對于時間格式,使用 Wi-Fi 連接互聯網到 ESP8266

WiFi.begin(ssid, password);
Serial.print("Connecting.");
while ( WiFi.status() != WL_CONNECTED )
4) Pixel 上的時間設置

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) 面板上的顏色設置:

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 上的觸覺開關選擇溫度模式

工作代碼:

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

#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 password
const 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 interval
NTPClient timeClient(ntpUDP, "time.nist.gov", 19800, 60000); //GMT+5:30 : 5*3600+30*60=19800

int period = 2000; //Update frequency
unsigned long time_now = 0;
int Second, Minute, Hour;

// set default brightness
int Brightness = 40;
// current temperature, updated in loop()
int Temperature;

bool Show_Temp = false;

//Digits array
byte 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 Pixels
void 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;
}
}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RGB
    RGB
    +關注

    關注

    4

    文章

    801

    瀏覽量

    58716
  • 時鐘
    +關注

    關注

    11

    文章

    1747

    瀏覽量

    131803
  • ESP8266
    +關注

    關注

    50

    文章

    962

    瀏覽量

    45332
收藏 人收藏

    評論

    相關推薦

    如何利用ESP8266和OLED顯示屏來做一個網絡時鐘

    如何利用ESP8266和OLED顯示屏來做一個網絡時鐘呢?有哪些制作步驟?
    發表于 02-15 06:11

    ESP8266-NodeMCU

    2C1.8 SPI1.9 ESP8266引腳功能ESP8266-NodeMCU引腳功能1.1 可用引腳??
    發表于 10-25 16:51 ?43次下載
    <b class='flag-5'>ESP8266</b>-NodeMCU

    esp8266 nodemcu oled_esp8266開發筆記(二):OLED顯示屏制作網絡時鐘

    大家好,我是阿普。搬運知識,分享經驗的Joker在開發筆記()中,我們已經對ESP8266有了比較基礎的了解了。這期我們用ESP8266
    發表于 12-17 18:00 ?14次下載
    <b class='flag-5'>esp8266</b> nodemcu oled_<b class='flag-5'>esp8266</b>開發筆記(二):OLED顯示屏<b class='flag-5'>制作</b>網絡<b class='flag-5'>時鐘</b>

    使用ESP8266-01制作WIFI遙控小車(

    使用ESP8266-01制作WIFI遙控小車()ESP8266簡介ESP8266有三種工作模式:STA、AP以及STA+AP。STA 模式
    發表于 01-12 19:47 ?46次下載
    使用<b class='flag-5'>ESP8266</b>-01<b class='flag-5'>制作</b>WIFI遙控小車(<b class='flag-5'>一</b>)

    如何利用ESP8266制作簡單的四軸飛行器

    這個項目里我將向您展示如何使用ESP8266(12e)制作四軸飛行器,我們使用ESP8266作為飛行控制器。并且據說這架無人機可以爬墻,你是不是很震驚?開玩笑的,讓我們繼續往下看吧!
    的頭像 發表于 05-07 17:27 ?5175次閱讀
    如何<b class='flag-5'>利用</b><b class='flag-5'>ESP8266</b><b class='flag-5'>制作</b><b class='flag-5'>一</b><b class='flag-5'>個</b>簡單的四軸飛行器

    如何使用ESP8266制作可配置的Web服務器

    在這個項目中,我們首先研究如何在 Arduino IDE 中安裝 ESP8266 插件,然后使用 ESP8266 制作可配置的 Web 服務器。
    的頭像 發表于 05-10 15:18 ?1.3w次閱讀
    如何使用<b class='flag-5'>ESP8266</b><b class='flag-5'>制作</b>可配置的Web服務器

    ESP8266迷你測試板開源資料分享

    電子發燒友網站提供《ESP8266迷你測試板開源資料分享.zip》資料免費下載
    發表于 07-01 15:18 ?2次下載
    <b class='flag-5'>ESP8266</b><b class='flag-5'>迷你</b>測試板開源資料分享

    stm32和esp8266上的簡單時鐘

    電子發燒友網站提供《stm32和esp8266上的簡單時鐘.zip》資料免費下載
    發表于 07-27 11:24 ?4次下載
    stm32和<b class='flag-5'>esp8266</b>上的簡單<b class='flag-5'>時鐘</b>

    ESP8266矩陣時鐘PCB設計

    電子發燒友網站提供《ESP8266矩陣時鐘PCB設計.zip》資料免費下載
    發表于 08-05 10:24 ?7次下載
    <b class='flag-5'>ESP8266</b>矩陣<b class='flag-5'>時鐘</b>PCB設計

    ESP8266迷你系統開源分享

    電子發燒友網站提供《ESP8266迷你系統開源分享.zip》資料免費下載
    發表于 08-08 10:07 ?7次下載
    <b class='flag-5'>ESP8266</b><b class='flag-5'>迷你</b>系統開源分享

    BIM時鐘ESP8266開源項目

    電子發燒友網站提供《BIM時鐘ESP8266開源項目.zip》資料免費下載
    發表于 08-16 11:18 ?2次下載
    BIM<b class='flag-5'>時鐘</b><b class='flag-5'>ESP8266</b>開源項目

    制作MQTT ESP8266家庭自動化項目

    電子發燒友網站提供《制作MQTT ESP8266家庭自動化項目.zip》資料免費下載
    發表于 11-09 11:15 ?0次下載
    <b class='flag-5'>制作</b><b class='flag-5'>一</b><b class='flag-5'>個</b>MQTT <b class='flag-5'>ESP8266</b>家庭自動化項目

    基于ESP8266的NTP時鐘

    電子發燒友網站提供《基于ESP8266的NTP時鐘.zip》資料免費下載
    發表于 11-11 10:06 ?5次下載
    基于<b class='flag-5'>ESP8266</b>的NTP<b class='flag-5'>時鐘</b>

    使用ESP8266制作基于物聯網的數字世界時鐘

    電子發燒友網站提供《使用ESP8266制作基于物聯網的數字世界時鐘.zip》資料免費下載
    發表于 07-05 10:47 ?36次下載
    使用<b class='flag-5'>ESP8266</b><b class='flag-5'>制作</b>基于物聯網的數字世界<b class='flag-5'>時鐘</b>

    ESP8266網絡天氣時鐘OLED顯示

    基于ESP8266實現網絡獲取天氣和時鐘并OLED顯示
    的頭像 發表于 06-28 04:46 ?1424次閱讀
    <b class='flag-5'>ESP8266</b>網絡天氣<b class='flag-5'>時鐘</b>OLED顯示
    主站蜘蛛池模板: 国内一国产农村妇女一级毛片 | 97色网| 亚洲午夜精品在线 | 狠狠色伊人亚洲综合第8页 狠狠色依依成人婷婷九月 狠狠色影院 | 视频一区二区在线播放 | 边做饭边被躁欧美三级小说 | 国产午夜精品福利久久 | 激情春色网| 久草视频资源在线 | www国产永久免费视频看看 | 操碰人人 | 欧美日韩亚洲国内综合网俺 | 最新午夜宅男 | 不卡一区在线观看 | 亚洲香蕉电影 | 手机看片久久青草福利盒子 | 樱桃磁力bt天堂 | 性网站免费 | h录音 国产 在线 | tube69xxxxhd日本 | 手机看片日韩在线 | 在线电影天堂 | 免费高清一级欧美片在线观看 | 深夜大尺度视频在线观看 | 日本特黄a级高清免费大片18 | 亚色在线 | 一级特黄特黄的大片免费 | 欧美123区| 国产亚洲婷婷香蕉久久精品 | 久久久久久天天夜夜天天 | 日本高清色视频www 日本高清色视频在线观看免费 | 人人插人人干 | 国精视频一区二区视频 | 天堂中文资源在线观看 | 午夜美女久久久久爽久久 | 午夜寂寞影 | 高清人人天天夜夜曰狠狠狠狠 | 中文字幕色婷婷在线精品中 | 国产精品特黄毛片 | 男男np主受高h啪啪肉 | 性欧美高清强烈性视频 |