本文來源電子發燒友社區,作者:HonestQiao, 帖子地址:https://bbs.elecfans.com/jishu_2287670_1_1.html
演示視頻(開發板體驗視頻,詳見作者原文鏈接內容)
而在DFRobot Beetle ESP32-C3的Arduino編程中,得益于Arduino IDE強大的擴展功能,我們可以用第三方的擴展庫,來很方便的控制WS2812B。
在這個分享中,使用的是Adafruit_NeoPixel,關于其詳細資料,可以查看官方頁面:Adafruit NeoPixel Library
WS2812B炫彩LED可以很靈活的組成各種實際所需要的形狀,如條帶狀、環形、點陣,單顆也可以使用。
我這次所使用的,是一塊8*8點陣的WS2812B炫彩LED點陣板:

背面結構如下:

WS2812B炫彩LED很神奇,不管是1顆LED的控制,還是上千顆LED的控制,都只需要1根數據線即可,也就是上面板子背面的DIN。
多塊這樣的單體,還能夠連接起來,前者的DOUT,連接到后者的DIN。實際上,相鄰的兩顆之間,也是這么連接的。
這款8*8的點陣板,每一顆燈珠都是可以單獨控制的,所以有先后順序,按照下面的順序進行控制。

通過1根線,發送控制數據給WS2812B,需要較高的數據發送速度,所以通常使用SPI接口發送。
查看DFRobot Beetle ESP32-C3的官方資料,了解引腳的具體定義情況:

通過上圖,可以了解到,D6可復用為SPI的MOSI,用于發送數據,因此,可以將該引腳與WS2812B點陣板的DIN連接。
另外,WS2812B的工作電壓為5V,而每個紅色、綠色和藍色LED需要大約20mA,或者在全亮度下每個LED總共60mA,如果8*8共64顆燈珠都點到最亮,那將需要60*64=3840A的電流,這樣嚴重超過DFRobot Beetle ESP32-C3的輸出電流,產生不可預料的結果。因為 DFRobot Beetle ESP32-C3 的最大輸出電流為500 mA。
所以,使用WS2812B的時候,如果是單顆的,使用開發板自身供電,沒有問題。如果使用多顆,則一定要使用專門的外接電源。
在我的這個實例中,我使用了一個USB2TTL的電源引腳,來為WS2812B點陣供電。
最終,具體的連線如下:

做好以上連線后,就可以使用Arduino IDE進行編程了。
在具體編程之前,需要現在Arduino IDE中安裝Adafruit NeoPixel。
在Arduino IDE的庫管理界面中,搜索Adafruit NeoPixel并安裝如圖所示的擴展庫即可:

在了解了 Adafruit NeoPixel 的具體使用后,編寫如下的程序:
代碼文件:(源碼下載文件,見作者原文)
代碼展示:

編寫好代碼,按照以下參數設置,編譯下載,就能看到效果:

在上述代碼中,包含了如下三個部分的內容:
- 串口調試信息輸出:使用較為簡單,不詳細說明,可以自己查看Arduino資料了解
- 控制板載LED:端口為D10,根據idx奇偶點亮或者熄滅
- Adafruit NeoPixel 控制WS2812B
Adafruit NeoPixel 部分的重點如下:
1. 初始化控制實例:
- Adafruit_NeoPixel pixels(NUMPIXELS, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800)
傳入的參數為LED燈珠數,控制引腳,以及信息傳輸的頻率(不用修改)。
8*8的點陣,燈珠數為64各。
根據前面了解DFRobot Beetle ESP32-C3的資料和連線,控制引腳為D6
2. 開始控制:
- pixels.begin();
3. 設置亮度:
- pixels.setBrightness(20);
最大值為255,也就是0xff,表示最亮。
4. 設置全部燈珠的顏色:
- pixels.fill(0x000000);
直接使用6位16進制數,每兩位控制一個顏色,分別為RGB。
當使用0x000000時,表示沒有顏色,也就是熄滅;
當使用0xFF0000是,表示紅色R最亮。
此處的fill,表示控制所有的燈珠,而不是控制單個。
5. 清除當前燈珠顏色設置:
- pixels.clear();
6. 設置單顆燈珠的顏色:
- pixels.setPixelColor(idx, pixels.Color(0, 0, 0));
idx表示第幾顆燈珠,從0開始;因為是8*8的點陣,所以最大值為63
而pixels.Color,分別則設置RGB三種顏色,最大為255,也就是0xff。
7. 讓燈珠真正顯示生效:
- pixels.show();
代碼的整體邏輯結構,也相對比較簡單,就是每次循環,先熄滅上一顆燈珠,然后點亮當前指向的燈珠,顏色使用了一定的隨機。
顯示完成后,指向下一顆燈珠;如果達到了最大值,則從0重新開始。
下載完成后,打開串口,也可以看到輸出的調試信息:

