那曲檬骨新材料有限公司

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

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

3天內不再提示

如何利用ESP8266和Neopixel Ring實現時鐘的彩色顯示

科技觀察員 ? 來源:Mike McRoberts ? 作者:Mike McRoberts ? 2022-04-06 15:30 ? 次閱讀

本文將介紹一個基于 ESP8266(從 NTP 服務器獲取時間)和 Neopixel Ring 的簡單時鐘,以彩色顯示小時、分鐘和秒。

介紹
為了做出這個簡單的時鐘,我買了一個 24 LED Neopixel Ring 。我最初計劃將它用于 Cheerlights 項目,但在制作了 Cheerlight 之后,我認為這是對 Neopixel Ring的嚴重浪費。因此,在一周后我下定了決心。我最終決定用 Ring 制作一個時鐘。

你需要什么
ESP8266 與 wifi 一樣非常適合此功能,因此可以通過 WiFi 獲取時間,并且還可以控制 Neopixel Ring。我使用 Wemos D1 Mini,因為它們非常易于使用,具有用于電源和數據的微型 USB 連接,只需幾美元,并且可以很容易地與 Arduino IDE 一起使用。這是一個非常簡單的項目,代碼簡單,電路方式不多。

Neopixel 環有 3 個連接:5v、接地和數據。您需要做的就是將 3 根電線焊接到環上的這 3 個焊盤上。D1 Mini 上的 VCC 和 Gnd 連接到 5v 和接地,數據引腳可以連接到任何輸出引腳。

poYBAGJNQM6AM6k0AAMl6ulhWYA058.png

對于代碼,您將需要 3 個庫:

pYYBAGJNQNSAS1ZsAAAWRDKs56o103.png

Adafruit_NeoPixel庫可以從https://github.com/adafruit/Adafruit_NeoPixel下載

TimeClient庫是 Squix 氣象站代碼的一部分,可以從https://github.com/squix78/esp8266-weather-station下載

只需將TimeClient.cpp和 TimeClient.h 文件復制到您的草圖文件夾中。

TimeClient 庫通過 WiFi 連接到互聯網并訪問www.google.com來工作。然后它會抓取網頁的標題以從標題中獲取時間和日期。

當您將 ESP8266 安裝為可識別的板時,ESP8266WiFi庫隨 Arduino IDE 一起提供。在開始項目之前,不要忘記使用 Arduino IDE Boards Manager 安裝 ESP8266 文件。

第 1 步
我們將使用 D1 Mini 上的 Pin 5 作為數據線。

#define PIN D5

我們需要在我們的代碼中跟蹤最后一次來自互聯網的時間更新是什么時候發生的,以及自一秒前以來已經過了多長時間(以跟蹤秒數)。

long lastUpdate = millis();
long lastSecond = millis();

小時、分鐘和秒存儲在字符串變量中。

String hours, minutes, seconds;

以及我們跟蹤的當前秒、分和小時。

int currentSecond, currentMinute, currentHour;

字符數組用于存儲您的 WiFi SSID 和密碼。在此處輸入您自己的詳細信息

char ssid[] = "xxxxxxx"; // your network SSID (name)
char pass[] = "xxxxxxx"; // your network password

我住在倫敦,所以我與 UTC 有 0 小時的偏移,但夏令時除外,它是 1 小時。為您自己的時區設置偏移量。

const float UTC_OFFSET = 0;

我們創建一個 timeClient 對象并將 UTC 偏移量傳遞給它。

TimeClient timeClient(UTC_OFFSET);

然后創建一個 NeoPixel 對象,將其命名為“strip”,并將 LED 的數量和我們用于數據線的引腳傳遞給它。

Adafruit_NeoPixel strip = Adafruit_NeoPixel(24, PIN);

第 2 步
在設置功能中,我們將首先打開串行通信以進行調試。

