ESP8266 NodeMCU與WS2812燈帶:實現多種花樣變換

在現代電子創意項目中,LED燈帶的應用已經變得極為廣泛。通過結合ESP8266 NodeMCU的強大處理能力和FastLED庫的高效功能,我們可以輕松實現多達100種燈帶變換效果。本文將詳細介紹如何使用Arduino IDE編程,實現從基礎到高級的燈光效果,為你的創意項目增添無限可能。

硬件需求
  • ESP8266 NodeMCU開發板:作為控制核心,NodeMCU以其強大的處理能力和豐富的GPIO接口成為理想的控制器。

  • WS2812燈帶:這種單線控制的LED燈帶(如NeoPixel)因其簡單易用和色彩豐富而廣泛應用于各種項目。

  • 電源模塊:確保燈帶供電穩定,避免因電流不足導致燈帶無法正常工作。

  • 連接線:用于連接開發板和燈帶。

軟件環境
  • Arduino IDE:安裝最新版本的Arduino IDE,這是ESP8266 NodeMCU的官方開發環境。

  • FastLED庫:通過Arduino IDE的庫管理器安裝FastLED庫。該庫提供了豐富的API接口,用于控制WS2812燈帶。

  • 安裝步驟:打開Arduino IDE,選擇Sketch > Include Library > Manage Libraries,搜索FastLED并安裝

    ?
    #include <FastLED.h>#define DATA_PIN D1  // 燈帶連接到NodeMCU的D1引腳(GPIO5)
    #define NUM_LEDS 60  // 燈帶上的LED數量
    #define BRIGHTNESS 128  // 燈帶亮度CRGB leds[NUM_LEDS];void setup() {FastLED.addLeds<WS2812, DATA_PIN, GRB>(leds, NUM_LEDS);FastLED.setBrightness(BRIGHTNESS);
    }void loop() {// 效果1:全亮(白色)fillSolid(CRGB::White);delay(1000);// 效果2:全滅fillSolid(CRGB::Black);delay(1000);// 效果3:單色漸變(紅色)colorWipe(CRGB::Red, 50);delay(1000);// 效果4:單色漸變(綠色)colorWipe(CRGB::Green, 50);delay(1000);// 效果5:單色漸變(藍色)colorWipe(CRGB::Blue, 50);delay(1000);// 效果6:彩虹循環rainbowCycle(20);delay(1000);// 效果7:隨機閃爍randomSparkle(50);delay(1000);// 效果8:流水燈theaterChase(CRGB::White, 50);delay(1000);// 效果9:呼吸燈效果breatheEffect(CRGB::Blue, 20);delay(1000);// 效果10:逐個點亮sequentialLight(CRGB::Green, 50);delay(1000);// 效果11:火焰效果fireEffect(50);delay(1000);// 效果12:漸變流動gradientFlow(CRGB::Red, CRGB::Blue, 50);delay(1000);// 效果13:彩色波浪colorWave(CRGB::Red, CRGB::Green, 50);delay(1000);// 效果14:閃爍blinkEffect(CRGB::Yellow, 100);delay(1000);// 效果15:隨機顏色randomColors(50);delay(1000);// 效果16:彩虹流動rainbowFlow(20);delay(1000);// 效果17:漸變閃爍gradientBlink(CRGB::Red, CRGB::Blue, 50);delay(1000);// 效果18:逐個熄滅sequentialDim(CRGB::Green, 50);delay(1000);// 效果19:閃爍漸變twinkleGradient(CRGB::White, 50);delay(1000);// 效果20:隨機顏色漸變randomGradient(50);delay(1000);// 效果21-100:更多效果可以通過組合上述函數或添加新的邏輯實現
    }// 填充單色
    void fillSolid(CRGB color) {fill_solid(leds, NUM_LEDS, color);FastLED.show();
    }// 單色漸變
    void colorWipe(CRGB color, int wait) {for (int i = 0; i < NUM_LEDS; i++) {leds[i] = color;FastLED.show();delay(wait);}
    }// 彩虹循環
    void rainbowCycle(int wait) {uint16_t i, j;for (j = 0; j < 256; j++) {for (i = 0; i < NUM_LEDS; i++) {leds[i] = ColorFromPalette(RainbowColors_p, (i * 256 / NUM_LEDS + j) & 255);}FastLED.show();delay(wait);}
    }// 隨機閃爍
    void randomSparkle(int wait) {for (int i = 0; i < 100; i++) {int pixel = random(NUM_LEDS);leds[pixel] = CRGB::White;FastLED.show();delay(wait);leds[pixel] = CRGB::Black;}
    }// 流水燈效果
    void theaterChase(CRGB color, int wait) {for (int j = 0; j < 10; j++) {for (int q = 0; q < 3; q++) {for (int i = 0; i < NUM_LEDS; i++) {leds[i] = (i + q) % 3 == 0 ? color : CRGB::Black;}FastLED.show();delay(wait);}}
    }// 呼吸燈效果
    void breatheEffect(CRGB color, int wait) {for (int i = 0; i < 256; i++) {CRGB c = color;c.nscale8(i);fill_solid(leds, NUM_LEDS, c);FastLED.show();delay(wait);}for (int i = 255; i >= 0; i--) {CRGB c = color;c.nscale8(i);fill_solid(leds, NUM_LEDS, c);FastLED.show();delay(wait);}
    }// 逐個點亮
    void sequentialLight(CRGB color, int wait) {for (int i = 0; i < NUM_LEDS; i++) {leds[i] = color;FastLED.show();delay(wait);}
    }// 火焰效果
    void fireEffect(int wait) {for (int i = 0; i < 100; i++) {for (int j = 0; j < NUM_LEDS; j++) {leds[j] = ColorFromPalette(LavaColors_p, random(256));}FastLED.show();delay(wait);}
    }// 漸變流動
    void gradientFlow(CRGB color1, CRGB color2, int wait) {for (int i = 0; i < NUM_LEDS; i++) {leds[i] = blend(color1, color2, i * 256 / NUM_LEDS);FastLED.show();delay(wait);}
    }// 彩色波浪
    void colorWave(CRGB color1, CRGB color2, int wait) {for (int i = 0; i < NUM_LEDS; i++) {leds[i] = blend(color1, color2, sin8(i * 16));FastLED.show();delay(wait);}
    }// 閃爍效果
    void blinkEffect(CRGB color, int wait) {for (int i = 0; i < 10; i++) {fillSolid(color);delay(wait);fillSolid(CRGB::Black);delay(wait);}
    }// 隨機顏色
    void randomColors(int wait) {for (int i = 0; i < 100; i++) {for (int j = 0; j < NUM_LEDS; j++) {leds[j] = CHSV(random(256), 255, 255);}FastLED.show();delay(wait);}
    }// 彩虹流動
    void rainbowFlow(int wait) {for (int i = 0; i < 256; i++) {for (int j = 0; j < NUM_LEDS; j++) {leds[j] = CHSV((i + j) % 256, 255, 255);}FastLED.show();delay(wait);}
    }// 漸變閃爍
    void gradientBlink(CRGB color1, CRGB color2, int wait) {for (int i = 0; i < 10; i++) {gradientFlow(color1, color2, wait);delay(wait);fillSolid(CRGB::Black);delay(wait);}
    }// 逐個熄滅
    void sequentialDim(CRGB color, int wait) {for (int i = 0; i < NUM_LEDS; i++) {leds[i] = color;FastLED.show();delay(wait);leds[i] = CRGB::Black;}
    }// 閃爍漸變
    void twinkleGradient(CRGB color, int wait) {for (int i = 0; i < 100; i++) {int pixel = random(NUM_LEDS);leds[pixel] = color;FastLED.show();delay(wait);leds[pixel] = CRGB::Black;}
    }// 隨機顏色漸變
    void randomGradient(int wait) {for (int i = 0; i < 100; i++) {CRGB color1 = CHSV(random(256), 255, 255);CRGB color2 = CHSV(random(256), 255, 255);gradientFlow(color1, color2, wait);delay(wait);}
    }?
  • 基礎效果:全亮、全滅、單色漸變、彩虹循環等。

    • 動態效果:隨機閃爍、流水燈、呼吸燈、逐個點亮等。

    • 復雜效果:火焰效果、漸變流動、彩色波浪、閃爍漸變等。

    • 擴展效果:通過組合現有函數或添加新的邏輯,可以實現更多效果。

    • 通過ESP8266 NodeMCU和FastLED庫,你可以輕松實現多達100種燈帶變換效果。本文提供的代碼涵蓋了從基礎到高級的多種效果,為你的創意項目提供了強大的支持。希望你能通過這些效果激發更多靈感,創造出獨一無二的燈光作品!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/66917.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66917.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66917.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pycharm踩坑(1)

