前言:MQTT是当下物联网用的比较多的协议,本篇聊一聊用esp32通过MQTT连接到中移OneNET物联网平台。

OneNET平台创建产品和设备

1、​创建产品:开发者中心-》全部产品-》MQTT物联网套件(新版)-》添加产品

2、​添加设备:产品概况-》设备列表-》添加设备

3、​数据流-》数据流模版管理-》添加数据流模版

提示:这里根据自己要上传的数据创建。

MQTT.fx客户端模拟设备上报数据

1、MQTT服务器地址:183.230.40.96

2、端口号:1883

3、​图中Client ID、User name、Password根据官网的提示依此是:

Password可以使用官网提供的工具生成(https://open.iot.10086.cn/doc/mqtt/book/manual/auth/tool.html),也可以使用python脚本生成。

官方工具生成:

时间戳:https://tool.chinaz.com/Tools/unixtime.aspx,这个时间不能比当前时间小,比如输入1672735919,表示的是2023/1/3 16:51:59,到这个时间后mqtt服务器就会拒绝访问。

Python脚本生成:官方给你的脚本稍微有点问题,修改之后下:

import base64
import hmac
import time
from urllib.parse import quote
def token(id,devicename,access_key):version = '2018-10-31'#res = res = 'products/%s' % id  # 通过产品ID访问产品API#修改如下res = 'products/%s/devices/%s' %( id ,devicename)# 用户自定义token过期时间et = str(int(time.time()) + 3600)# 签名方法,支持md5、sha1、sha256method = 'sha1'# 对access_key进行decodekey = base64.b64decode(access_key)# 计算signorg = et + '\n' + method + '\n' + res + '\n' + versionsign_b = hmac.new(key=key, msg=org.encode(), digestmod=method)sign = base64.b64encode(sign_b.digest()).decode()# value 部分进行url编码,method/res/version值较为简单无需编码sign = quote(sign, safe='')res = quote(res, safe='')# token参数拼接token = 'version=%s&res=%s&et=%s&method=%s&sign=%s' % (version, res, et, method, sign)return token
if __name__ == '__main__':id = '329104'devicename='my_mqtt_device'access_key = 'PSbr2krSLrLfZ9BZ4GWv9y8Ys657ZHDAuxO31y55B9k='print(token(id,devicename,access_key))

只需要提供产品id、设备名称devicename、access_key(key)就可计算出,这里要注意一下脚本里面默认的时间戳是当前时间往后1h,也就是1h之后,mqtt服务器就拒绝访问了,可以自行更改。​如果没有安装python,可以使用在线编程工具。​

4、​正确输入参数之后,连接到服务器:

5、​上报数据,OneNET提供了3个topic:

其中{pid}是产品id,{device-name}是设备名称;$sys/{pid}/{device-name}/dp/post/json用于发布,上报数据,数据格式仅支持json格式,其余两个是上报数据之后的响应,客户端可以订阅。

上报数据之后,上报成功或者失败,平台都会返回系统通知,可以订阅主题查看:

6、​下发数据,OneNET提供了4个topic:

其中{pid}和{device-name}的含义同上,{cmdid}为平台为该命令自动创建的唯一标识,在客户端订阅的时候可以使用通配符+或者#代替{cmdid}。

下发数据,不必使用json格式。

7、​客户端查看:

ESP32设备连接到OneNET

1、创建设备,方法和上面一样,命令为esp32_mqtt_device

2、计算password

3、发布和订阅主题

publish_TOPIC = '$sys/329104/esp32_mqtt_device/dp/post/json',用于上报数据

subscribe_TOPIC ='$sys/329104/esp32_mqtt_device/dp/post/json/+',用于接收平台对上报数据的相应。

4、micropython脚本编写

from umqtt.simple import MQTTClient
from machine import Pin
import network
import time
import machine
import dht
from machine import Timer
SSID="**********"  # wifi名称
PASSWORD="*********" # wifi密码
SERVER ='183.230.40.96'
CLIENT_ID = "esp32_mqtt_device"   #设备名称
#PORT=1883
username='329104' #产品ID
password='version=2018-10-31&res=products%2F329104%2Fdevices%2Fesp32_mqtt_device&et=1618323601&method=sha1&sign=ss36MphhbXRi3EFAPhqLEYFw0VQ%3D'
publish_TOPIC = '$sys/329104/esp32_mqtt_device/dp/post/json'
subscribe_TOPIC ='$sys/329104/esp32_mqtt_device/dp/post/json/+'
client=None
mydht=None
def sub_cb(topic, msg):print((topic, msg))
def connectWifi(ssid,passwd):global wlanwlan=network.WLAN(network.STA_IF)         #create a wlan objectwlan.active(True)                         #Activate the network interfacewlan.disconnect()                         #Disconnect the last connected WiFiwlan.connect(ssid,passwd)                 #connect wifiwhile(wlan.ifconfig()[0]=='0.0.0.0'):time.sleep(1)print(wlan.ifconfig())
def apptimerevent(mytimer):try:sensordata=ReadTemHum()mymessage='{"id": 123,"dp": {"CurrentTemperature": [{ "v": %d,}],"CurrentHumidity": [{"v": %d,}]}}'%(sensordata[0],sensordata[1])client.publish(topic=publish_TOPIC,msg= mymessage, retain=False, qos=0)except Exception as ex_results2:print('exception',ex_results2)mytimer.deinit()
#     finally:
#         machine.reset()
# #Catch exceptions,stop program if interrupted accidentally in the 'try'
def ReadTemHum():mydht.measure()tem=mydht.temperature()hum=mydht.humidity()data=[tem,hum]print(data)return data
if __name__=='__main__':try:mydht=dht.DHT11(machine.Pin(4))connectWifi(SSID,PASSWORD)client = MQTTClient(CLIENT_ID, SERVER,0,username,password,60)     #create a mqtt clientprint(client)client.set_callback(sub_cb)                         #set callbackclient.connect()                                    #connect mqttclient.subscribe(subscribe_TOPIC)                   #client subscribes to a topicmytimer=Timer(0)mytimer.init(mode=Timer.PERIODIC, period=5000,callback=apptimerevent)while True:client.wait_msg()                            #wait messageexcept Exception  as ex_results:print('exception1',ex_results)finally:if(client is not None):client.disconnect()wlan.disconnect()wlan.active(False)

5、查看数据

日志查看:日志查询-》输入查询时间和设备ID。

6、​设备通过串口打印平台响应:

——————END——————​

相关阅读:

使用ESP32来学习Python之开发环境搭建

ESP32从网络获取天气OLED显示(附源码)

ESP32运行MicroPython通过MQTT上报温湿度到中移OneNET物联网平台(附源码)相关推荐

  1. STM32+果云GA6-GPRS/GSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位

    一.环境介绍 MCU:  STM32F103C8T6 GSM模块: GA6--果云 开发软件: Keil5 完整源码下载:  https://download.csdn.net/download/xi ...

  2. 【MQTT】利用MQTT.fx上传数据节点到中移OneNET云平台

    在学习使用OneNET云平台过程中,使用MQTT协议向平台上传数据,利用MQTT.fx输入发布tpoic,为了确保设备上传消息确实被平台所接受处理,设备可以订阅系统 topic ,从而获取上传数据点的 ...

  3. IOT必备之MQTT结构分析,不进来看看?【后附源码】

    全网唯一物联网MQTT协议报文 结构分析以及基于C#代码的报文组装实现 介绍 MQTT是一种基于TCP/IP协议的应用层协议,它规定了不同应用之间进行数据交换时的传送格式.既然是协议,理论上可以被任何 ...

  4. 物联网云监控平台设备管理iot源码,MQTT/ONENET带APP端源码

    大型物联网平台全套源码 物联网云监控IOT设备管理源码带APP端 开发语言:PHP 数据库:MYSQL 开发工具:phpstrom 源码类型:全开源免费分享 物联网云监控WEB设备管理iot源码,MQ ...

  5. 支付宝小程序使用MQTT over WebSocket连接阿里云IoT物联网平台

    前言 之前写了一篇微信小程序使用MQTT over WebSocket连接阿里云IoT物联网平台,介绍了如何使用mqtt.js在微信小程序上连接mqtt服务器,文中顺带提了mqtt.js是支持支付宝小 ...

  6. mqtt 域名连接_中国移动OneNet物联网平台,如何使用MQTT协议,进行连接

    大家好,超子又和大家见面了,超子我能力有限,技术不高,有什么错误的地方,欢迎板砖.今天我们一起构建MQTT协议中的CONNECT报文,连接OneNet物联网平台,然后进行通信.前面的文章中,超子介绍阿 ...

  7. java计算机毕业设计社区电商平台系统源码+系统+数据库+lw文档+mybatis+运行部署

    java计算机毕业设计社区电商平台系统源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计社区电商平台系统源码+系统+数据库+lw文档+mybatis+运行部署 开发软件:i ...

  8. 百度离线地图示例之十三:动态运行轨迹实现(附源码)

    前言介绍: 主要是基于v3.0的API版本进行的离线,纯内网可操作,基本上实现了现有90%以上的功能点,能兼容jpg和png格式的瓦片图层,实现了原生和基于Vue两个版本(包含常用的55个示例),文末 ...

  9. ESP32运行microPython报错:rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee

    使用Esp32调试microPython的时候 上传代码后一直报错(附:报错原因,以及解决方法) Arduino以及idf 均会出现 如下内容 无限循环打印 rst:0xc (SW_CPU_RESET ...

最新文章

  1. 改革以来计算机应用发展总结,计算机应用专业课程改革总结.doc
  2. jQuery添加/改变/移除CSS类
  3. 任正非:华为活下来走到今天,要感谢乔布斯发明iPhone
  4. CSS - 层叠特性
  5. 【调试工具】之IOS真机测试
  6. DBGrid 应用系列
  7. 如何防止SWF文件被反编译 如何防止SWF文件被反编译(2)
  8. 学习用PySide写界面
  9. 老师给我推荐的经典管理书籍
  10. 搭建Web服务器建网站的步骤
  11. linux中oppenoffice的安装
  12. 8产权界定_保护与限制
  13. 清华领军计划计算机试题,清华大学自主招生考试试题难吗
  14. python做excel自动化视频教程-从零基础入门到精通用Python处理Excel数据视频教程...
  15. 2020年年度总结(致敬自己)
  16. JVM: GC过程总结(minor GC 和 Full GC)
  17. 西部光伏电站不景气 屋顶光伏春天将至
  18. 引力魔方和直通车哪个好?两款工具效果怎样?
  19. R/RStudio 常用函数
  20. 技术原理故事_关于技术与孤独的爱情故事

热门文章

  1. 教你如何修改私服NPC卖东西
  2. 计算机不能启动 无法验证数字签名,Win10提示错误0xc0000428无法验证此文件的数字签名怎么办?...
  3. Java基础知识-char
  4. html6+树状下拉列表,layui+ztree 树状下拉框
  5. 三年亏损14亿,想在纽交所上市的爱回收,靠做旧生意能拼过闲鱼和转转吗?
  6. Jeesite框架实用 如何实现本公司内数据权限功能使用
  7. VSCODE配置SSH连接服务器
  8. 【元胞自动机】基于matlab元胞自动机3D森林火灾模型【含Matlab源码 656期】
  9. 鸢尾花数据集基本用法
  10. 软件工程作业-阅读与提问