新版Onenet物联网平台,微信小程序显示上传信息发送指令。STM32ESP8266实现采集数据并上传

article/2025/7/22 0:10:47

目录

前言

一、Onenet平台配置

1.创建产品

2.配置产品属性

3.创建物模型(创建设备)

二、ESP8266设备连接

1.获取MQTT连接参数

2.Onenet物理属性上传主题

3.上传数据

三、ESP8266和STM32通信

1.STM32发送数据,8266解析并上传

2.8266接收上位机命令通过串口传送给STM32

四、微信小程序获取数据及发送指令

1.获取设备最新上传数据

2.设置设备属性

3.获取设备在线状态

五、系统测试

1.上传数据

2.设置设备属性

六、结尾


 


前言

物联网平台-新版Onenet

Onenet平台更新后,不再更新维护多协议接入.本文以ESP8266设备通过MQTT协议接入新版One net云平台为例,ESP8266上传测量数据至物模型,微信小程序访问云平台API接口,实现物模型数据查询和命令下发。

ESP8266信息:NodeMCU-12E,开发环境为Arduino;

STM32信息:STM32C8T6,开发环境Keil 5;

附带onenet平台配置说明

一、Onenet平台配置

1.创建产品

首先浏览器搜索Onenet平台,打开后进入开发者中心。

3ae0df72c448526da5b9d02c27d2deb3.png

点击产品开发---->创建产品;

4a6f14693c2f627b6c01f0b0487cfc82.png

选择产品类别;

ddd2736c1fb361970ebb538fd747f777.png

选择其他行业->其他行业->其他类别

点击保存

d6c5e96af6c116502a64648548c984a5.png

选择智能化方式:设备接入;

填写信息:注意几个点为:

节点属性->直连设备;

接入协议->MQTT;

数据格式->OneJson;

联网方式->WIFI;

开发方案选择->自定义方案

点击确定,保存;

51771c68851db21042532e5da2d15237.png

然后我们就可以看到一个叫ESP_IOT的产品被创建。

2.配置产品属性

fbf370f81369ea56e3b4fa65f5ba0cc6.png

点击产品开发

fa73e0d54192fcf33d6a6cf3253ee259.png

设置物模型

19b1593c6389dc389e59a5b78a9d5e39.png

添加自定义功能

f02790275c66b7b81887fae3b59aa4ed.png

根据自己需求设置模型物理功能属性,此处注意,最好将读写类型改为读写。

按照上述操作,我们一共配置两类功能,温度(tem)、湿度(hum)。

属性创建完成,如下图所示:

6c841719d7684f221452f2d631f5d818.png

记住标识符tem和hum,这是设备上传数据以及获取数据的重要接口。

3.创建物模型(创建设备)

创建完产品就该配置物模型了,点击设备接入管理->设备管理->添加设备

8e8af3ce4fbe56ccb9bba022700fbe10.png

选择单个设备;

所属产品选择刚刚创建的产品

设备名称自定义,注意以字母或_头

配置完成点击确认;

719d7cdc185b15b276fe1bb5022ad35b.png

点击确认后就可以看到我们刚刚创建的产品啦;

点击 详情->属性,可以看到我们刚刚给产品定义的属性被设备继承了。以后硬件上传的数据可以在这里看到

0c9b474b43392b6cb1163672bd6d718f.png

2fda1235c3bbf02c97cb6ce801e0eed7.png

到此为止,我们平台的配置就完成了,下面需要硬件设备连接Onenet平台

二、ESP8266设备连接

ESP8266设备连接通过MQTT协议实现,MQTT协议需要使用到PubSubClient库,可在Github上下载ZIP包导入或使用库管理器下载;不再详细叙述。

 

ESP8266代码资源下载链接:

https://download.csdn.net/download/qq_53038430/89715266

 

1.获取MQTT连接参数

//在这里修改MQTT客户端信息
#define MQTT_HOST "mqtts.heclouds.com"  //MQTT服务器地址
#define MQTT_PORT 1883  //MQTT端口
#define MQTT_USER "HAgE46jiXO"  //用户名
#define MQTT_PASSWD "version=2018-10-31&res=products%2FHAgE46jiXO&et=1918593319&method=md5&sign=fykV7W63NwloSkGYgACuVA%31%3D"  //密码
#define MQTT_CLIENTID "ESP8266"  //客户端参数

