smart

智慧插座開發板介紹

本章重點

  • 認識智慧插座開發板
  • 熟悉智慧插座軟硬體平台的開發
  • 學習使用智慧插座控制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

圖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

圖2 接腳連接圖

 

智慧插座-圖3

圖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和地線則接到插座(如圖五)。
智慧插座-圖4

圖四 焊接點

 

智慧插座-圖5

圖五 插座連接圖

 

最後將智慧插座開發版放進塑膠殼中並鎖緊。如圖六、圖七所示。

智慧插座-圖6

圖六 組合圖

 

智慧插座-圖7

圖七 完成圖

Posted in CoAP, DIY實作, IoT相關訊息, Lua, NodeMCU, 智慧插座.

One Comment

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *


*