1. 程式人生 > 其它 >使用ESP8266、NodeMCU、機智雲改造傳統插座為智慧插座

使用ESP8266、NodeMCU、機智雲改造傳統插座為智慧插座

我買了某品牌的LED燈 ,可以通過手機App控制開關狀態和亮度,晚上睡覺前躺著就能關燈,大大方便了我等懶人。拆開一看,發現其核心部分是一片Wi-Fi模組 ,電路也不算複雜,我覺得可以自己DIY一個,就去網上淘了幾個ESP8266模組和基於該模組的NodeMCU開發板,打發空閒時間。

本人有一點51微控制器和Keil基礎,但對於Wi-Fi模組來說還是個 “小白”,僅簡單地瞭解過NodeMCU韌體,後來發現了機智雲平臺能夠根據需求在雲端生成程式碼,下載後簡單地改一下就能用了,平臺還提供手機端App 。用了七八天的空閒時間,我終於完成了Wi-Fi插座的製作。

ESP8266晶片是樂鑫生產的,而我們買到的ESP-XX模組是安信可用樂鑫的模組再加上必要電路形成的一個微控制器最小系統。機智雲提供了雲平臺並可在雲端生成程式碼,生成的程式碼是建立在安信可SDK的基礎上,然後又添加了自己的一些控制協議。下面我們就以控制一個LED的亮滅為例,看看具體怎麼操作吧!

 

線上生成機智雲程式碼

在機智雲官網註冊一個賬號,然後登入 ,進入開發者中心建立新產品。產品名稱就叫LEDtest吧 ,選 擇 “Wi-Fi/行動網路方案”,通訊方式和資料傳輸方式保持預設即。

接著新建資料點。

本次製作只是控制一個LED的開關, 所以我只定義了一個最簡單的可寫布林型資料點,也就是說只有開和關這兩種狀態。

在MCU開發頁面中選擇SOC方案和自己的硬體平臺 ,注意這裡的單位是 Mbit ( 4 MB= 32Mbit) 。在基本資訊中複製 Product Secret後貼上,然後生成程式碼包。

搭建開發環境

開發環境我選擇了AiThinker_IDE, 因為它不需要安裝 Linux,也不需要虛擬機器,在Windows下直接解壓就能使用。下載解壓後先執行ConfigTool.exe,單擊“Default” 後 ,再選擇 “Save” 。

開啟AiThinker_IDE. exe,這裡會用到DotNetFx40 Framework,以前沒安裝的話可能會提示安裝。打 開 “File”, 單 擊 “Import”,選擇下圖所示的檔案。

然後單擊 “Next”, 選擇下載到的機智雲程式碼主目錄 。

修改程式

開啟主目錄下的 Makefile,把下圖所示的紅框內容按照實際情況進行修改。

修改引數如下:

BOOT?=none: 不使用 boot

BOOT?=old: 用老版本的 boot_*v l . l +

BOOT?=new: 使用新版本的 boot_ v l.2+

APP?=0: 不使用遠端升級 F0TA

APP?=1: 使用FOTA, 生成 user1.<flash_map>.<BOOT>.bin

APP?=2: 使用 FOTA, 生成 user2.<fiash_map>.<BOOT>.bin

SPI 工速度和模式,一般不用改動,保持預設即可。

SPI SPEED?=40

SPI_MODE?=QIO

SPI_SIZE_MAP: Flash對映方式

注意:有人說用的是多少MB的Flash就寫多少,本人試過2MB和4MB都沒問題,但用1MB的Flash寫SPI_SIZE_MAP?=1時,編譯失敗。

這裡還要修改幾個選中的檔案,我們一個一個來吧。

要實現控制LED的亮滅或繼電器的吸合,需要用到一個變數,我們先在 gizwits_ ptoduct.h 中宣告一下。因為只有開和關2個狀態,用bool型就可以,這有點像KeilC51中的bit型別。

別忘了在gizwits_ product.c中進行初始化設定,這裡設定LED是低電平點亮,上電初始化為高電平,預設不點亮。

往下拉,找到 gizwitsEventProcess 函式。這個函式的作用是用雲端資料點的值 CurrentDataPoint.valueLED 來控制LED等需要控制的實際電路,當雲端為1時(ON),我們自己定義的變數STA=0,LED點亮;雲端為0時(OFF),則STA=1,LED熄滅。

