先介绍下这个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)