先介紹下這個APP(ioT MQTT Panel)怎么用:
安裝我就不怎么說了,安裝完打開軟件是這個樣子的:

提示沒有連接,點那個紅色按鈕創建一個連接:

前兩項都是隨便填的,值得注意的的是那個Broker Web/IP Address,這個最好自己架個服務器,而不是用我填的這個測試用服務器,當然這里做個例子,先用這個湊數了,填完后點那個CREATE:

可以看到名為”測試連接“的項目建成了。然后點近去:





這理解釋下:Topic可以理解為一個通道,比如開關,按下后會往ledctl這個通道里發ledon這個信息,再按一下會往ledctl通道里發ledoff這個信息,最終界面如下:

下面,我們在MicroPython里邊編寫一點程序,用來接收這個界面發出的消息:
首先,下載micropython的MQTT庫:
https://github.com/micropython/micropython-lib
下找到:umqtt.simple
這個目錄下有幾個例子,以及一個umqtt的目錄(里邊的simple.py就是庫了)

吧simple.py庫拷進ESP8266:
然后新建一個ledctl.py內容如下:
import time from simple import MQTTClient def sub_cb(topic, msg): #回調函數,收到服務器消息后會調用這個函數 print(topic, msg) c = MQTTClient("umqtt_client", "test.mosquitto.org") #建立一個MQTT客戶端 c.set_callback(sub_cb) #設置回調函數 c.connect() #建立連接 c.subscribe(b"ledctl") #監控ledctl這個通道,接收控制命令 while True: c.check_msg() time.sleep(1)

然后點手機上的開關,在終端會收到如下信息:

好了,我們的ESP8266收到了手機發來的消息!
然后改寫代碼控制LED(我的板子上的LED為GPIO2)
import time from simple import MQTTClient from machine import Pin led=Pin(2,Pin.OUT) def sub_cb(topic, msg): print(topic, msg) if topic==b'ledctl': if msg==b'ledon': led.off() #因為實際IO為0ff時燈是亮的 if msg==b'ledoff': led.on() c = MQTTClient("umqtt_client", "test.mosquitto.org") c.set_callback(sub_cb) c.connect() c.subscribe(b"ledctl") while True: c.check_msg() time.sleep(1)
運行代碼,發現手機可以正常控制燈的亮滅了
再寫代碼讓第二個LED控件顯示LED的狀態:
import time from simple import MQTTClient from machine import Pin led=Pin(2,Pin.OUT) def sub_cb(topic, msg): print(topic, msg) if topic==b'ledctl': if msg==b'ledon': led.off() if msg==b'ledoff': led.on() c = MQTTClient("umqtt_client", "test.mosquitto.org") c.set_callback(sub_cb) c.connect() c.subscribe(b"ledctl") while True: c.check_msg() if led.value()==1: c.publish('ledstatus','ledoff') if led.value()==0: c.publish('ledstatus','ledon') time.sleep(1)

