ESP32运行MicroPython通过MQTT上报温湿度到中移OneNET物联网平台(附源码)
前言: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物联网平台(附源码)相关推荐
- STM32+果云GA6-GPRS/GSM模块+MQTT+HTTP协议连接中移OneNet上传GPS数据定位
一.环境介绍 MCU: STM32F103C8T6 GSM模块: GA6--果云 开发软件: Keil5 完整源码下载: https://download.csdn.net/download/xi ...
- 【MQTT】利用MQTT.fx上传数据节点到中移OneNET云平台
在学习使用OneNET云平台过程中,使用MQTT协议向平台上传数据,利用MQTT.fx输入发布tpoic,为了确保设备上传消息确实被平台所接受处理,设备可以订阅系统 topic ,从而获取上传数据点的 ...
- IOT必备之MQTT结构分析,不进来看看?【后附源码】
全网唯一物联网MQTT协议报文 结构分析以及基于C#代码的报文组装实现 介绍 MQTT是一种基于TCP/IP协议的应用层协议,它规定了不同应用之间进行数据交换时的传送格式.既然是协议,理论上可以被任何 ...
- 物联网云监控平台设备管理iot源码,MQTT/ONENET带APP端源码
大型物联网平台全套源码 物联网云监控IOT设备管理源码带APP端 开发语言:PHP 数据库:MYSQL 开发工具:phpstrom 源码类型:全开源免费分享 物联网云监控WEB设备管理iot源码,MQ ...
- 支付宝小程序使用MQTT over WebSocket连接阿里云IoT物联网平台
前言 之前写了一篇微信小程序使用MQTT over WebSocket连接阿里云IoT物联网平台,介绍了如何使用mqtt.js在微信小程序上连接mqtt服务器,文中顺带提了mqtt.js是支持支付宝小 ...
- mqtt 域名连接_中国移动OneNet物联网平台,如何使用MQTT协议,进行连接
大家好,超子又和大家见面了,超子我能力有限,技术不高,有什么错误的地方,欢迎板砖.今天我们一起构建MQTT协议中的CONNECT报文,连接OneNet物联网平台,然后进行通信.前面的文章中,超子介绍阿 ...
- java计算机毕业设计社区电商平台系统源码+系统+数据库+lw文档+mybatis+运行部署
java计算机毕业设计社区电商平台系统源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计社区电商平台系统源码+系统+数据库+lw文档+mybatis+运行部署 开发软件:i ...
- 百度离线地图示例之十三:动态运行轨迹实现(附源码)
前言介绍: 主要是基于v3.0的API版本进行的离线,纯内网可操作,基本上实现了现有90%以上的功能点,能兼容jpg和png格式的瓦片图层,实现了原生和基于Vue两个版本(包含常用的55个示例),文末 ...
- 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 ...
最新文章
- 改革以来计算机应用发展总结,计算机应用专业课程改革总结.doc
- jQuery添加/改变/移除CSS类
- 任正非:华为活下来走到今天,要感谢乔布斯发明iPhone
- CSS - 层叠特性
- 【调试工具】之IOS真机测试
- DBGrid 应用系列
- 如何防止SWF文件被反编译 如何防止SWF文件被反编译(2)
- 学习用PySide写界面
- 老师给我推荐的经典管理书籍
- 搭建Web服务器建网站的步骤
- linux中oppenoffice的安装
- 8产权界定_保护与限制
- 清华领军计划计算机试题,清华大学自主招生考试试题难吗
- python做excel自动化视频教程-从零基础入门到精通用Python处理Excel数据视频教程...
- 2020年年度总结(致敬自己)
- JVM: GC过程总结(minor GC 和 Full GC)
- 西部光伏电站不景气 屋顶光伏春天将至
- 引力魔方和直通车哪个好?两款工具效果怎样?
- R/RStudio 常用函数
- 技术原理故事_关于技术与孤独的爱情故事
热门文章
- 教你如何修改私服NPC卖东西
- 计算机不能启动 无法验证数字签名,Win10提示错误0xc0000428无法验证此文件的数字签名怎么办?...
- Java基础知识-char
- html6+树状下拉列表,layui+ztree 树状下拉框
- 三年亏损14亿,想在纽交所上市的爱回收,靠做旧生意能拼过闲鱼和转转吗?
- Jeesite框架实用 如何实现本公司内数据权限功能使用
- VSCODE配置SSH连接服务器
- 【元胞自动机】基于matlab元胞自动机3D森林火灾模型【含Matlab源码 656期】
- 鸢尾花数据集基本用法
- 软件工程作业-阅读与提问