Esp8266 mqtt arduino 無線多級控制照明燈

使用的是 ws2812數字燈珠 + esp826601s +mqtt 使用arduino IDE開發
能夠實現使用mqtt控制多種亮度的燈珠

效果演示:鏈接

ws2812數字燈珠

enter description here
有信號的輸入和輸出
有信號的輸入和輸出

DO是信號輸出 DI是信號輸入
將多個RGB燈串聯,信號進行傳輸然後實現燈帶。
enter description here

有很多種 我使用是這種來充當led燈
enter description here

聯合esp826601s使用

只需要一個GPIO給ws2812 信號端就可以
因此考慮使用esp8266 -01s的GPIO2

對esp8266 mqtt 使用arduino開發沒有基礎的同學可以先看這幾篇文章

http://niehen.cn/esp8266/esp8266-mqtt-%e4%bd%bf%e7%94%a8arduino%e5%bc%80%e5%8f%91%e6%95%99%e7%a8%8b/

http://niehen.cn/esp8266/mqtt%e5%8d%8f%e8%ae%ae%e4%bb%8b%e7%bb%8d%e4%b8%8e%e5%ba%94%e7%94%a8/

http://niehen.cn/esp8266/esp8266-01s%e4%bb%8b%e7%bb%8d/

前期使用 fast led 庫 多次嘗試不成功,
查資料發現 由於ws2812 需要連續的掃描 頻率很大,而esp01s頻率不足所以在前期嘗試的時候都沒成功,但是使用ws2812只需要一個引腳 使用12f顯得浪費

查找了很多資料發現使用Adafruit_NeoPixel.h 可以實現
下面會講

只需要ws2812 的信號引腳接到 esp01s的GPIO2
5v接到電源5v
GND接地
這裏推薦使用 這種模塊 方便簡單
enter description here

接線省事很多
enter description here

Adafruit_NeoPixel庫

用於控制基於單線的LED像素和條帶

安裝

IDE內安裝:

  • 在arduino IDE中 項目—》加載庫----》管理庫
  • 然後使用搜索欄搜索Neopixel strip。
  • 選擇版本進行安裝

源碼安裝:

  • 找到源碼 GitHub鏈接下載下來
  • 下載後,將文件夾重命名爲“ Adafruit_NeoPixel”並安裝在Arduino Libraries文件夾中
  • 重新啓動Arduino IDE,打開示例 找到這個庫的示例代碼
支持的芯片

enter description here

使用

有兩種創建燈帶形式

  • GRB:綠紅藍三基色 值從0到255
  • GRBW:在RGB的基礎上加上一種白光,增加亮度的作用。

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800); // 創建 GRB燈帶

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800); // 創建 GRBW燈帶

在使用時 顯示的形式不一樣

函數

  • begin() 燈帶初始化
  • setPixelColor() 設置燈帶的顏色(第一個參數是燈珠索引,第二個是顏色值(GRB或GRBW))
  • setBrightness() 設置燈帶的亮度(第一個參數是燈珠索引,第二個是亮度值0-255)
  • show() 顯示燈帶

    這些函數控制對象 就是前面創建的燈帶對象(可以看下面的示例代碼)

在使用時可以根據自己需要顯示的樣子
編寫控制燈珠顏色 亮度變化的代碼
當然也可以使用這個庫提供的一些示例代碼 也是很有意思的

示例代碼

內含註釋

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

//使用的引腳
#define PIN            6
//數字燈珠數量
#define NUMPIXELS      16

// 當我們設置NeoPixel庫時,我們告訴它要使用多少像素,以及使用哪個pin發送信號。

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 500; // delay for half a second
void setup() {
  // 這是5V 16MHz的小飾品,如果不使用小飾品,可以去掉這三條線
#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
  pixels.begin(); // 這將初始化neopix庫。
}
void loop() {

  // 對於一組NeoPixel,第一個NeoPixel是0,第二個是1,一直到像素數減1爲止.
  for(int i=0;i<NUMPIXELS;i++){
    // pixels.Color 設置RGB的值 區間是 0,0,0 到 255,255,255
    pixels.setPixelColor(i, pixels.Color(0,150,0)); // 中等明亮的綠色。
    pixels.show(); // 這會將更新的像素顏色發送到硬件。
    delay(delayval); // 延遲一段時間(以毫秒爲單位)。
  }
}

這個庫的GitHub鏈接

代碼

在這個項目中 只需要顯示白色
多級調節 其實也就是調節燈珠的亮度
mqtt發過來一個數字值,然後控制亮度變化
思路很簡單

使用的函數

將LED燈珠變爲全部白色 設置亮度只需要改變傳入的第一個參數即可

在亮度等級調整的時候,爲了變換沒有那麼突兀,程序裏面採用的是逐漸變化.而不是直接的全部設爲目標亮度。


int bright = 0;
void pulseWhite(uint8_t result,uint8_t wait) {  // 第一個參數爲要變爲的亮度值 第二個參數爲變化間隔的時間單位爲毫秒
  if (bright < result){
  for(int j = bright; j < result ; j++){
      for(uint16_t i=0; i<pixels.numPixels(); i++) {
          pixels.setPixelColor(i, pixels.Color(j,j,j) );
        }
        delay(wait);
        pixels.show();
      }
      bright = result;
  }else if(bright > result){
  for(int j = bright; j >= result ; j--){
      for(uint16_t i=0; i<pixels.numPixels(); i++) {
          pixels.setPixelColor(i, pixels.Color(j,j,j) );
        }
        delay(wait);
        pixels.show();
      }
      bright = result;
  }  
}

項目參考代碼鏈接

GitHub地址

更多學習教程

ESP開發學習基礎知識

基礎知識包括對esp模塊的認識與瞭解 mqtt協議的瞭解,arduino IDE運用代碼編寫等等。

  1. arduino基礎學習
  2. esp系列模塊的介紹
  3. mqtt協議的介紹與使用
  4. 利用mqtt esp模塊 基於arduino IDE開發方法
  5. esp模塊的AT指令 刷固件
  6. esp模塊睡眠模式使用
  7. esp8266-01s介紹與使用
  8. esp8266-12f介紹與使用
  9. NodeMcu介紹與使用
esp開發IOT應用

基於esp8266的模塊以及其他模塊根據實際的應用場景與需求製作的物聯網應用

  1. 基於FRID arduino 繼電器 電磁鎖開發的FRID門禁系統
  2. esp32-cam獲取視頻流圖像處理
  3. 基於步進電機 esp8266 mqtt開發的自動窗簾控制
  4. 基於DHT11 Esp8266 mqtt獲取室內溫溼度
  5. 基於CCS811 esp8266 mqtt 獲取室內空氣質量
  6. 基於紅外模塊 esp8266 mqtt開發的智能遙控控制
  7. 基於ws2812 esp8266 mqtt開發的智能多級照明燈
  8. 基於ws2812 esp8266 mqtt開發的智能多模式氛圍燈
  9. 基於mp3player esp8266 mqtt開發的智能語音播報系統
  10. IOT綜合應用之智慧教室項目開發
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章