MicroPython使用MQTT协议接入OneNET云平台

之前使用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 用于与开发板的文件传输,同时该软件也具有终端软件调试的功能,该软件的使用和介绍可以在:https://github.com/BetaRavener/uPyLoader/中查看;
3、第三方库文件:umqtt,该模块封装了MQTT协议,该模块可以在:https://github.com/micropython/micropython-lib中找到。
【3】创建产品和设备:
在OneNET平台创建MQTT公开协议的产品并添加设备:

【4】程序代码:
1、使用ESP_DOWNLOAD_TOOL 工具下载Micropython固件到开发板,固件:

firmware_v1.8.5-103_ESP8266_MPLR_v1.2.zip (点击阅读原文下载)

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用于设置和连接网络:

  1. def do_connect():

  2. import network

  3. sta_if = network.WLAN(network.STA_IF)

  4. ap_if = network.WLAN(network.AP_IF)

  5. if ap_if.active():

  6. ap_if.active(False)

  7. if not sta_if.isconnected():

  8. print('connecting to network...')

  9. sta_if.active(True)

  10. sta_if.connect('MicroPython', '12345678') #wifi的SSID和密码

  11. while not sta_if.isconnected():

  12. pass

  13. print('network config:', sta_if.ifconfig())

  14. do_connect()

  15. gc.collect()

复制代码

mqtt.py用于平台接入和消息处理:

  1. from simple import MQTTClient

  2. from machine import Pin

  3. import machine

  4. import micropython

  5. # ESP8266 ESP-12 modules have blue, active-low LED on GPIO2, replace

  6. # with something else if needed.

  7. led = Pin(2, Pin.OUT, value=1)

  8. # Default MQTT server to connect to

  9. SERVER = "183.230.40.39"

  10. CLIENT_ID = "4070825"

  11. TOPIC = b"micropython1"

  12. username='76013'

  13. password='micropythonespmp01'

  14. state = 0

  15. def sub_cb(topic, msg):

  16. global state

  17. print((topic, msg))

  18. if msg == b"on":

  19. led.value(0)

  20. state = 1

  21. print("1")

  22. elif msg == b"off":

  23. led.value(1)

  24. state = 0

  25. print("0")

  26. elif msg == b"toggle":

  27. # LED is inversed, so setting it to current state

  28. # value will make it toggle

  29. led.value(state)

  30. state = 1 - state

  31. def main(server=SERVER):

  32. c = MQTTClient(CLIENT_ID, server,6002,username,password)

  33. # Subscribed messages will be delivered to this callback

  34. c.set_callback(sub_cb)

  35. c.connect()

  36. c.subscribe(TOPIC)

  37. print("Connected to %s, subscribed to %s topic" % (server, TOPIC))

  38. try:

  39. while 1:

  40. #micropython.mem_info()

  41. c.wait_msg()

  42. finally:

  43. c.disconnect()

复制代码

main.py用于程序的运行:

  1. import mqtt

  2. mqtt.main()

复制代码

simple.py无需更改。

【5】连接测试:
打开uPyLoader的终端窗口,复位开发板后可以看到成功连接值无线网络和接入OneNET服务器:

发送MQTT命令,发送on开发板LED灯亮;发送off命令开发板LED灯灭。

(0)

相关推荐

  • ESP32+Thonny+固件烧录+编写建议

    https://micropython.org/download/esp32/ http://www.netbian.com/desk/23211.htm 我们此次的主角 这个实在是太新了,我不敢用 ...

  • ESP8266折腾之路(三)使用WebREPL远程更新

    本篇新增软件WebREPL在线版http://micropython.org/webrepl/下载地址:https://codeload.github.com/micropython/webrepl/ ...

  • Pycharm使用嵌入式Python

    安装烧录工具 adafruit-ampy 安装 Ampy是一个简单的命令行工具,用于通过串口连接操作文件并在CircuitPython或MicroPython板上运行代码.使用ampy,您可以将文件从 ...

  • ESP8266上的MicroPython入门(0)

    最近鸽了很久,其实有很多文章没有发出来.天天看各路大佬得万字长文,感觉自己学的太水,羞射....不好意思发.但是不写吧.又感觉对不起自己得99个粉丝(昨天取关了一个). Python and Micr ...

  • ESP8266 刷写MicroPython固件

    固件有很多得种类 这个是下载得页面 官方支持ESP8266,亲生的就是好 高度集成 ESP8266是业内集成度最高的Wi-Fi芯片,最小封装尺寸仅为5mmx5mm.ESP8266高度集成了天线开关.射 ...

  • 基于RT-Thread的智慧路灯案例实验分享

    前言 实验框图 实验说明:设备终端不断采集光强数据并上传至云端进行监控,同时也会把当前LED(路灯)的状态上传.LED的状态会根据光照值进行打开.关闭. 比如当光照值低于(夜晚)我们设置的光照阈值时就 ...

  • MicroPython 交叉编译器(win10构建)

    MicroPython 交叉编译器(win10构建)

  • mpython、micropython的环境配置完整攻略

    Mpython的环境配置 GITHUB上拉去资源: mkdir -p ~/espcd ~/esp git clone -b v4.3 --recursive https://github.com/es ...

  • “物联网开发实战”学习笔记-(三)根据光线调节亮度

    让智能电灯可以基于环境的明暗来自动地打开和关闭.可以分为两个阶段,第一阶段是打造传感器设备来感知光照的强弱,判断出环境的明暗状态,第二阶段是创建一个场景联动,根据传感器的数值来控制智能电灯的状态. 1 ...

  • 【精品资料】想做远程控制却没有云服务器怎么办?这里教你“白嫖”一个

    文/Edward 服务器和公网IP 跳出局域网之后的远程控制,如果没有中间服务器,那么以太网基本就没有用武之地了,所以选用一个可以接入公网的服务器就非常有必要了,可以帮助两个远程设备之间建立通讯转发. ...

  • microPython源码分析.1

    我最近写了很多microPython的程序,越写越回不到写C的日子.你说在这个背后是如何实现这一切的?为什么在烧录一个几百kb的bin文件之后就会获得这些魔法效果?我可不可以把这种魔法效果移植到别处呢 ...