91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

零知開(kāi)源——使用 GPIO 模擬時(shí)序驅(qū)動(dòng) WS2812B LED 燈帶

零知實(shí)驗(yàn)室 ? 來(lái)源:PCB56242069 ? 作者:PCB56242069 ? 2025-02-20 15:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

?利用零知增強(qiáng)版的GPIO 模擬時(shí)序

在本教程中,我們將探討如何使用 零知增強(qiáng)版的 GPIO 接口來(lái)模擬 WS2812B LED 燈帶的信號(hào)傳輸時(shí)序,從而實(shí)現(xiàn)對(duì)單色或多彩 LED 燈帶的控制。這種技術(shù)允許我們避開(kāi)專用驅(qū)動(dòng)庫(kù),直接與硬件進(jìn)行交互,理解并掌握 WS2812B 的通信機(jī)制。

一、工具原料

電腦、Windows系統(tǒng)

零知增強(qiáng)版開(kāi)發(fā)板

Micro-usb

WS2812RGB燈

WS2812B 是一款內(nèi)含控制器芯片的全彩 LED 燈珠,每個(gè)燈珠可以獨(dú)立顯示紅、綠、藍(lán)三色。它通過(guò)單一數(shù)據(jù)線接收命令,實(shí)現(xiàn)高精度顏色控制。

二、硬件連接

零知增強(qiáng)版 WS2812B
5V VCC
GND GND
51 Din

1、硬件連接示意圖

wKgZO2e23SWAbzzcAALcDy1Fozw229.png

2、實(shí)際效果

wKgZPGe23SaAUAZ8AARSqJQZKqs239.png

三、傳輸時(shí)序和顏色控制

1、信號(hào)傳輸時(shí)序

WS2812B 的數(shù)據(jù)傳輸遵循特定的時(shí)間序列:

高電平持續(xù)時(shí)間決定比特值:T1H 和 T0H 分別代表比特 1 和比特 0 的高電平持續(xù)時(shí)間。

低電平持續(xù)時(shí)間:T1L 和 T0L。

注:T1H為 800ns,T1L為 450ns 表示 1 比特。

T0H為 400ns,T0L為 850ns 表示 0 比特。

2、顏色控制

控制全局亮度和遵循WS2812B發(fā)送的時(shí)序:

通過(guò)brightness參數(shù)調(diào)節(jié)RGB燈的全局亮度

WS2812B協(xié)議發(fā)送時(shí)序?yàn)镚 -> R -> B

四、代碼驅(qū)動(dòng)

1、相關(guān)定義和初始化

?// WS2812B相關(guān)定義
#define WS2812B_PIN 51      // WS2812B數(shù)據(jù)引腳
#define NUM_LEDS 8          // 燈珠數(shù)量
#define MAX_BRIGHTNESS 0.5  // 全局亮度調(diào)節(jié)(范圍:0.0 - 1.0)
 
// WS2812B控制協(xié)議時(shí)間(根據(jù)各自的時(shí)序進(jìn)行修改該定義)
#define T1H 800
#define T1L 450
#define T0H 400
#define T0L 850
 
// 初始化WS2812B引腳
void setupWS2812B() {
    pinMode(WS2812B_PIN, OUTPUT);
    digitalWrite(WS2812B_PIN, LOW);
}
 
// 更精確的納秒延時(shí)函數(shù)(這里只是示例,實(shí)際可能需要更復(fù)雜的實(shí)現(xiàn))
// 假設(shè)使用了支持納秒級(jí)延時(shí)的定時(shí)器庫(kù)
// 這里暫時(shí)使用簡(jiǎn)單的微秒級(jí)延時(shí)近似
void delayNanoseconds(unsigned long ns) {
    delayMicroseconds(ns / 1000);
}

2、控制顏色和發(fā)送相關(guān)數(shù)據(jù)

?
// 發(fā)送一個(gè)比特
void WS2812B_SendBit(bool bitVal) {
    if (bitVal) {
        // 發(fā)送邏輯1
        digitalWrite(WS2812B_PIN, HIGH);
        delayNanoseconds(T1H);
        digitalWrite(WS2812B_PIN, LOW);
        delayNanoseconds(T1L);
    } else {
        // 發(fā)送邏輯0
        digitalWrite(WS2812B_PIN, HIGH);
        delayNanoseconds(T0H);
        digitalWrite(WS2812B_PIN, LOW);
        delayNanoseconds(T0L);
    }
}