繼續向下 ,修改userHandle使用者定 時器的回撥函式,預設為1000ms呼叫一次 ,也可以在 gizwits_ protocol.c檔案中修改 USER_TIME_MS,此處呼叫時間修改為100ms。把 STA賦值給實際操作的 GPIO來完成 LED的亮滅 ,並把本地狀態與雲端完成同步。

檔案最下面,初始化雲端資料點的值。

接下來 ,開啟 user_main.c檔案, 找到下圖所示的位置。

雲端生的程式碼預設定義了2個按鍵,而我們只需要1個就夠了。NodeMCU開板的Flash按鍵接在 GPIO0 引腳。在定義按鍵時要注意 GPIO 的命名規則,比如GPIO1在程式裡要寫為U0TXD,這對初學者來說是要重點注意的地方。Inst Name、 GPIO 和 NodeMCU 的對照關係,如圖所示。

在user_main.c 檔案中把與Key2有關的函式都刪掉。在Key1ShortPress函式裡新增 “STA= ! STA; ”, 即每次短按把STA取反,也就是說短按點亮 LED,再按一下LED燈滅 。

Key1LongPress裡還有—句 “gizwitsSetMode(WIFI_ AIRLINK_ MODE)”, 其作用是在長按按鍵時讓 ESP8266 模組進入配對模式,此時開發板右上角LED點亮 ,然後通過手機 App把模組接入Wi-Fi。

再往下就是GPIO 的初始化。ESP8266 模組右上角有一個 LED接到了 GPIO2 , 在程式中配置一下用作配對指示 。開發板靠近Micro USB的LED接在了 GPIO16 ,這就是我們最終要控制的指示燈了。值得注意的是,GPIO16的控制與其他埠的控制是不同的。

下圖所示是按鍵與LED的電路圖。

到這裡程式就修改完了,仔細檢查確認無誤後儲存。在最左側C/C + + Projects視窗主目錄上單擊滑鼠右鍵,選擇 “Build Project”。如果沒有錯誤,就會看到生成了 user1.4096.new.4.bin 等檔案,如下圖所示。沒看到的話說明程式有錯誤,請仔細確認。

開啟ESP8266燒寫工具ESPFIashDownloadTool_ v3 .6.4,選擇ESP8266 DownloadTool,按照圖所示進行配置 。

設定好後單擊 “START”,下載完成後按一下模組的 Reset,模組端配置完成。

手機端配置

在機智雲官方網站完成下載安裝機智雲App,並開啟App。

賬號 、密碼頁面直接選跳過,點選右上角的 “ + ”號 ,選一鍵配置後輸入當前手機所連線的 SSID和 Wi-Fi密碼。

進行下一步 ,模組型別選擇樂鑫,在出現 “通電後按以下提示操作”後(如圖所示) ,長按 NodeMCU開 發 板 Flash按鍵 ,右上角 LED點亮後,點 擊 “我已完成上述操作”, 稍等一會兒會提示完成裝置新增。

試著划動 “開啟/關閉”按鈕,看NodeMCU開發板上的LED是否可以正常亮滅。

按動NodeMCU開發板上的Flash按鍵,LED亮滅的同時,手機 App上的開關狀態也應同步開關。

到這裡,我們已完成了DIY—個Wi- Fi插座的所有知識介紹。接下來找出洞洞板,抄起電烙鐵,開工製作。

實際製作

我找出以前買來的3位插排。拆掉開關和接線端子,用騰出來的空間安裝220V轉 5V 開關電源、ESP8266控制板和繼電器,把開關蓋用熱溶膠固定在原來的位置。在確定可以放下2個繼電器後,我決定做2路的智慧插座,剩下的1路用來做常通插座。

找一個手機5V介面卡,去掉外殼和USB 介面以減小體積。

電路用洞洞板簡單搭一下,ESP07 小板加上 LDO、阻容、繼電器,一會就焊好 了 。

修改上面除錯好的程式,把資料點改成 2個 , 編譯完成後燒寫到模組,然後用熱熔膠固定。高壓 、低壓之間記得用塑料片隔離,安全第一。

因為沒有按鍵作AIRLINK,所以我將程式改為上電後30s未連線到Wi-Fi自動切換為AIRLINK配網模式,同時板載的藍色LED點亮, 因為很少會用到此功能,且從側面也能看到燈光,就沒有額外開LED孔位。

在手機端輸入Wi-R的SSID和密碼就能把插排接入網際網路,測試正常後,把插座裝好,就可以投入使用了。

智慧插排的用途可以自由發揮,只要是能用開關控制的電器都可以接入,比如USB小燈、 普通風扇、電動車充電(可以將程式改為開啟後定時關閉)等 。