2015年10月28日 星期三

ESP8266 NodeMCU 使用 Lua 自動連網

ESP8266 NodeMCU 使用 Lua 自動連網

在使用Arduino的時候,有時候會需要將TxRx的連線訊息透過 WiFi 傳送到一個指定的網站。這時就可以使用 ESP8266 with nodeMCU 來達成。
在ESP8266裡面刷 nodeMCU 來跑 lua script 的方式可以參考之前的文章。
所以這邊就直接把範例程式碼寫出來如下:
ssid = "My_AP"
passwd = "12345678"
scratch_ip = "192.168.0.1"
scratch_port = 12345
wifi.setmode(wifi.STATION)
wifi.sta.config(ssid,passwd,1)

tmr.alarm(1,1000, 1, function() 
    if wifi.sta.getip()==nil then 
        print(" Wait to IP address! for " .. ssid) 
    else 
        print("New IP address is "..wifi.sta.getip())
        tmr.stop(1)
        sck = net.createConnection(net.UDP)
        sck:on('receive', function(sck,pl) uart.write(0,pl) end)
        uart.on('data',0, function(data) sck:send(data) end,0)
        sck:connect(scratch_port,scratch_ip)
        sck:send("START UART Tunnel\n")
        uart.setup(0,38400,8,0,1,0)
    end 
end)
將這個 script 用 "init.lua" 的檔名存到 ESP8266 晶片之中之後,之後 ESP8266 開機就會自動去和指定的無線 AP 連線,然後把從 UART port 所收到的訊息用 UDP Socket 的方式送到指定的 ip 位置裡的指定port。
其中 ssid 變數指定無線 AP 的 SSID ,passwd 變數為 AP 登入密碼。 scratch_ip 和 scratch_port 則是連線之後 UART 訊息要收發的伺服器位置和 port。
其中 tmr.alarm() 函示用來設定 timer 每隔 1 秒就執行一次 wifi.sta.getip() 確認是否有正確取得IP位置。如果確認取得IP位置就執行另一段程式碼將timer 關掉,並且和伺服器建立一個 UDP 的 socket ,將UART收到的封包傳送到伺服器,並將伺服器傳送過來的封包透過 UART 發送出去。
該段程式碼是用來把 S4A 的板子所發出來的封包透過 wifi 連線和指定的伺服器做連線。

沒有留言 :

張貼留言