Arduino IDE環境之ESP8266氛圍燈制作手記

本次制作中將要用到的是ESP-01S WIFI模塊。選擇它的原因主要是小巧,內置MCU并自帶WIFI功能,同時價格也是非常便宜,因此也被廣泛用于物聯網項目中,不過在這些應用中ESP-01S大都是以從機方式工作,主機通過AT指令與之通訊。不難看出,這種方式雖然降低了開發難度,卻也造成了一定的資源浪費,同時在性能上也帶來一些損失。

6_0.jpg

以下是ESP8266常見的幾種開發模式:

  1. AT指令方式。這是最常見的開發模式,也是最簡單的一種方式,只要通過串口發送AT指令就可以控制,適合大多數具有串口的單片機系統。

  2. 直接使用SDK開發。這個難度比較大,需要對芯片和SDK提供的API比較熟悉。

  3. NodeMCU方式。借助NodeMCU物聯網開發平臺,使用Lua腳本開發。需要額外燒寫固件。

  4. Arduino方式。無需額外燒寫固件,有豐富的第三方庫資源。

  5. MicroPython方式。與Arduino方式類似,但是需要額外燒寫固件。

相比較而言,以上的5種開發方式中,個人比較推薦使用Arduino方式,主要在于Arduino使用的是大家都熟悉的C/C++語言,另外還有豐富的第三方庫文件可以用來實現開發。MicroPython作為后來者雖顯劣勢,卻也是來勢洶洶,大有銳不可擋之勢,未來誰主天下也未嘗可知。

因為本文將要介紹的氛圍燈制作就要用到Arduino IDE,所以這里簡單講一下如何構建適合ESP8266開發的Arduino IDE環境。

  1. 打開Arduino IDE,依次點擊菜單項“文件”->“首選項”,然后會看到“附加開發版管理器網址”,填入http://arduino.esp8266.com/stable/package_esp8266com_index.json ,確認后重啟IDE。
1.jpg
  1. 打開Arduino IDE,依次點擊菜單項 “工具”->“開發板”->“開發板管理器”,搜索“ESP”,即可看到ESP8266社區提供的ESP8266插件,選擇最新的版本并安裝。
2.jpg
  1. 接下來在Arduino IDE菜單“工具”->“開發板”中選擇你正在使用的ESP8266開發板即可。
4.jpg

至此,Arduino IDE中ESP8266的開發環境就搭建完畢了。

下面進入正題,介紹如何在Arduino IDE開發環境中,制作這款ESP-01S的氛圍燈。這款氛圍燈主體為一個玻璃的礦泉水瓶,電路部分藏身于瓶蓋中,主控采用ESP-01S WiFi模塊,通過控制WS2812B全彩環形燈實現不同燈光模式的呈現。你能想象下圖中這個看似平淡無奇的水瓶,在改制成氛圍燈后,到底會呈現出怎樣奇幻的效果呢?讓我們拭目以待吧!

IMG_20190423_084815.jpg

材料清單

Meterial.jpg

實物接線圖

3.jpg

相比于ESP-01模塊,ESP-01S模塊的GPIO0、RST、EN均已配置上拉,使用時會方便些,這里將GPIO0作為微動按鍵的輸入端,模塊上電時長按微動按鍵使GPIO0為低電平即可進入程序燒寫模式。

實物裝配

IMG_20190224_101750.jpg

圖中需要用到的元器件實物,分別是Micro USB接口板、ESP-01S模塊、5V轉3.3V模塊、WS2812BRGB全彩環形燈。

IMG_20190307_150631.jpg

按照前面的實物接線圖,用導線將各模塊連接起來,這樣硬件連接部分差不多就好了。

IMG_20190227_212056.jpg

接下來把瓶蓋處理一下,需要使用鉆頭和刻刀在其側面開出微動按鍵及Micro USB的孔位。要想把孔的位置和大小做得比較精確的話,手頭沒有合適的量具,只能反復的比對。

IMG_20190307_220418.jpg

將前面焊接好的模塊放置到瓶蓋中。由于導線用的有點粗了,裝配時遇到不小的麻煩,好在最后還是把所有的東西都塞下了。

IMG_20190423_084944.jpg

這是將所有模塊都安裝到位后的樣子,看起來是不是整齊多了。

