本帖最后由 hanyeguxingwo 于 2016-11-22 11:33 编辑
之前使用Arduino+ESP8266使用EDP协议成功接入了OneNET,实现了物联网控制,本次使用板载ESP8266的ESP-MP-01 MicroPython开发板使用MQTT协议同样成功接入,通过发布TOPIC成功实现智能设备控制。
【1】MQTT协议简介:
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
【2】硬件与软件:
本次使用的硬件为ESP-MP-01开发板:
需要准备的软件有:
1、ESP_DOWNLOAD_TOOL 用于下载开发板固件;
2、uPyLoader 用于与开发板的文件传输,同时该软件也具有终端软件调试的功能,该软件的使用和介绍可以在:中查看;
3、第三方库文件:umqtt,该模块封装了MQTT协议,该模块可以在:中找到。
【3】创建产品和设备:
在OneNET平台创建MQTT公开协议的产品并添加设备:
【4】程序代码:
1、使用ESP_DOWNLOAD_TOOL 工具下载Micropython固件到开发板,固件:
;
2、打开命令行窗口,在uPyLoader目录下输入python main.py打开uPyLoader软件,该软件的运行需要使用pip安装PyQt5和pyserial;
3、选择与开发板连接的串口,连接成功后点击File->Init transfer files初始化传输文件,初始化成功后在MCU端会新增_upload.py和_download.py两个文件:
4、编辑boot.py,mqtt.py和main.py,并将编辑完成后的三个文件和umqtt目录下的simple.py文件一起传输至MCU端;
boot.py用于设置和连接网络:
-
def do_connect():
-
import network
-
sta_if = network.WLAN(network.STA_IF)
-
ap_if = network.WLAN(network.AP_IF)
-
if ap_if.active():
-
ap_if.active(False)
-
if not sta_if.isconnected():
-
print('connecting to network…')
-
sta_if.active(True)
-
sta_if.connect('MicroPython', '12345678') #wifi的SSID和密码
-
while not sta_if.isconnected():
-
pass
-
print('network config:', sta_if.ifconfig())
-
do_connect()
-
gc.collect()
复制代码
mqtt.py用于平台接入和消息处理:
-
from simple import MQTTClient
-
from machine import Pin
-
import machine
-
import micropython
-
# ESP8266 ESP-12 modules have blue, active-low LED on GPIO2, replace
-
# with something else if needed.
-
led = Pin(2, Pin.OUT, value=1)
-
# Default MQTT server to connect to
-
SERVER = "183.230.40.39"
-
CLIENT_ID = "4070825"
-
TOPIC = b"micropython1"
-
username='76013'
-
password='micropythonespmp01'
-
state = 0
-
def sub_cb(topic, msg):
-
global state
-
print((topic, msg))
-
if msg == b"on":
-
led.value(0)
-
state = 1
-
print("1")
-
elif msg == b"off":
-
led.value(1)
-
state = 0
-
print("0")
-
elif msg == b"toggle":
-
# LED is inversed, so setting it to current state
-
# value will make it toggle
-
led.value(state)
-
state = 1 – state
-
def main(server=SERVER):
-
c = MQTTClient(CLIENT_ID, server,6002,username,password)
-
# Subscribed messages will be delivered to this callback
-
c.set_callback(sub_cb)
-
c.connect()
-
c.subscribe(TOPIC)
-
print("Connected to %s, subscribed to %s topic" % (server, TOPIC))
-
try:
-
while 1:
-
#micropython.mem_info()
-
c.wait_msg()
-
finally:
-
c.disconnect()
复制代码
main.py用于程序的运行:
-
import mqtt
-
mqtt.main()
复制代码
simple.py无需更改。
【5】连接测试:
打开uPyLoader的终端窗口,复位开发板后可以看到成功连接值无线网络和接入OneNET服务器:
发送MQTT命令,发送on开发板LED灯亮;发送off命令开发板LED灯灭。
【6】效果展示: