先介紹下這個APP(ioT MQTT Panel)怎麼用:python
安裝我就不怎麼說了,安裝完打開軟件是這個樣子的:git
提示沒有鏈接,點那個紅色按鈕建立一個鏈接:github
前兩項都是隨便填的,值得注意的的是那個Broker Web/IP Address,這個最好本身架個服務器,而不是用我填的這個測試用服務器,固然這裏作個例子,先用這個湊數了,填完後點那個CREATE:服務器
能夠看到名爲」測試鏈接「的項目建成了。而後點近去:函數
這理解釋下:Topic能夠理解爲一個通道,好比開關,按下後會往ledctl這個通道里發ledon這個信息,再按一下會往ledctl通道里發ledoff這個信息,最終界面以下:測試
下面,咱們在MicroPython裏邊編寫一點程序,用來接收這個界面發出的消息:ui
首先,下載micropython的MQTT庫:spa
https://github.com/micropython/micropython-lib3d
下找到:umqtt.simplecode
這個目錄下有幾個例子,以及一個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)