IMG_20190423_135608.jpg

先上個電試下燈。OK!沒有問題,彩燈全亮了!怎么樣?看起來效果還是十分酷炫吧!

IMG_20190307_232358.jpg

把瓶蓋裝回去是這個樣子的。經過精心測量,按鍵的孔位以及按鍵的高度都恰到好處,手按過去不覺得突兀,按起來也不費力。

軟件編寫

首先打開Arduino IDE,在菜單“工具”->“開發板”中選擇你正在使用的ESP8266開發板即可。這里我們選“Generic ESP8266 Module”。

7.jpg

在Arduino IDE中,對WS2812B全彩LED的控制,可以通過引用Adafruit NeoPixel庫來實現。不需要自己花時間鉆研WS2818B的手冊后再來編寫驅動代碼。這就是Arduino開源平臺最值得稱道之處,有非常豐富的第三方庫函數可用,真是省時又省力,可以說是瞬間拉低了程序員的門檻。如果你的Arduino IDE中沒有NeoPixel庫,可以通過菜單“工具”->“管理庫...”或“項目”->“加載庫”->“管理庫...”,搜索“NeoPixel”即可看到Adafruit NeoPixel庫,選擇最新版本安裝即可。

10.jpg

要使用NeoPixel庫函數,在源文件中把相關的頭文件包含進來就可以了。推薦使用傻瓜式操作,通過菜單“項目”->“加載庫”從右側彈出的庫列表中選擇“NeoPixelBus”即可。

11.jpg

編輯器自動將以下三個頭文件NeoPixelAnimator.h、NeoPixelBrightnessBus.h、NeoPixelBus.h添加至源代碼中。另外,為了實現單按鍵操作,引入Ticker庫用來對按鍵計時,以實現對短按、長按操作進行識別。

8.jpg

通過模版類NeoPixelBus創建strip對象,實現對WS2812B全彩的操控。這里選擇NeoGrbFeature、NeoEsp8266AsyncUart1Ws2812Method類定義的方法實現WS2812B要求的控制協議。PixelCount的數值按所用燈環中LED燈珠的數目設置。PixelPin是用來指定控制WS2812B模塊的引腳,對于ESP8266的板子來說可以忽略,默認就是使用GPIO2。

12.jpg

接下來就是氛圍燈功能實現部分的代碼,主要實現這樣功能:按鍵短按時,可在純色模式和旋轉流水燈模式下,指定燈光顏色,有紅、橙、黃、綠、青、藍、紫、白八色可選;按鍵長按約1秒時,可順序切換四種燈光模式,純色模式、旋轉流水燈模式、彩色漸變模式、幻彩模式;按鍵長按約5秒時,關閉燈光。具體的實現方法可以參考附件中的代碼,限于篇幅這里就不一一介紹了。

16.jpg

代碼燒寫

燒寫代碼時,按下圖將USB串口工具與ESP-01S連接好即可。需要注意的是,在上電時,將ESP-01S模塊的GPIO0腳接地即可進入代碼燒寫模式。

Serial.jpg

給ESP-01S模塊燒寫代碼與通常情況下對Arduino UNO燒寫幾乎沒有差別。只是因為ESP-01S模塊是通過串口工具供電,所以每次燒寫前需要將USB串口工具從電腦的USB口拔除,然后將ESP-01S模塊得GPIO0拉低,重新將USB串口工具插到電腦的USB口,這樣重新上電后ESP-01S即可進入燒寫狀態。注意!因為串口工具有拔插過,所以燒寫時要在到菜單 “工具”-〉“端口”中選擇對應的串行口。

17.jpg

****成品效果****

終于到了最后展示成果的時間了,燈光亮起的瞬間感覺有些驚艷到了,從LED發出的各色光線經過水瓶的折射,光影交織竟然呈現出五彩斑斕、五光十色、萬紫千紅鮮艷奪目斑駁陸離五彩紛呈花團錦簇云蒸霞蔚花色斑斕姹紫嫣紅云興霞蔚五顏六色異彩紛呈的奇幻景象,折騰多日也算是值了。

9.jpg

下面是動圖的效果。轉化為GIF顏色有些損失,成色塊了,感覺也不錯哦,又是另外一番效果。

ColorLamp.gif

你還等什么,趕快也動手做一個吧!

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容