MQTT连接需要用到5个连接参数:

  • 服务器地址:"mqtts.heclouds.com"  固定不变的
  • 服务器端口:1883   固定不变的
  • 用户名(User ID):产品ID;
  • 密码(Token):根据计算Token生成
  • 客户端参数(Client ID):设备名字

cbcb5022f082b93f4f44e7c97ec4c78d.png

token计算需要通过Token计算工具

Token工具官方链接:https://open.iot.10086.cn/doc/v5/fuse/detail/1487

7e27499125367e7bd923caff711cb593.png

以产品级授权为例,需要三个参数:res,key,et;

res字段为products/{产品id},key为产品级key,et为登录授权过期时间(Unix格式10位数字)

点击产品开发->产品开发,在首页即可看到产品ID及产品key。

46cc6f81110ac0f2503774edea6da8ae.png

随便找一个UNIX时间戳转换器,时间设置尽量很靠后;以2030-6-17为例,得到时间戳为1907914732;

a3a22e585bcdd0a026d3cb0d4459ec96.png

res:products/m8kIpm5JYM

key:wcMNHQVXURN3b48t+2PHpbNpmxV/U+Mt8Xk9KW0am60=

et:1907914732

其他默认,点击生成Token

Token:version=2018-10-31&res=products%2Fm8kIpm5JYM&et=1907914732&method=md5&sign=Vfa1sC5CMnSfU79EYXMfwQ%3D%3D

TOKEN即为连接密码,将生成的Token填入MQTT_PASSWORD;MQTT连接参数配置即可完成。

利用上述参数,书写MQTT协议连接代码即可成功连接Onenet平台。下面讲述如何上传数据到物模型;

2.Onenet物理属性上传主题

"$sys/0qTk9Jw944/设备ID/thing/property/post"

例如:

"$sys/0qTk9Jw944/ESP8266/thing/property/post"

设备ID就是设备名字,也是MQTT连接参数里面的客户端参数(Client ID);

向设备主题发送数据,等同更新设备属性(前面提到过)

3.上传数据

上传数据关键代码如下:

  long now = millis();//获取当前时间戳if (now - lastMsg > 2000) {//如果达到2s,进行数据上传lastMsg = now;StaticJsonDocument<200> jsonBuffer;   //声明一个JsonDocument对象,长度200// 对象嵌套jsonBuffer["id"]="111";JsonObject root = jsonBuffer.createNestedObject("params"); //添加一个对象节点root["tem"]["value"] = tem;  //tem为存储温度数据的变量,"tem"为云平台属性标识符root["hum"]["value"] = hum;  //hum为存储湿度数据的变量,"hum"为云平台属性标识符jsonBuffer["version"]="1.0";String output;serializeJson(jsonBuffer, output);  // 序列化JSON数据并导出字符串// Serial.println(output);             // 串口打印最后输出的字符串client.publish(up_topic,output.c_str());//温度数据上传}

这里用到了ArduinoJson库,将数据转化为json字符串,如果上传数据不是JSON格式则会报错(创建产品选数据格式为:onejson)建议Arduino IDE版本为2.0以上;

上述代码中 up_topic变量存储设备属性上传主题,即:

char*  up_topic = "$sys/0qTk9Jw944/ESP8266/thing/property/post";      //上传数据主题名

通过上述配置我们就可以实现将测量的数据上传到Onenet平台下的设备属性里面;

三、ESP8266和STM32通信

STNM32在系统中负责采集环境数据,例如温度,湿度,光照等...采集完成后通过串口通信将数据发送给8266;

以STM32串口1和8266串口0通信为例,接线图:

cc17b840a91d23a109354d716fef4f97.png

1.STM32发送数据,8266解析并上传

STM32通过串口发送数据;以发送字符串为例:

"35#40";

其中35为温度数据,40为湿度数据;

8266串口接收后解析字符串;实现代码:

