本章重點
- 認識智慧插座開發板
- 熟悉智慧插座軟硬體平台的開發
- 學習使用智慧插座控制Relay元件
主要設備
- 智慧插座開發板
- Seeedstudio Uart_SB實驗板
智慧插座開發板介紹
智慧插座開發板主要由NodeMCU 和四個繼電器(Relay)組成。由NodeMCU控制繼電器的開啟或閉合,進而控制電源的關或開。
NodeMCU是一款基於ESP8266的微控制器,提供GPIO、PWM、I2C、1-Wire和ADC等功能,並支援Wi-Fi連線,可以開啟AP模式讓其它Wi-Fi station連線。使用 Lua語言可以很簡單像Arduino一般的控制硬體。
(1).智慧插座開發板介紹,參考圖1
圖1 智慧插座開發板
接腳定義:
- 3V3:輸入3.3v
- GND:接地
- REST:重新啟動
- TXD:傳送資料
- RXD:接收資料
- ADC:輸入0v~3.3v
- GPIO: 有彈性的軟體可控制的數位信號,PGIO16不支援PWM其他有支援。
GPIO0:空接為工作模式。接地時為燒錄模式,用於燒錄韌體。 - EN:
- J1ACIN:110v火線
- J2ACIN:110v 地線
- J3ACOUT1:LS1繼電器閉合時,110v 火線導通
- J7ACOUT2:LS2繼電器閉合時,110v 火線導通
- J9ACOUT3:LS3繼電器閉合時,110v 火線導通
- J10ACOUT4:LS4繼電器閉合時,110v 火線導通
(2).接腳連接
智慧插座開發板要燒錄時必需如圖2方式連接,左邊為智慧插座,右邊為USB to Uart轉接板,在本例中使用Seeedstudio Uart_SB實驗板。USB to Uart轉接板則透過USB傳輸線連接到電腦。整個連接方式如圖3所示。
圖2 接腳連接圖
圖3完整連接圖
(3).撰寫程式
本範例要實做一個可以遠端控制的智慧插座,共有3個lua程式,分別說明如下:
- init.lua:NodeMCU開機啟動檔。當NodeMCU一開機就會自動執行此檔案。我們將於此程式中將4個GPIO設為LOW,然後再執行wifi.lua啟動wifi連線。
- wifi.lua:啟動wifi連線。取得IP後會執行coap.lua。
- coap.lua:啟動CoAP Server接受連線。
init.lua
pin1=0 --智慧插座使用D0,D5,D6,D7這4個GPIO來控制relay pin2=5 pin3=6 pin4=7 gpio.mode(pin1, gpio.OUTPUT) --將D0設為OUTPUT模式 gpio.write(pin1, gpio.LOW) --將D0設為LOW gpio.mode(pin2, gpio.OUTPUT) --將D5設為OUTPUT模式 gpio.write(pin2, gpio.LOW) --將D5設為LOW gpio.mode(pin3, gpio.OUTPUT) --將D6設為OUTPUT模式 gpio.write(pin3, gpio.LOW) --將D6設為LOW gpio.mode(pin4, gpio.OUTPUT) --將D7設為OUTPUT模式 gpio.write(pin4, gpio.LOW) --將D7設為LOW dofile("wifi.lua") --執行wifi.lua去
wifi.lua
wifi.setmode(wifi.STATION) --將WiFi設定為station模式 wifi.sta.config("4Clab-2.4G", "12345678") --設定wifi SSID和密碼 tmr.alarm(0,1000,1, function() --設定一個timer。ID為0,每1000毫秒執行一次,不斷重複執行 print(wifi.sta.getip()) --印出目前的IP if wifi.sta.getip() ~= nil then --檢查是否取得IP dofile("coap.lua") --取得IP後執行 coap.lua tmr.stop(0) --關閉timer end end)
coap.lua
cs=coap.Server() --啟動CoAP Server cs:listen(5683) --監聽 udp port 5683 print("Coap Server Running...") get_socket1=0 --儲存socket1的狀態。初始化為0 cs:actuator("get_socket1") --產生一個叫get_socket1的resource用來GET socket1的狀態 function put_socket1(payload) -- PUT put_socket1這個resource時會執行的function if payload=="0" then --假如PUT的值為0 get_socket1 = 0 --將get_socket1設為0 gpio.write(pin1, gpio.LOW) --將D0設為LOW elseif payload=="1" then --假如PUT的值為1 get_socket1 = 1 --將get_socket1設為1 gpio.write(pin1, gpio.HIGH) --將D0設為HIGH end cs:actuator("get_socket1") --更新get_socket1這個resource的值 return get_socket1 --回傳get_socket1的值 end cs:actuator("put_socket1") --產生一個叫put_socket1的resource get_socket2=0 --儲存socket2的狀態。初始化為0 cs:actuator("get_socket2") --產生一個叫get_socket2的resource用來GET socket2的狀態 function put_socket2(payload) -- PUT put_socket2這個resource時,會執行的function if payload=="0" then --假如PUT的值為0 get_socket2 = 0 --將get_socket2設為0 gpio.write(pin2, gpio.LOW) --將D5設為LOW elseif payload=="1" then --假如PUT的值為1 get_socket2 = 1 --將get_socket2設為1 gpio.write(pin2, gpio.HIGH) --將D5設為HIGH end cs:actuator("get_socket2") --更新get_socket2這個resource的值 return get_socket2 --回傳get_socket2的值 end cs:actuator("put_socket2") --產生一個叫put_socket2的resource get_socket3=0 --儲存socket3的狀態。初始化為0 cs:actuator("get_socket3") --產生一個叫get_socket3的resource用來GET socket3的狀態 function put_socket3(payload) -- PUT put_socket3這個resource時,會執行的function if payload=="0" then --假如PUT的值為0 get_socket3 = 0 --將get_socket3設為0 gpio.write(pin3, gpio.LOW) --將D6設為LOW elseif payload=="1" then --假如PUT的值為1 get_socket3 = 1 --將get_socket3設為1 gpio.write(pin3, gpio.HIGH) --將D6設為HIGH end cs:actuator("get_socket3") --更新get_socket3這個resource的值 return get_socket3 --回傳get_socket3的值 end cs:actuator("put_socket3") --產生一個叫put_socket3的resource get_socket4=0 --儲存socket4的狀態。初始化為0 cs:actuator("get_socket4") --產生一個叫get_socket4的resource function put_socket4(payload) -- PUT put_socket4這個resource時,會執行的function if payload=="0" then --假如PUT的值為0 get_socket4 = 0 --將get_socket4設為0 gpio.write(pin4, gpio.LOW) --將D7設為LOW elseif payload=="1" then --假如PUT的值為1 get_socket4 = 1 --將get_socket4設為1 gpio.write(pin4, gpio.HIGH) --將D7設為HIGH end cs:actuator("get_socket4") --更新get_socket4這個resource的值 return get_socket4 --回傳get_socket4的值 end cs:actuator("put_socket4") --產生一個叫put_socket4的resource
(4).焊接電路和組裝到塑膠殼中
如圖四,右邊紅框處接火線,藍框處接地線。下方紅框J9ACOUT3和J10ACOUT4和地線則接到插座(如圖五)。
圖四 焊接點
圖五 插座連接圖
最後將智慧插座開發版放進塑膠殼中並鎖緊。如圖六、圖七所示。
圖六 組合圖
圖七 完成圖
aaaaa