由于我重裝系統&#xff0c;導致我的pycharm需要進行重裝&#xff0c;因此我覺得需要記錄一下&#xff0c;pycharm的正確使用方法 漢化 漢化很重要&#xff0c;除非你從小就雙語教學&#xff0c;不然你看著那些英文就是會消耗大量的精力 我使用的pycharm版本是pycharm-commun…

#HarmonyOS篇:build-profile.json5里面配置productsoh-package.json5里面dependencies依賴引入

oh-package.json5 用于描述包名、版本、入口文件和依賴項等信息。 {"license": "","devDependencies": {},"author": "","name": "entry","description": "Please describe the basic…

OpenCV2D 特征框架 (11)特征檢測與描述用于檢測二值圖像中連通區域(即“斑點”或“blob”)的類cv::SimpleBlobDetector的使用

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::SimpleBlobDetector 是 OpenCV 中用于檢測二值圖像中連通區域&#xff08;即“斑點”或“blob”&#xff09;的類。這些連通區域可以是白色前…

關于deepin上運行Qt開發的程序

國產化替代是將來各單位的主流趨勢&#xff0c;探索自行開發應用程序在國產操作系統上正常運行是將來的主要工作之一。本文淺嘗gui程序在統信社區版——deepin上遇到的小問題。 使用Qt在deepin上做了一個類似gif的幀動畫彈窗&#xff0c;在編譯運行時&#xff0c;程序可以正常…

Unity自學之旅05

Unity自學之旅05 Unity學習之旅⑤&#x1f4dd; AI基礎與敵人行為&#x1f94a; AI導航理論知識&#xff08;基礎&#xff09;開始實踐 &#x1f383; 敵人游戲機制追蹤玩家攻擊玩家子彈碰撞完善游戲失敗條件 &#x1f917; 總結歸納 Unity學習之旅⑤ &#x1f4dd; AI基礎與敵…

我想通過python語言,學習數據結構和算法該如何入手?

學習數據結構和算法是編程中的重要基礎&#xff0c;Python 是一個非常適合入門的語言。以下是學習數據結構和算法的步驟和建議&#xff1a; 1. 掌握 Python 基礎 確保你對 Python 的基本語法、數據類型、控制結構&#xff08;如循環、條件語句&#xff09;、函數等有扎實的理…

淺談Unity中Canvas的三種渲染模式

Overview UGUI通過 Canvas 組件渲染和管理UI元素。Canvas 是 UI 元素的容器&#xff0c;它決定了 UI 元素的渲染方式以及它們在屏幕上的顯示效果。Canvas 有三種主要的渲染模式&#xff0c;每種模式有不同的用途和特點。本文將介紹這三種渲染模式 1. Screen Space - Overlay 模…

Unity中在UI上畫線

在UI中畫一條曲線 我封裝了一個組件,可以實現基本的畫線需求. 效果 按住鼠標左鍵隨手一畫. 用起來也很簡單,將組件掛到空物體上就行了,紅色的背景是Panel. 你可以將該組件理解為一個Image,只不過形狀更靈活一些罷了,所以它要放在下面的層級(不然可能會被擋住). 代碼 可以…

2024.1.22 安全周報

政策/標準/指南最新動態 01 工信部印發《關于加強互聯網數據中心客戶數據安全保護的通知》 原文: https://www.secrss.com/articles/74673 互聯網數據中心作為新一代信息基礎設施&#xff0c;承載著千行百業的海量客戶數據&#xff0c;是關系國民經濟命脈的重要戰略資源。…

探索 LLM:從基礎原理到 RAG 實現的深度解析

一.LLM基礎知識 1.1 大語言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09; 他是模型&#xff0c;是 AI 能力的核心。他是語言模型&#xff0c;其核心能力在于語言能力。他是大語言模型&#xff0c;與傳統模型相比&#xff0c;它最大的特點就是“大”。 1…

Mac cursor設置jdk、Maven版本

基本配置 – Cursor 使用文檔 首先是系統用戶級別的設置參數&#xff0c;運行cursor&#xff0c;按下ctrlshiftp&#xff0c;輸入Open User Settings(JSON)&#xff0c;在彈出的下拉菜單中選中下面這樣的&#xff1a; 在打開的json編輯器中追加下面的內容&#xff1a; {"…

ARM64平臺Flutter環境搭建

ARM64平臺Flutter環境搭建 Flutter簡介問題背景搭建步驟1. 安裝ARM64 Android Studio2. 安裝Oracle的JDK3. 安裝 Dart和 Flutter 開發插件4. 安裝 Android SDK5. 安裝 Flutter SDK6. 同意 Android 條款7. 運行 Flutter 示例項目8. 修正 aapt2 報錯9. 修正 CMake 報錯10. 修正 N…

selenium clear()方法清除文本框內容

在使用Selenium進行Web自動化測試時&#xff0c;清除文本框內容是一個常見的需求。這可以通過多種方式實現&#xff0c;取決于你使用的是哪種編程語言&#xff08;如Python、Java等&#xff09;以及你的具體需求。以下是一些常見的方法&#xff1a; 1. 使用clear()方法 clear…

基于海思soc的智能產品開發(視頻的后續開發)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】 前面我們討論了camera&#xff0c;也討論了屏幕驅動&#xff0c;這些都是基礎的部分。關鍵是&#xff0c;我們拿到了這些視頻數據之后&#xff0c;…

vue3+webOffice合集

1、webOffice 初始化 1&#xff09;officeType: 文檔位置&#xff1a;https://solution.wps.cn/docs/web/quick-start.html#officetype 2&#xff09;appId: 前端使用appId 后端需要用到AppSecret 3&#xff09;fileId: 由后端返回&#xff0c;前端無法生成&#xff0c;與上傳文…

2025牛客寒假算法營2

A題 知識點&#xff1a;模擬 打卡。檢查給定的七個整數是否僅包含 1,2,3,5,6 即可。為了便于書寫&#xff0c;我們可以反過來&#xff0c;檢查這七個整數是否不為 4 和 7。 時間 O(1)&#xff1b;空間 O(1)。 #include <bits/stdc.h> using namespace std;signed main()…

記錄一次k8s起不來的排查過程

我在k8s集群&#xff0c;重啟了一個node宿主機&#xff0c;竟然發現kubelet起不來了&#xff01;報錯如下 這個報錯很模糊&#xff0c;怎么排查呢。這樣&#xff0c;開兩個界面&#xff0c;一個重啟kubelet&#xff0c;一個看系統日志(/var/log/message:centos&#xff0c;/va…

Docker Desktop 在Windows 環境中開發、測試和運行容器化的應用程序

Docker 為 Windows 提供了專門的桌面版工具&#xff0c;稱為 Docker Desktop&#xff0c;它允許你在 Windows 環境中開發、測試和運行容器化的應用程序。 如何在 Windows 上使用 Docker Docker Desktop Docker Desktop 是一個專為 Windows 設計的應用程序&#xff0c;它簡化了…

仿 RabbitMQ 的消息隊列3(實戰項目)

七. 消息存儲設計 上一篇博客已經將消息統計文件的讀寫代碼實現了&#xff0c;下一步我們將實現創建隊列文件和目錄。 實現創建隊列文件和目錄 初始化 0\t0 這樣的初始值. //創建隊列對應的文件和目錄&#xff1a;public void createQueueFile(String queueName) throws IO…

HTTP 配置與應用(局域網)

想做一個自己學習的有關的csdn賬號&#xff0c;努力奮斗......會更新我計算機網絡實驗課程的所有內容&#xff0c;還有其他的學習知識^_^&#xff0c;為自己鞏固一下所學知識&#xff0c;下次更新HTTP 配置與應用&#xff08;不同網段&#xff09;。 我是一個萌新小白&#xf…