物聯網開發之 socket 通信點亮第一個 led 燈


工具

硬件:ESP8266 開發板、杜邦線、USB 數據線、LED 燈
軟件:ESPlorer、socketools、flashtool

前提准備

NodeMcu 的介紹:https://baike.baidu.com/item/NodeMCU/17106281?fr=aladdin

去 NodeMcu的官網上在線編譯一個固件 https://nodemcu-build.com/,編譯選項選擇默認,填上郵箱一會就把固件的下載地址發送過來了。

使用 ESPFlasher 把固件刷入(integer 和 float 兩種版本都行),接着就可以用 ESPlorer 進行 Lua 語言的開發了。

實現局域網內點亮一個 LED 燈

具體的步驟如下:

  1. 設置 ESP8266 的 wifi 模式為 STATION 和 STATIONAP(同時具有 ap 和 station 的功能,以前很舊的安卓機的 wifi 可能有的會有這種功能,但是現在的手機似乎都被限制成只能單獨開啟一種模式。)
  2. 連接 wifi。參考官方的 api 函數。鏈接見參考資料。
  3. 建立一個 socket server,將 10116 端口設置為監聽的端口,以 "receive" 為監聽器,將收到的數據進行判斷。
  4. 收到為 "on" 則控制 ESP8266 的引腳 1 (D1)為輸出模式以及高電平,若為 "off",則相反。以此來達到點亮 LED 燈的目的

ESP8266 IO 口引腳圖:

代碼實現

wifi.setmode(wifi.STATIONAP)
function con_wifi()
    cfg = {}
    cfg.ssid = "D-Link_DIR-820LW"
    cfg.pwd = "szdsys207"

    wifi.sta.config(cfg)
    wifi.sta.connect()
    print("config success!")
end


con_wifi()
pin = 1
gpio.mode(pin,gpio.OUTPUT)

srv = net.createServer(net.TCP,28800)
srv:listen(10116,function(conn)
    print "listening..."
    conn:on("receive",function(sck,recvStr)
        print("The data: "..recvStr)
        if (recvStr == "on") then
            gpio.write(1,gpio.HIGH)

        elseif(recvStr == "off") then
            gpio.write(1,gpio.LOW)

            
        else
            print("no choice!")
        
        end
    end)
end)

  • 可以將代碼設置為 ESP8266 開機初始化加載,即在 init.lua 中使用 dofile 函數來載入

但是需要注意的是必須點擊 UPLOAD 以后才能使得 init.lua 正常加載,否則會提示 file not found。

實現效果

這里是在本地開啟了一個 10116 的 TCP 端口,可以手寫 c 語言或者 python 的 socket 編程來連接上發送數據。

但是我這里直接選擇了現成的工具來發包。

  1. 發送 "on" 會將 LED 燈點亮

如圖:

  1. 發送 "off" 會將 LED 燈熄滅

如圖:

  1. 發送 "on" 或者 "off" 之外的命令會提示 "no choice"

wireshark 查看 TCP 包

用 wireshark 查看一下發送控制命令的 TCP 包的情況。

  • 當控制信息為 "on" 時的情況

其他兩種情況都是類似,就不重新抓包了。

參考資料

https://nodemcu.readthedocs.io/en/master/en/modules/wifi/#wifistagetap
https://blog.csdn.net/zz531987464/article/details/83449458
https://www.cnblogs.com/webenh/p/9087555.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM