ESP8266是一款具備WiFi與32bit MCU的高C/P值SoC (System on Chip),同好們似乎拿來做IoT系統居多;另外,以目前普遍的IoT架構來說,MQTT是傳遞訊息資料最常見的protocol運用,本篇將紀錄如何運用NodeMCU(ESP8266)及MQTT進行數據傳輸,以便完成物聯網應用開發,筆者以此文做為詳細的研究記錄,除避免日後忘記,也可以分享同好,剛好沾沾IoT的潮流。
MQTT環境設置
MQTT主要精神如圖所示:
為了讓學習順利,我規劃用區域網路的封閉環境,來模擬MQTT的環境如下:
- Topic: 由Macbook的Mosquitto來扮演broker
- Publisher: ESP-01和Mac終端機都可以送message
- Subscriber:ESP-01和Mac終端機都可以收message
使用Mosquitto,是由於它除了是Open Source之外,LASS也是用這個工具來傳送感測器所量測的資訊。
首先,下載安裝Mosquitto,在Mac環境下建議用BREW的方式比較簡單容易。
直接在終端機內輸入:
brew install mosquitto
確定安裝成功後,啟動Mosquitto broker,這過程卡住不少時間,主要是安裝流程中並無把Moquitto的path加入,導致系統找不到Moquitto程式!所以,直接在終端機輸入:
/usr/local/Cellar/mosquitto/1.4.7/sbin/mosquitto
如果出現以下訊息,表示成功啟動MQTT broker,port1883。
1455180178: Using default config.
1455180178: Opening ipv4 listen socket on port 1883.
1455180178: Opening ipv6 listen socket on port 1883.
1455180179: New connection from ::1 on port 1883.
1455180179: New client connected from ::1 as mosqsub/545-RegisdeMBP (c1, k60).1455180178: mosquitto version 1.4.7 (build date 2016-01-12 12:28:36-0800) starting
然後,再將下面的Lua code貼到ESPlorer,按「Run」,讓ESP-01執行成為具備MQTT連接功能,如圖。
-- Connect to Wifi AP
wifi.setmode(wifi.STATION)
wifi.sta.config("myssid","mypassword")
-- init mqtt client with keepalive timer 120sec
m = mqtt.Client("notemcu", 120, "", "")
-- setup Last Will and Testament (optional)
-- Broker will publish a message with:
-- qos = 0, retain = 0, data = "offline"
-- to topic "/lwt" if client don't send keepalive packet
m:lwt("/lwt", "offline", 0, 0)
m:on("connect", function(con) print ("connected") end)
m:on("offline", function(con) print ("offline") end)
-- on publish message receive event
m:on("message", function(conn, topic, data)
print(topic .. ":" )
if data ~= nil then
print("message=>", data)
end
end)
只需不到短短一分鐘... 輸入您的信箱與ID註冊即可享有一切福利! 免費電子報 會員搶先看 主題訂閱 好文收藏會員福利
2018/01/09
是否可以
給MCU 一個定固IP ,手機或電腦透過internet ,來查到MCU的資料,同時是利用internet 叫起MCU,省電
2018/01/10
您好,這裡是MakerPRO編輯部,已將您的提問告知作者。請耐心等候謝謝您:)
2018/01/09
不好意請敎一下
是否可以反過來
利用MCU,當伺服器,然後配合網路模組,給一個固定ip, 然後手機或電腦,透過internet 查到mcu的資料呢??
2016/08/23
Hi,
mosquitto 少了一 “t”
“brew install mosquito” => “brew install mosquitto”