EC600 QuecPython 自带Aliyun腾讯云物联网平台的接入库,但重口难调,产品项目中更多的是接入自己搭建的第三方服务器。

MQTT协议接入不同的服务器,最大的区别在于connect报文。

connect报文的载荷中,包含了设备的登录账号,而每个平台都有自己的设备管理方式,也就造成编码方式的不一致。不过好在MQTT也规定了 clientId、userName、passWord 这几个关键载荷,用户只要保证这几个部分与平台匹配即可连接。


使用 EC600 QuecPython 接入第三方MQTT服务器,需要使用 umqtt 模块。

这里为方便测试,使用阿里云账号,不过不用 aliyun 的MQTT接入库,直接用 umqtt 模块。

  • EC600 umqtt 使用帮助:QuecPython - 在线API文档
  • 本篇demo使用的测试设备账号、以及密码的合成方式:网络调试助手接入阿里云MQTT物联网平台,逐字节讲解各字段合成方式
  • 阿里云物联网平台的设备添加:阿里云物联网平台注册、添加产品、设备

上述的设备账号会一直保留,方便测试,各位可放心使用。


EC600 MQTT脚本


接入第三方MQTT服务器,需要根据自己的设备及服务器,自行计算并替换:clientId、userName、passWord、brokerUrl 以及 topic。(阿里云的 clientI、userName、passWord 计算方式见上述链接)

Demo代码:

from machine import Pin
import log
import checkNet
from umqtt import MQTTClient# 使用提前计算好的密码,可以登录连接。hamc库暂时使用有问题,待官方的固件库更新
# 使用umqtt库接入阿里云物联网平台,模拟接入第三方MQTT服务器进行测试
clientId = 'co_0001|securemode=3,signmethod=hmacsha1|'
userName ='co_0001&a1wFylTxYeD'
passWord = 'e782b5e55b37655c27812a60c307b0a7575d8f6d'
brokerUrl = 'a1wFylTxYeD.iot-as-mqtt.cn-shanghai.aliyuncs.com'
topic_post = b'/sys/a1wFylTxYeD/co_0001/thing/event/property/post'
topic_set = b'/sys/a1wFylTxYeD/co_0001/thing/service/property/set'PROJECT_NAME = "MQTT_example"
PROJECT_VERSION = "1.0.0"# 检查网络状态,创建checkNet对象
checknet = checkNet.CheckNetwork(PROJECT_NAME, PROJECT_VERSION)
# 设置日志输出级别,仅输出等级高于INFO的日志结果
log.basicConfig(level=log.INFO)
log = log.getLogger("MQTT")state = 0# V1.2 Demo板上的led - D6
blink = False
led = Pin(Pin.GPIO24, Pin.OUT, Pin.PULL_DISABLE, 0)# 设置MQTT接收消息回调
def sub_cb(topic, msg):global statelog.info("Subscribe Recv: Topic={},Msg={}".format(topic.decode(), msg.decode()))state = 1# 收到下发的消息时,LED亮灭状态会发生变化global blinkblink = bool(1-blink)led.write(blink)if __name__ == '__main__':# 上电运行后调试输出 项目名称、项目版本号、固件版本号、开机原因、SIM卡状态checknet.poweron_print_once()print('Hardware PowerON!')# 开机后LED亮起,指示状态。led.write(1)# 阻塞等待网络就绪,超时等待30sstagecode, subcode = checknet.wait_network_connected(30)if stagecode == 3 and subcode == 1:# 网络准备就绪,开始执行用户代码log.info('Network connection successful! Then connect to Aliyun MQTT')# 指示LED灭掉,提示网络连接正常。led.write(0)print('username:', userName)print('password:', passWord)# 创建一个mqtt实例c = MQTTClient(client_id=clientId,server=brokerUrl,port=1883,user=userName,password=passWord,keepalive=60)# 设置消息回调c.set_callback(sub_cb)# 建立连接try:c.connect()except Exception as e:print('!!!,e=%s' % e)# 正常连接后,输出消息log.info('Aliyun MQTT connected , Then subscribe topic')# 订阅主题c.subscribe(topic_post)log.info('subscribe topic: %s' % topic_post)c.subscribe(topic_set)log.info('subscribe topic: %s' % topic_set)# 发布消息c.publish(topic_post, 'test publish')log.info('Publish topic: %s, Msg: %s' % (topic_post, 'test publish'))log.info('listen')while True:c.wait_msg()  # 阻塞函数,监听消息else:log.info('Network connection failed! stagecode = {}, subcode = {}'.format(stagecode, subcode))

运行现象


SIM插入、4G网络正常,正常运行的现象。

log会显示正常连接、订阅topic 和 publish。最后在 publish 一条消息后,一直处于监听状态。

  • 连接后能在管理页面看到设备在线。
  • 测试下发控制消息
  • 观察 V1.2 Demo板上的led - D6,收到下发的消息时的同时,LED亮灭状态也会发生变化。(led亮灭是脚本中自己加入的代码)

注意事项

  • hmac 暂时有问题,需要等待固件更新,才可以让设备自行合成 passWord。
  • 接入第三方MQTT服务器,需要自行计算clientId、userName、passWord、brokerUrl 以及 topic,并替换。
  • umqtt的异常提醒很坑,如设备账号填错,会报错 bytes index out of range。而非重新连接。
  • 代码中如有 while,会导致与上位机的通信阻塞。重新下载脚本时,需要断开连接、复位、再重新连接。(如带有while 的脚本文件名为 main.py,则会上电自运行,只能通过重刷固件解决)