// 發(fā)送一個(gè)字節(jié)
void WS2812B_SendByte(uint8_t byte) {
    for (int i = 7; i >= 0; i--) {
        WS2812B_SendBit(byte & (1  R -> B
    WS2812B_SendByte(green);
    WS2812B_SendByte(red);
    WS2812B_SendByte(blue);
}

3、實(shí)現(xiàn)流水燈、呼吸燈等功能

?
// 效果:彩虹追逐
void rainbowChaseEffect(uint8_t wait) {
    for (int offset = 0; offset < 255; offset++) {
        for (int i = 0; i < NUM_LEDS; i++) {
            int hue = (i * 255 / NUM_LEDS + offset) % 255;
            uint8_t r = 0, g = 0, b = 0;
            if (hue < 85) {
                r = 255 - hue * 3;
                g = hue * 3;
                b = 0;
            } else if (hue < 170) {
                hue -= 85;
                r = 0;
                g = 255 - hue * 3;
                b = hue * 3;
            } else {
                hue -= 170;
                r = hue * 3;
                g = 0;
                b = 255 - hue * 3;
            }
            WS2812B_SendColor(r, g, b, MAX_BRIGHTNESS);
        }
        delay(wait);
    }
}

// 呼吸燈效果
void breathAndFlow(uint8_t red, uint8_t green, uint8_t blue, uint8_t steps, uint16_t period, uint8_t wait, uint8_t iterations) {
    int ledStep[NUM_LEDS]; // 為每個(gè) LED 創(chuàng)建一個(gè)步驟計(jì)數(shù)器
    for (int i = 0; i < NUM_LEDS; i++) {
        ledStep[i] = 0; // 初始化每個(gè)LED的步進(jìn)
    }

    uint8_t cycleCounter = 0; // 添加循環(huán)計(jì)數(shù)器

    while (cycleCounter < iterations) { // 有限循環(huán),迭代指定次數(shù)
        for (int i = 0; i < NUM_LEDS; i++) {
            // 計(jì)算當(dāng)前 LED 的亮度比例
            float brightness = (sin(ledStep[i] * (M_PI / (steps))) + 1) / 2;
            WS2812B_SendColor(red, green, blue, brightness); // 使用計(jì)算出的亮度

            // 更新 LED 的步驟計(jì)數(shù)器,模擬呼吸效果
            ledStep[i] = (ledStep[i] + 1) % (steps * 2); // 確保計(jì)數(shù)器在達(dá)到兩倍步驟后重置

            // 計(jì)算每個(gè)步驟的時(shí)間間隔
            delayMicroseconds(period / steps);
        }
       
        // 在一輪呼吸之后關(guān)閉所有燈
        clearAllLeds();

        // 增加循環(huán)計(jì)數(shù)器
        cycleCounter++;

        // 根據(jù)需要添加延遲,雖然這不是必須的
        delay(wait);
    }
}

// 增加一個(gè)狀態(tài)變量來(lái)記錄是否有顏色覆蓋
bool isCovered = false;

// 流水燈
void ShampEffect(uint8_t red, uint8_t green, uint8_t blue, uint8_t trailDecay, uint8_t wait) {
    // 特殊處理第一個(gè)燈
    WS2812B_SendColor(red, green, blue, MAX_BRIGHTNESS);
    // 從第二個(gè)燈開(kāi)始的索引為1
    for (int i = 0; i < NUM_LEDS; i++) {
        for (int j = 0; j <= NUM_LEDS; j++) {
            if (i - j == 0) {
                if (!isCovered) {
                    // 如果沒(méi)有被覆蓋,設(shè)置為綠色
                    WS2812B_SendColor(0, 0, 0, MAX_BRIGHTNESS);
                } else {
                    WS2812B_SendColor(red, green, blue, MAX_BRIGHTNESS);
                }
            } else {
                WS2812B_SendColor(0, 0, 0, MAX_BRIGHTNESS * trailDecay / 255.0);
            }
        }
        if (i == NUM_LEDS - 1) {
            // 當(dāng)?shù)竭_(dá)最后一個(gè)燈時(shí),標(biāo)記為已覆蓋
            isCovered = true;
        }
        delay(wait);
    }
}

4、控制燈的狀態(tài)

?
// 設(shè)置特定位置燈珠顏色
void setLedColor(uint8_t pos, uint8_t red, uint8_t green, uint8_t blue, float brightness) {
    if (pos < NUM_LEDS) {
        // 只發(fā)送前面燈珠的關(guān)閉信號(hào),直到要設(shè)置顏色的燈珠位置
        for (int i = 0; i < pos; i++) {
            WS2812B_SendColor(0, 0, 0, 0);
        }
        // 設(shè)置目標(biāo)燈珠顏色
        WS2812B_SendColor(red, green, blue, brightness);
        // 發(fā)送后面燈珠的關(guān)閉信號(hào),從目標(biāo)燈珠的下一個(gè)位置開(kāi)始
        for (int i = pos + 1; i < NUM_LEDS; i++) {
            WS2812B_SendColor(0, 0, 0, 0);
        }
    }
}

// 設(shè)置所有燈珠顏色
void setAllLeds(uint8_t red, uint8_t green, uint8_t blue, float brightness) {
    clearAllLeds();// 先清除所有燈珠,確保沒(méi)有雜色
    for (int i = 0; i < NUM_LEDS; i++) {
        WS2812B_SendColor(red, green, blue, brightness);
    }
}

// 清除所有燈珠
void clearAllLeds() {
    for (int i = 0; i < NUM_LEDS * 3; i++) {
        WS2812B_SendByte(0);
    }
}

?

5、主循環(huán)

?
// 初始化
void setup() {
    setupWS2812B();
    clearAllLeds();  // 確保燈帶初始狀態(tài)關(guān)閉
}

// 主循環(huán)
void loop() {
    uint8_t Count = 0;
    //clearAllLeds();
    // 設(shè)置第六個(gè)燈珠為藍(lán)色
    //setLedColor(5, 0, 0, 255, MAX_BRIGHTNESS);
    //delay(500);
    while(Count < 10)
    {
      ShampEffect(0, 0, random(255), 256, 200);
      Count ++;
    }
   
    //rainbowChaseEffect(1000);
    breathAndFlow(0,255,0,5,50,100,100);
}

五、成果展示

將上訴代碼驗(yàn)證后上傳到零知板,可以看到以下流水燈、呼吸燈等測(cè)試結(jié)果。

https://live.csdn.net/v/437153?spm=1001.2014.3001.5501
?

wKgZO2e23SaAcUrnAAEr8LvRUJ459.jpeg使用 GPIO 模擬時(shí)序驅(qū)動(dòng) WS2812B LED 燈帶


審核編輯 黃宇

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

    關(guān)注

    243

    文章

    24596

    瀏覽量

    690897
  • 燈帶
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    9602
  • 開(kāi)源
    +關(guān)注

    關(guān)注

    3

    文章

    4207

    瀏覽量

    46149
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    在昉·星光開(kāi)發(fā)板上控制WS2812B炫彩燈環(huán)

    :24WS2812B環(huán) 杜邦線:若干 三、炫彩燈環(huán)使用原理 本次課程中,使用的炫彩燈環(huán)模塊具體如下: 在燈環(huán)的接口上,除了VCC(+)和GND(-),還有DIN用于輸出控制信號(hào)
    發(fā)表于 03-06 06:15

    在 VisionFive 2 上使用的彩色光環(huán)

    : VisionFive/VisionFive 2 SBC Colorful light ring: WS2812B light ring with 24 Beads DuPont Line: Many 2.
    發(fā)表于 03-05 07:32

    CW32L012/F030靈眸X1智能小車——板載WS2812驅(qū)動(dòng)示例

    WS2812是一種廣泛使用的地址可控制的RGB LED模塊,其內(nèi)置驅(qū)動(dòng)電路和控制芯片,允許用戶通過(guò)單線信號(hào)控制多個(gè)LED的顏色和亮度。
    的頭像 發(fā)表于 01-05 16:35 ?2914次閱讀
    CW32L012/F030靈眸X1智能小車——板載<b class='flag-5'>WS2812</b><b class='flag-5'>驅(qū)動(dòng)</b>示例

    IDE——基于STM32F103RBT6的PAJ7620U2手勢(shì)控制WS2812 RGB系統(tǒng)

    簡(jiǎn)單! -^^- * 時(shí)間: 2025-12-26 * 說(shuō)明: 基于標(biāo)準(zhǔn)板(STM32F103RBT6)驅(qū)動(dòng)PAJ7620U2手勢(shì)傳感器實(shí)現(xiàn)WS2812B
    發(fā)表于 12-29 19:04

    IDE——基于STM32F103RBT6的PAJ7620U2手勢(shì)控制WS2812 RGB系統(tǒng)

    基于STM32F103RBT6的手勢(shì)控制LED系統(tǒng),通過(guò)PAJ7620U2傳感器識(shí)別手勢(shì)動(dòng)作,驅(qū)動(dòng)WS2812B實(shí)現(xiàn)交互式燈光效果。系統(tǒng)
    的頭像 發(fā)表于 12-29 17:48 ?1867次閱讀
    <b class='flag-5'>零</b><b class='flag-5'>知</b>IDE——基于STM32F103RBT6的PAJ7620U2手勢(shì)控制<b class='flag-5'>WS2812</b> RGB<b class='flag-5'>燈</b><b class='flag-5'>帶</b>系統(tǒng)

    【瑞薩RA6E2地奇星開(kāi)發(fā)板試用】點(diǎn)亮 WS2812 全彩點(diǎn)陣屏

    通過(guò)單總線方式控制,只需一個(gè) IO 口,就可以點(diǎn)亮數(shù)千個(gè)珠。 這里使用 RA6E2 點(diǎn)亮 WS2812 珠,效果如下: WS2812 可以使用 IO
    發(fā)表于 12-27 03:28

    基于STM32F103C8T6驅(qū)動(dòng)WS2812彩燈模塊點(diǎn)亮RGB

    一、WS2812模塊簡(jiǎn)介 WS2812是一個(gè)集控制電路與發(fā)光電路于一體的智能外控LED光源。其外型與一個(gè)5050LED珠相同,每個(gè)元件即為
    的頭像 發(fā)表于 12-04 11:29 ?6624次閱讀
    基于STM32F103C8T6<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>WS2812</b>彩燈模塊點(diǎn)亮RGB<b class='flag-5'>燈</b>

    【瑞薩RA6E2】驅(qū)動(dòng) WS2812 實(shí)現(xiàn) RGB 跑馬燈效果

    WS2812_PINBSP_IO_PORT_00_PIN_01 #define WS2812_NUM3 #define SYS_CLOCK120000000 WS2812 的通信時(shí)序
    發(fā)表于 11-25 01:55

    【瑞薩RA6E2】點(diǎn)亮 WS2812 全彩點(diǎn)陣屏

    通過(guò)單總線方式控制,只需一個(gè) IO 口,就可以點(diǎn)亮數(shù)千個(gè)珠。 這里使用 RA6E2 點(diǎn)亮 WS2812 珠,效果如下: WS2812 可以使用 IO
    發(fā)表于 11-05 08:36

    一文讀懂:W55MH32 如何攜手微信小程序與 OneNET,實(shí)現(xiàn)以太網(wǎng)條調(diào)色自由(軟硬件開(kāi)源

    本文采用W55MH32開(kāi)發(fā)板搭配WS2812B條,借助MQTT協(xié)議連接OneNET云平臺(tái),并配合微信小程序,實(shí)現(xiàn)了以太網(wǎng)條的遠(yuǎn)程調(diào)色以及動(dòng)態(tài)模式(如流水燈、彩虹)控制。感謝大家閱
    的頭像 發(fā)表于 08-08 11:16 ?1551次閱讀
    一文讀懂:W55MH32 如何攜手微信小程序與 OneNET,實(shí)現(xiàn)以太網(wǎng)<b class='flag-5'>燈</b>條調(diào)色自由(軟硬件<b class='flag-5'>開(kāi)源</b>)

    2.4 A / 2 A 雙路獨(dú)立閃光 LED 驅(qū)動(dòng)器, TrueFlash? skyworksinc

    電子發(fā)燒友網(wǎng)為你提供()2.4 A / 2 A 雙路獨(dú)立閃光 LED 驅(qū)動(dòng)器, TrueFlash?相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有2.4 A / 2 A 雙路獨(dú)立閃光
    發(fā)表于 07-30 18:30
    2.4 A / 2 A 雙路獨(dú)立閃光<b class='flag-5'>燈</b> <b class='flag-5'>LED</b> <b class='flag-5'>驅(qū)動(dòng)</b>器,<b class='flag-5'>帶</b> TrueFlash? skyworksinc

    【RA4L1-SENSOR】點(diǎn)亮 WS2812 全彩點(diǎn)陣屏

    通過(guò)單總線方式控制,只需一個(gè) IO 口,就可以點(diǎn)亮數(shù)千個(gè)珠。 這里使用 RA4L1 點(diǎn)亮 WS2812 珠,效果如下: WS2812 可以使用 IO
    發(fā)表于 06-09 12:48

    【RA-Eco-RA4M2開(kāi)發(fā)板評(píng)測(cè)】點(diǎn)亮WS2812點(diǎn)陣屏

    通過(guò)單總線方式控制,只需一個(gè) IO 口,就可以點(diǎn)亮數(shù)千個(gè)珠。 這里使用 RA4M2 點(diǎn)亮 WS2812 珠,效果如下: WS2812 可以使用 IO
    發(fā)表于 05-07 15:28

    WS2812B on S32K144始終閃爍白色,即使沒(méi)有數(shù)據(jù)也是如此,為什么?

    我正在嘗試控制WS2812B RGB LED使用型號(hào) S32K144EVB-Q100.我的目標(biāo)是發(fā)送GRB 數(shù)據(jù)使用 bit-banging onPTD0.但是,LED 始終閃爍白色 (R=255
    發(fā)表于 04-08 07:15

    開(kāi)源平臺(tái)重磅升級(jí)!嵌入式開(kāi)發(fā)進(jìn)入“渦輪增壓”時(shí)代

    本帖最后由 PCB56242069 于 2025-3-11 13:44 編輯 ?親愛(ài)的開(kāi)發(fā)者們,我們帶來(lái)革命性的開(kāi)發(fā)工具升級(jí)!開(kāi)源平臺(tái)全新編譯引擎正式發(fā)布,讓代碼編譯效率實(shí)現(xiàn)300%的飛躍
    發(fā)表于 03-11 11:22