//解析STM32串口传送的数据
if(RX_DATA!=""){     //RX_DATA存储串口数据//fenge为字符串分割函数if(fenge(RX_DATA,"#",0).toInt()>=0) tem=fenge(RX_DATA,"#",0).toInt();    //提取温度信息if(fenge(RX_DATA,"#",1).toInt()>=0)hum  = fenge(RX_DATA,"#",1).toInt();    //提取湿度信息RX_DATA = "";        //清空串口缓存}

经过上述代码,tem变量存储了温度数值,hum变量存储了湿度数值;通过第二部分的上传代码即可将采集到的温湿度数据上传至Onenet平台;

2.8266接收上位机命令通过串口传送给STM32

8266接收命令在MQTT协议中callback函数中实现

//MQTT订阅主题,下发消息接收函数
void callback(char* topic, byte* payload, unsigned int length) {// Serial.println(topic);if(strcmp(topic,down_topic)==0)//topic == down_topic{payload[length] = '\0';json = (char *)payload;    //json变量存储上位机发送指令,通过ArduinoJson库可对指令进行提取}
}

上述代码中,字符串变量json存储了云平台下发指令,通过ArduinoJson库解析Json字符串即可将微信小程序发送的指令提取出来。

ESP8266通过串口将指令发送给STM32,STM32接收到指令后控制继电器,LED,风扇灯等外设开关。

四、微信小程序获取数据及发送指令

微信小程序获取设备数据及发送指令是通过调用平台API接口实现的。

Onenet官方给出了API接口列表,链接:OneNET - 中国移动物联网开放平台

下面看两种应用的API接口

1.获取设备最新上传数据

API接口为:/thingmodel/query-device-property

URL连接:https://iot-api.heclouds.com/thingmodel/query-device-property

需要在URL连接添加请求信息:设备ID和设备名字

使用HTTP GET请求获取到信息,然后解析JSON字符串即可获取到数据。

微信小程序详细代码如下所示:

2.设置设备属性

注意!设置设备属性需要硬件设备在线,不然无法响应

微信小程序通过Onenet平台向硬件设备发送指令可以通过设置属性的API实现;

API接口为:/thingmodel/set-device-property

URL连接:'https://iot-api.heclouds.com/thingmodel/set-device-property'

使用POST请求发送指令,URL需要添加请求头信息;

注意!!!!!注意!!!!注意!!!

使用/thingmodel/set-device-property设置设备属性这个API接口后,硬件设备需要向Onenet平台发送应答命令;

应答命令发送主题为:$sys/{pid}/{device-name}/thing/property/set_reply

其中pid为产品ID;device-name为设备名字;

向该主题发送应答消息内容有三项,分别为id,msg,code,其中id用来区分设置属性的消息,msg和code代表硬件有没有成功收到消息

3.获取设备在线状态

API接口:/device/detail

使用GET请求获取信息,这里不再赘述;

 

微信小程序代码资源下载:

https://download.csdn.net/download/qq_53038430/89719064


 

五、系统测试

1.上传数据

设备属性定义如下,四个数据一个开关。

07a7d20a742f981c5afe19580931d1de.png

烧录代码进ESP8266,设备显示在线

9ff1eb84d48c79d7344c2dd57185be0a.png

用串口发送数据给8266,这里我定义了四个属性,空气温湿度,土壤湿度,气体浓度

f617c6d84c4ca5afb15ecc610362ce88.png

全部设置为99;

e562c63b401f86e447f498f717af2d6d.png

可以看到云平台已经更新了数据

8f08021cef807c04f4e48387dbea3e88.png

微信小程序模拟器也显示在线;

至此,硬件设备上传属性上位机查看就已完成。

2.设置设备属性

微信小程序点击打开或关闭按钮,ESP8266串口输出截图为:

108406e24d042276305c52508df74b05.png

注意!开关尽量不要选BOOL型,如果你选了Bool型,上传整数0或1会报错。

解析json字符串中led值即可获得开关是否关闭。

注意如果你想云平台属性中的开关变量也随着微信程序设置而改变,记得在设备属性上报主题上传led的值

上传主题:$sys/{pid}/{device-name}/thing/property/post

六、结尾

本期分享Onenet平台配置及应用就到此结束了;

如果您觉得对你有帮助,可以打赏一下下哦,您的鼓励是我创作的动力!

如果你有其他需求,例如需要定制硬件或上位机可以通过私信与我取得联系,

 

本人可做STM32、ESP8266,Arduino等硬件,可做QT上位机,安卓应用,微信小程序。

欢迎打扰!

关于本人:电子信息类研一在读,曾获得国家奖学金等多项奖项。闲时兼职,欢迎咨询!

 

 

 

 

 

 

 

 

 

 


http://www.hkcw.cn/article/YOmyDlnlUJ.shtml

相关文章

uni-app 高效开发小程序技巧:自动化切换环境变量

一. 前言 在微信小程序开发中&#xff0c;uni-app 作为一个开发利器&#xff0c;方便了广大开发者&#xff0c;越来越多的公司开始使用 uni-app 进行开发&#xff0c;尤其是在开发小程序的时候&#xff0c;今天给大家分享一个使用 uni-app 高效开发小程序的技巧&#xff0c;如…

基于微信小程序的旅游攻略分享与互动平台设计与实现

目录 一. &#x1f981; 前言二. &#x1f981; 开源代码与组件使用情况说明三. &#x1f981; 核心功能3.1 游客端功能3.1.1 景点信息查询功能3.1.2 旅游路线推荐功能3.1.3 景点打卡功能3.1.4 评论与互动功能3.1.5 门票预订功能3.1.6 当地美食推荐功能3.1.7 个人中心 3.2 管理…

uni-app 发行到微信小程序,主包过大解决方案

目录 1.静态资源通过cdn引入 2.移除无依赖组件 3.将非核心页面移入subPackages中 正常uni-app项目发行到微信小程序,发现包过大,基本已经没法从代码层面修改内容了,今天这里介绍一些,不用大批量修改源码的情况下,减少包大小的方式 官方默认这包不能超过2M 分包不能超过30M …

微信小程序富文本解析组件wxParse实践指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;微信小程序wxParse组件是一款用于解析和渲染富文本内容的工具&#xff0c;它扩展了小程序对HTML内容的支持&#xff0c;加入了CSS样式和图片懒加载等特性。开发者可以利用这个组件将HTML文本转换为WXML结构&…

微信小程序wx.getlocation接口申请教程

wx.getLocation(Object object) 功能描述&#xff1a; 获取当前的地理位置、速度。当用户离开小程序后&#xff0c;此接口无法调用。开启高精度定位&#xff0c;接口耗时会增加&#xff0c;可指定 highAccuracyExpireTime 作为超时时间。地图相关使用的坐标格式应为 gcj02。 …

【一文读懂】uniapp微信小程序获取手机号-手机号快速验证组件(全流程)

微信小程序获取手机号&#xff0c;要分几步&#xff0c;再次做个记录&#xff0c;希望耐心看完。 1. 第一步&#xff0c;先获取code&#xff0c;并不是登入的那个code&#xff0c; 2. 第二步&#xff0c;根据小程序的appid获取access_token凭证&#xff0c; 3. 第三步&#xf…

微信小程序实现微信授权登录的完整流程

1. 概述 微信授权登录是小程序用户登录的常见方式&#xff0c;利用微信提供的 wx.login 和 wx.getUserProfile 方法&#xff0c;获取用户的基本信息和唯一标识 openid 及 session_key。结合后端存储及业务逻辑&#xff0c;可以实现用户的身份管理。 2. 流程图 用户授权登录的…

微信小程序页面制作——婚礼邀请函(含代码)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

经济学泰斗菲舍尔逝世:培育伯南克、德拉吉的央行界“一代宗师” 全球金融体系的“救火队长”

当地时间6月1日,以色列央行宣布世界著名经济学家、以色列央行前行长及美联储前副主席斯坦利菲舍尔于5月31日逝世,享年81岁。菲舍尔拥有美国和以色列双重国籍,其职业生涯横跨学术界、国际金融机构与中央银行,对全球经济政策产生了深远影响。他曾担任以色列银行行长,并出任美…

高动态范围射频收发器如何解决关键性任务通信的阻塞挑战

摘要 由于频谱有限&#xff0c;商用/专用蜂窝网络的使用越来越多&#xff0c;无线电平台开发面临着更复杂的干扰场景。本文将讨论高动态范围射频收发器 ADRV9002 软件定义无线电(SDR)如何应对关键性任务通信无线电和其他高动态要求无线应用的阻塞挑战。 引言 关键性任务通信…

达科欢迎樊振东加入球队 德甲新星闪耀

#达科欢迎樊振东加入球队# 德甲联赛萨尔布吕肯乒乓球甲级俱乐部 宣布樊振东 加盟球队,效力于该队的达科-约奇克在社交媒体欢迎樊振东加入球队。#樊振东加盟德甲联赛#责任编辑:zx0001

北京今天最高气温达31℃!假期结束防暑降温模式正式开启 北风加大注意防护

据北京市气象局消息,6月2日08时,南郊观象台气温为21.4℃。预计今天白天最高气温将达到31℃左右,外出时请注意遮阳防晒并勤补水。受冷空气影响,今天白天北风自西向东逐渐加大,阵风可达6、7级,请注意防风,防范高空坠物。早晨天气晴间多云,有轻雾,偏北风1、2级,气温在17…

乌为何剑走偏锋突袭俄战略轰炸机 FPV无人机木马立奇功

以色列有“BP机炸弹”,乌克兰有“FPV无人机木马”,这似乎在逼迫普京使用战术核武器。6月1日,据媒体报道,经过18个月的策划,乌克兰实施了代号为“蜘蛛网”的行动,摧毁了41架俄罗斯战略轰炸机。乌克兰安全局发言人表示,此次行动由泽连斯基亲自指挥,乌安全局长马柳克负责具…

2025三掌柜赠书活动第十九期 DeepSeek图书:全年龄段的智慧之选,一本书开启知识之旅

目录 Part.0 前言 Part.1 职场人的AI效率革命&#xff1a;解锁DeepSeek多元应用&#xff0c;精准解决高频痛点&#xff01; Part.2 企业家的必修课&#xff1a;用AI重构商业模式&#xff0c;打造下一个独角兽&#xff01; Part.3 学术党的救命稻草&#xff1a;选题到答辩全辅…

Spring Boot + MyBatis 实现的简单用户管理项目的完整目录结构示例

&#x1f4c1; 示例项目结构&#xff08;基于 Maven&#xff09; user-management/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/example/usermanagement/ │ │ │ ├── controller/ │ │ │ │ └── UserC…

科威特一住宅楼起火致6死 火灾原因待查

科威特费尔瓦尼耶省一栋住宅楼在6月1日凌晨发生严重火灾,导致至少6人死亡,另有5人重伤。据当地消防部门消息,该省拉卡地区一栋建筑内的两套公寓起火,消防人员在凌晨时分已控制住火势。目前火灾的具体原因尚未公布。科威特消防部门发布了公共安全提醒,呼吁各地设施业主严格…

100余所高校校长齐聚西财 共议智能时代高等教育未来

6月1日,西南财经大学百年校庆中外大学校长论坛在蓉城举行。来自厦门大学、中央财经大学、对外经济贸易大学、上海财经大学、电子科技大学、英国剑桥大学等国内外知名大学的100余位校长及专家学者齐聚一堂,共同探讨智能时代高等教育的未来。西南财经大学党委书记赵建军在发言中…

龙船漂移赛竟然还有这么多玩法 非遗遇上极限操作

龙舟不仅能劈波斩浪,还能像赛车一样倒车、漂移、丝滑过“S弯”。最近广东一场龙舟赛在网络上引起了广泛关注,网友纷纷表示这更像是水上版的《速度与激情》。在肇庆叠滘的狭窄河道里,25米长的龙舟以70度急转弯完成“神龙摆尾”,船尾几乎擦岸而过;“湾区伶仃”号上演了“蚂蚁…

萨尔布吕肯达成欧冠三连冠 樊振东加盟助力

乒乓球大满贯得主樊振东已加盟德国乒乓球甲级联赛的萨尔布吕肯俱乐部。该俱乐部曾是德国足坛老牌球队萨尔布吕肯第一足球俱乐部的乒乓球分部,直到前几年才在财务上独立运营。其标志和名称与原足球俱乐部相似,只是加上了德语“乒乓球”一词。樊振东是继柳承敏之后又一位加盟德…

著名相声演员朱文先因病去世 安徽曲艺界痛失泰斗

近日,合肥演艺集团有限公司发布讣告,安徽省著名相声表演艺术家、一级演员、原合肥市曲艺团党支部书记朱文先因病医治无效,于2025年5月31日上午9时12分在合肥逝世,享年87岁。朱文先生于1938年11月,毕生致力于相声艺术的传承与创新。1960年,他拜我国相声泰斗马三立先生的徒…