void setup()
{
Serial.begin(115200);

然后需要初始化 NeoPixel 環,我們將亮度設置為 50%

strip.begin();
strip.setBrightness(128);

在我們執行 .show 命令之前,環上什么都不會發生。

strip.show();

接下來我們連接到您的 WiFi:

WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {

然后從 timeClient 庫中更新時間。

timeClient.updateTime();

接下來我們運行我們自己的函數 updateTime(); 它調用庫函數來獲取當前的小時、分鐘和秒。

updateTime() ;

最后,在主循環之前,我們檢索并存儲 millis() 的當前值,以便我們可以跟蹤自上次從互聯網更新時間以來已經過去了多長時間,并且還可以跟蹤經過的秒數,因此第二個可以更新。

lastUpdate = millis();
lastSecond = millis();
}

第 3 步
設置功能完成。接下來主循環函數將運行。

void loop()
{

如果距離我們上次更新時間已經過去了 1,800,000 毫秒(30 分鐘),我們將再次從 Internet 更新時間。

if ((millis() - lastUpdate) > 1800000) updateTime();

顯示器上的小時、分鐘和秒每秒都會更新一次,因此我們需要檢查自上次更新顯示器以來是否經過了 1000 毫秒。如果是,則執行 if 語句中的代碼。

if ((millis() - lastSecond) > 1000)
{

第 4 步
“手”的顏色是:

紅色 = 小時

綠色 = 分鐘

藍色 = 秒

.setPixelColor 命令用于設置“手”的顏色。我使用的戒指有 24 個 RGB LED,因此秒和分鐘除以 2.5,因此它們顯示在戒指的正確象限上,小時(24 小時格式)除以 2。在時間更改之前,我們設置當前'hands' 到 OFF 以清除最后的位置。

strip.setPixelColor(currentSecond / 2.5, 0, 0, 0);
strip.setPixelColor(currentMinute / 2.5, 0, 0, 0);
strip.setPixelColor(currentHour * 2, 0, 0, 0);
strip.show();

現在存儲 millis() 的當前值。

lastSecond = millis();

接下來,存儲在 currentSecond 中的值增加 1。然后我們檢查秒數是否超過 59,如果是,則將它們設置回 0。發生這種情況時,我們還將分鐘數增加 1 并執行相同的檢查。如果分鐘超過 59,那么我們也將小時增加 1。

currentSecond++;
if (currentSecond > 59)
{ currentSecond = 0;
currentMinute++;
if (currentMinute > 59) {
currentMinute = 0;
currentHour++;
if (currentHour > 12) currentHour = 0;
}
}

雖然沒有必要,但我將當前時間打印到串行監視器窗口以進行調試。我使用 String 對象來生成時間字符串。

String currentTime = String(currentHour) + ':' + String(currentMinute) + ':' + String(currentSecond);
Serial.println(currentTime);

現在已經更新了秒、分和小時,我們可以將相關的“指針”設置為它們各自的 RGB 值。

strip.setPixelColor(currentSecond / 2.5, 0, 0, 255);
strip.setPixelColor(currentMinute / 2.5, 0, 255, 0);
strip.setPixelColor(currentHour * 2, 255, 0, 0);
strip.show();

最后,我們創建了自己的函數 updateTime()。這會在開始時更新,然后每 30 分鐘更新一次,以保持準確的時間。

void updateTime()
{

我們從 timeClient 庫中獲取小時、分鐘和秒。

hours = timeClient.getHours();
minutes = timeClient.getMinutes();
seconds = timeClient.getSeconds();

并將這些值存儲為整數(它們從 timeClient 庫作為字符串返回)。24 小時轉換為 12 小時格式。

currentHour = hours.toInt();
if (currentHour > 12) currentHour = currentHour - 12;
currentMinute = minutes.toInt();
currentSecond = seconds.toInt();

最后,我們希望能夠檢查自上次更新以來是否已經過去了 30 分鐘,因此我們再次存儲 millis() 的當前值。

lastUpdate = millis();

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

    關注

    11

    文章

    1746

    瀏覽量

    131795
  • ESP8266
    +關注

    關注

    50

    文章

    962

    瀏覽量

    45328
收藏 人收藏

    評論

    相關推薦

    帶有NeopixelESP8266崩潰的原因?

    - IDE:Arduino IDE首先我嘗試了一些通用的 WiFi 演示代碼來解決連接問題 -它運行良好——ESP8266 連接到我的 wifi——所以我轉向了 Neopixel 控件——那就是出現問題
    發表于 02-23 07:41

    使用esp8266實現STM32聯網(最簡單USART方法)

    到電腦上的java程序 這一篇 esp8266與STM32連接,電腦通過STM32配置esp8266實現聯網發送數據具體流程如下圖 2= esp8266怎么和STM32連接(引腳連
    發表于 11-22 11:51 ?1.3w次閱讀

    利用ESP8266 WiFi模塊打造科進行遙控的圣誕之星

    ESP8266 WiFi模塊、WS2812、LED(“NeoPixel”)、木材和鋁制造了幾顆LED明星,還能手機遙控哦!
    的頭像 發表于 05-23 06:31 ?4286次閱讀

    使用ESP8266模塊和12864顯示實現網絡時鐘的資料合集

    本文檔的主要內容詳細介紹的是使用ESP8266模塊和12864顯示實現網絡時鐘的資料合集。
    發表于 11-02 08:00 ?27次下載
    使用<b class='flag-5'>ESP8266</b>模塊和12864<b class='flag-5'>顯示</b>屏<b class='flag-5'>實現</b>網絡<b class='flag-5'>時鐘</b>的資料合集

    詳細實現ESP8266WIFI時鐘(基于51單片機)

    寫了一下詳細教程時鐘還是用51單片機的定時器,esp8266只是用來實現校時的所以需要先實現一個51單片機的本地時鐘然后添加網絡校時功能就行
    發表于 11-23 16:51 ?45次下載
    詳細<b class='flag-5'>實現</b><b class='flag-5'>ESP8266</b>WIFI<b class='flag-5'>時鐘</b>(基于51單片機)

    stm32和esp8266上的簡單時鐘

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

    ESP8266 WIFI模擬GPS時鐘信號

    電子發燒友網站提供《ESP8266 WIFI模擬GPS時鐘信號.zip》資料免費下載
    發表于 08-04 14:33 ?15次下載
    <b class='flag-5'>ESP8266</b> WIFI模擬GPS<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設計

    BIM時鐘ESP8266開源項目

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

    SSD1306 OLED上的ESP8266 NTP時鐘

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

    基于ESP8266的NTP時鐘

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

    使用ESP8266驅動WS2812彩燈

    本篇介紹ESP8266使用NeoPixel庫來驅動IOT Kit板載WS2812彩燈。
    的頭像 發表于 05-19 14:31 ?3242次閱讀
    使用<b class='flag-5'>ESP8266</b>驅動WS2812彩燈

    ESP8266初次如何實現無線通信(基于電腦與ESP8266)

    一.需要的軟件及硬件 1.軟件 2.硬件 二.ESP8266的使用 .ESP8266的介紹 2.ESP8266進行初始AT指令的配置步驟 三.所用軟件安裝分享 ESP8266
    發表于 05-30 09:53 ?28次下載
    <b class='flag-5'>ESP8266</b>初次如何<b class='flag-5'>實現</b>無線通信(基于電腦與<b class='flag-5'>ESP8266</b>)

    ESP8266網絡天氣時鐘OLED顯示

    基于ESP8266實現網絡獲取天氣和時鐘并OLED顯示
    的頭像 發表于 06-28 04:46 ?1421次閱讀
    <b class='flag-5'>ESP8266</b>網絡天氣<b class='flag-5'>時鐘</b>OLED<b class='flag-5'>顯示</b>

    ESP8266 太空人動畫的 OLED 顯示

    ESP8266 太空人動畫的 OLED 顯示
    的頭像 發表于 10-08 15:06 ?334次閱讀
    <b class='flag-5'>ESP8266</b> 太空人動畫的 OLED <b class='flag-5'>顯示</b>
    365棋牌游戏| 威尼斯人娱乐场 五星| 海尔百家乐官网的玩法技巧和规则| 万州区| 百家乐代理网址| 百家乐官网最佳投注办法| 博彩评级网| 钱隆百家乐的玩法技巧和规则| 24山辅星水法分阴阳| 板桥市| 大发888游戏下载官网免费| 百家乐保证赢| 逍遥坊百家乐官网的玩法技巧和规则 | 海立方百家乐海立方| 百家乐官网赌博娱乐| 百家乐官网什么叫缆| 十六浦娱乐城信誉| 百家乐平注法口诀技巧| 澳门百家乐网上直赌| 梦幻城百家乐官网的玩法技巧和规则 | 大发888官网注册送58| 游戏机百家乐庄闲| 寅午戌 24山图| 网络百家乐官网大转轮| 百家乐官网视频麻将| 明升开户| 大发888娱乐城 健账号| 真人百家乐赌场娱乐网规则| 百家乐金海岸娱乐| 乐天堂百家乐官网娱乐| 玩百家乐官网保时捷娱乐城| 网络博彩qq群| 大发888注册送| 威尼斯人娱乐城老品牌值得信赖| 上市百家乐评论| 百家乐扑克投注赢钱法| 澳门百家乐官网765118118| 百家乐官网永利娱乐网| 百家乐官网游戏平台有哪些哪家的口碑最好 | 百家乐官网QQ群娱乐| 百家乐官网的最佳玩|