EC600 QuecPython接入第三方MQTT服务器, 以阿里云物联网平台为例,可替换为自己创建的MQTT服务器相关推荐

  1. 微信小程序连接物联网(三):微信小程序远程遥控宿舍开门 基于NodeMCU通过MQTT协议连接阿里云物联网平台

    索引 这是用微信小程序遥控开门的系列文章,具体微信小程序连接物联网的代码在第三章提及. 微信小程序连接物联网(一):初始化ESP8266 NodeMCU 微信小程序连接物联网(二):NodeMCU L ...

  2. AIR724 4G模块云平台接入教程(2)- 阿里云物联网平台

    AIR724 4G模块云平台接入教程(2)- 阿里云物联网平台 Aliyun IOT 设备配置和接入 自动注册 一型一密 一机一密 消息通信 通信主题 通信流程 使用实战 属性上报 异步服务调用 同步 ...

  3. java实现mqtt服务端_基于Swoole使用MQTT协议连接阿里云物联网平台设备实现消息订阅

    阿里云物联网平台为设备提供安全可靠的连接通信能力,支撑设备数据采集上云,我们这里认为阿里云物联网平台是 MQTT 服务端,那么我们自己的设备作为客户端,应该如何实现消息订阅? 阿里云没有提供 PHP ...

  4. 微信小程序使用MQTT远程控制单片机——阿里云物联网平台

    微信小程序使用MQTT远程控制单片机--阿里云物联网平台① 阿里云物联网平台的使用 第一,注册阿里云 第二,找到找到物联网平台并创建设备 MQTT协议格式的讲解 MQTT中文文档 固定报头 Fixed ...

  5. 树莓派mqtt协议连接阿里云物联网平台,手机端获取数据并控制

    树莓派mqtt协议连接阿里云物联网平台(三) 前面树莓派的数据已经上传到云端,可是我的android手机该如何获取树莓派上传的这些数据呢,,困惑了我好几天的疑问,解开的那一刻,真的时拨开云雾见青天啊. ...

  6. 中移M5311模块MQTT协议连接阿里云物联网平台(干货)

    一.准备三元组 在阿里云物联网平台新建产品和设备后,平台给每一个设备自动赋予三元组. 二.准备MQTT协议参数 新建产品时,阿里云物联网平台会分配一个含productkey的子域名,端口号固定是188 ...

  7. MQTT之十一 阿里云物联网平台网址

    阿里云物联网平台--阿里云  网址 https://help.aliyun.com/product/30520.html?spm=a2c4g.11186623.6.540.70283e3cGZdZMA ...

  8. MQTT.fx连接阿里云物联网平台

    新手入门级别主要阐述大致流程和自己学习的理解 超前思想:老工程师:代码不是最难的,方案才是最难的.方案搞清楚.代码只要学它就会,早晚都要会的对不对; MQTT.fx作用是用来调试阿里云,只要用这个配置 ...

  9. STM32+ESP8266+MQTT协议连接阿里云物联网平台

    一.环境介绍 单片机采用:STM32F103C8T6 上网方式:采用ESP8266,也可以使用其他设备代替,只要支持TCP协议即可.比如:GSM模块.有线网卡等. 开发软件:keil5 硬件连接功能: ...

最新文章

  1. linux firefox xvfb,自动化测试之linux+xvfb+selenium+firefox+python测试环境搭建与测试
  2. Application Architecture Guide 2.0 - CH 19 - Mobile Applications(5)
  3. Android获取手机型号,系统版本,App版本号等信息
  4. Redis 有序集合(zset)取交集(zinterstore)操作耗时测试
  5. 第十二天Python学习记录
  6. ITK:读写矢量图像
  7. stm32看门狗_STM32单片机:独立看门狗、窗口看门狗的配置
  8. HTTP的请求头 Last-Modified 与 If-Modified-Since 和 If-None-Match 与 ETags
  9. 大B与小b的区别(Bps与bps)
  10. PreSubclassWindow()作用
  11. linux -----各种颜色代表什么
  12. android系统无法识别u盘,OTG无法识别U盘怎么办 OTG无法识别解决方法
  13. ELEMENTARY: Is Even
  14. 注册Github账号
  15. afx是什么意思呀,什么时候要include呢,这个头文件的作用是??
  16. 哈工大深圳计算机水平怎么样,赞!哈工大(深圳)学子在第四届“龙芯杯”全国大学生计算机系统能力培养大赛中获多个奖项...
  17. Elasticsearch+cerebro部署文档
  18. java怎样模拟点击网页,笔者操作Java+selenium实现网站模拟点击和页面数据爬取
  19. html中如何等比缩小图片,css实现图片的等比缩放
  20. Specified VM install not found: type Standard VM, name jre7

热门文章

  1. python 绘制柱状图
  2. https://127.0.0.1:8080/test?param={%22..报错
  3. bzoj2818: Gcd
  4. 【DotNet加密方式解析】-- 好文收藏
  5. 高性能mysql 第5章 创建高可用的索引
  6. 学习ios,看到下面的博客感觉收获很大
  7. 关于.Net Application Server对象访问方式的设计(2.上)
  8. 【重识 HTML + CSS】网页基础知识、基本 HTML 标签
  9. 《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题
  10. anaconda 清华源挂了 怎么办 上交源ok