具體的呈現效果,如視頻所示。
如果你還會一些數學函數的話,那么可以用數學函數,生成心形圖案的坐標,對照到8*8點陣上,那么就能在情人節,給你最心愛的Ta,表達心意了。當然,如果不會沒關系,可以提前用紙對著8*8點陣,描繪心形圖案,記錄下對應的LED燈珠的位置,在點亮對應的燈珠也是可以的。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
Arduino
+關注
關注
188文章
6492瀏覽量
190103 -
ESP32
+關注
關注
20文章
1007瀏覽量
18834 -
DFRobot
+關注
關注
4文章
1160瀏覽量
10543
發布評論請先 登錄
相關推薦
熱點推薦
《ESP32S3 Arduino開發指南》第二章 Arduino基礎知識
周邊資料,其中包括社區、驅動庫以及示例代碼等,如下圖2.1.1所示: 圖2.1.1 Arduino生態圖 現今,Arduino開發板有很多,正點原子ESP32-S3
發表于 05-13 09:28
WS2812B on S32K144始終閃爍白色,即使沒有數據也是如此,為什么?
我正在嘗試控制WS2812B RGB LED使用型號 S32K144EVB-Q100.我的目標是發送GRB 數據使用 bit-banging onPTD0.但是,LED 始終閃爍白色
發表于 04-08 07:15
ESP32-C3:革新物聯網應用的超高效能芯片,家電遠程控制應用等
ESP32-C3是樂鑫科技推出的新一代RISC-V架構Wi-Fi & Bluetooth 5.0雙模物聯網芯片,專為智能家居、工業控制和消費電子產品設計,提供卓越的性能與極低的功耗
發表于 04-03 16:47
零知開源——使用 GPIO 模擬時序驅動 WS2812B LED 燈帶
的控制。這種技術允許我們避開專用驅動庫,直接與硬件進行交互,理解并掌握 WS2812B 的通信機制。 一、工具原料 電腦、Windows系統 零知增強版開發板 Micro-usb線 WS281

零知開源——使用 GPIO 模擬時序驅動 WS2812B LED 燈帶
、Windows系統
零知增強版開發板
Micro-usb線
WS2812RGB燈 WS2812B 是一款內含控制器芯片的全彩 LED 燈珠
發表于 02-20 14:31
零知開源——玩轉WS2812B燈條模塊
上傳到開發板中。
引用庫文件WS2812B.h#include// 引入用于控制WS2812B LED燈帶的庫
#define NUM
發表于 02-19 17:25
零知開源——玩轉WS2812B燈條模塊
WS2812RGB燈帶 ????? 通過零知標準開發板平臺上驅動WS2812RGB燈珠,包括WS2812B的供電電壓、接線和代碼實現。通過創建延時函數和設置級聯數據,實現對RGB燈珠的

【敏矽微ME32G070開發板免費體驗】點亮WS2812B燈板
一、簡介
板上集成了8顆RGB彩燈,但只需用到一個GPIO口,這是如何做到的呢?這節我們就點亮WS2812B展開話題。WS2812B是一個集控制電路與發光電路于一體的智能外控
發表于 01-07 23:58
ESP32-C3開發板用數據線連接在電腦USB口上,無法識別出端口,為什么?
各位好,我的ESP32-C3開發板用數據線連接在電腦USB口上,電腦上事先安裝了CP210x驅動程序,發現只是開發板上的紅燈亮了,win11系統的設備管理器卻沒有檢測出端口。ESP-I
發表于 07-01 07:25
ESP32-C3使用SPI通信緩存有多少?
我們計劃用ESP32-AT功能,看到資料上ESP32-C3僅支持SPI通信,請問:
①ESP32-C3使用SPI通信緩存有多少?
②ESP32-C3使用SPI通信接收到數據以后空中速率
發表于 06-26 07:58
請問esp32-c3不支持pcnt嗎?
我在esp32-c3開發板上測試pcnt,編譯報錯找不到相關的函數,查看sdk源碼發現要配置CONFIG_SOC_PCNT_SUPPORTED才會編譯pcnt.c,查看examples里面的項目也說了只支持
發表于 06-18 07:27
請問ESP32-C3藍牙如何獲取RSSI的值?
各位大佬,小弟剛接觸ESP-IDF不久,摸索了一段時間,物聯網的基本流程已經摸索的差不多了。
現在想知道ESP32-C3通過藍牙與手機建立連接后,怎么才能獲取當前手機端到開發板的RSSI值,我應該去參考哪些例程?
本人英語實在是
發表于 06-13 07:47
評論