新版ONENET的物联网环境调节系统(esp32+onenet+微信小程序)

news2024/11/28 19:44:52
新版ONENET的物联网环境调节系统(esp32+onenet+微信小程序)

好久没用onenet突然发现它大更新了,现在都是使用新版的物联网开放平台,只有老用户还有老版的多协议接入,新用户是没有的,所以我顺便更新一下新的开发组件吧.温湿度、Oled、风扇这些基本不变,这里就不再赘叙。

1、ONENET平台
1.1创建产品

在这里插入图片描述

这里你任意设置就行

在这里插入图片描述

我这里选择的是设备接入
在这里插入图片描述

这里我选择用MQTT协议接入,数据协议选择的数据流,这里最好还是跟我一样。

在这里插入图片描述

这样就创建完成了

在这里插入图片描述

1.2创建设备

在这里插入图片描述

在这里插入图片描述

1.3创建数据流

这里就可以看到我创建设备完成了,然后进入详情页面,创建数据流

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、下位机代码编写
2.1接入地址

查看文档可以发现新版的接口是1883

在这里插入图片描述

const int port = 1883;                     //端口号
2.2token秘钥生成

查看文档发现现在只能使用安全鉴权才可以访问了,以前的是可以直接使用api-key

在这里插入图片描述

这里使用token生成秘钥,token工具自行去onenet官方下载

只需要产品id和access_key就可以生成token秘钥

在这里插入图片描述

#define mqtt_password "********" //鉴权信息换成你自己的
2.3 主题订阅

因为我前面选择的是数据流,而不是物模型,所以查看onenet的文档时要注意,主题命名的方式是有所不同的,这前面的物模型的主题,

在这里插入图片描述

这下面的才是我们所要注意到的格式

在这里插入图片描述

然后我们去参考Onenet提供的实践可以看到是这样的

在这里插入图片描述

在这里插入图片描述

所以我在这里可以简化一下设置主题


#define mqtt_devid "******" //设备ID
#define mqtt_pubid "*******"        //产品ID
//接收设备属性获取命令主题
#define ONENET_TOPIC_GET "$sys/" mqtt_pubid "/" mqtt_devid "/cmd/request/+" 
//设备上发数据主题
#define ONENET_TOPIC_POST  "$sys/" mqtt_pubid "/" mqtt_devid "/dp/post/json"
2.4订阅主题

在setup函数里面对mqtt进行相关配置,client.subscribe是订阅应用程序下发命令的主题,而sendtempAndHumi函数是我发布主题的函数

 client.setServer(mqtt_server, port);                   //设置客户端连接的服务器,连接Onenet服务器, 使用1883端口
  client.connect(mqtt_devid, mqtt_pubid, mqtt_password); //客户端连接到指定的产品的指定设备.同时输入鉴权信息
  //client.setCallback(callback);                                //设置好客户端收到信息是的回调
  client.subscribe(ONENET_TOPIC_GET);
  client.setCallback(callback); //订阅命令下发主题
  tim1.attach(5, sendTempAndHumi);                            //定时每5秒调用一次发送数据函数sendTempAndHumi
2.5发布主题
//信息模板
//这是post上传数据使用的模板
#define ONENET_POST_BODY_FORMAT "{\"id\":%d,\"dp\":%s}"
void sendTempAndHumi()
{
  if (client.connected())
  {

 //先拼接出json字符串
    char param[82];
    char jsonBuf[178];
     sprintf(param, "{\"feng\":[{\"v\":%d}], \"temp\":[{\"v\":%.2f}],\"humi\":[{\"v\":%.2f}] , \"threshold\":[{\"v\":%d}]}",shan, dht.readTemperature(),dht.readHumidity(),threshold); //我们把要上传的数据写在param里
   
    postMsgId += 1;
    sprintf(jsonBuf, ONENET_POST_BODY_FORMAT, postMsgId, param);

    Serial.print("public the data:");
    //client.publish("$dp", (uint8_t *)msg_buf, 3+strlen(msgJson));
     client.publish(ONENET_TOPIC_POST, jsonBuf);
    //发送数据到主题
    delay(500);
    
  }
}
2.6callback函数

使用了JSON数据,利用键值对来实现操作

//收到主题下发的回调, 注意这个回调要实现三个形参 1:topic 主题, 2: payload: 传递过来的信息 3: length: 长度
void callback(char *topic, byte *payload, unsigned int length)
{
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
   // Handle incoming message here
  String message = "";
  for (int i = 0; i < length; i++) {
    message += (char)payload[i];
  }

  Serial.println("Received message: " + message);
   // Parse message as JSON
  DynamicJsonDocument doc(1024);
  DeserializationError error = deserializeJson(doc, payload, length);
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.c_str());
    return;
  }
  // Check which command was received
  if (doc.containsKey("修改温度阈值")) {
    threshold = doc["修改温度阈值"];



    Serial.println("Executing temperature threshold update operation.");
    Serial.print(threshold);
  } else if (doc.containsKey("风扇")) {
    newshan  =doc["风扇"];
    Serial.print(F("\n"));
    Serial.print(newshan);
   
  } else {
    // Unknown command
    Serial.println("Unknown command received.");
  }
    // Get the new threshold value

}
3、小程序
3.1如何获取数据

查看onenet的api可以知道,我们可以查看它相关的设备数据

在这里插入图片描述

3.2获取设备在线状态

可以看到我们需要地址,安全鉴权、以及相关参数,这里我们用apipost先调试。

在这里插入图片描述

header填写我们这前获取的token秘钥,query填写产品id,设备id这些参数

在这里插入图片描述

在这里插入图片描述

在获取到的数据里面可以看到,以及onenet相关文档提及到data.status、data.enable_status都可以获取到设备是否在线

在这里插入图片描述

3.3获取数据

还是继续查看文档可以知道我们可以获取当前的数据或者某一个时间段的数据,这里我就直接获取最新的数据。

header填写我们这前获取的token秘钥,query填写产品id,设备id这些参数。基本不变,变的是http地址的访问

在这里插入图片描述

在这里插入图片描述

3.4下发数据

这里也是http地址不一样,以及query要添加timeout数据就可以了,然后这里会出现超时返回,是因为我单片机没有订阅返回成功的主题,这里我觉得不影响操作就没搞了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实际效果

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1341359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百度CTO王海峰:文心一言用户规模破1亿

“文心一言用户规模突破1亿。”12月28日&#xff0c;百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰在第十届WAVE SUMMIT深度学习开发者大会上宣布。会上&#xff0c;王海峰以《文心加飞桨&#xff0c;翩然赴星河》为题作了主旨演讲&#xff0c;分享了飞桨和文…

微软为 Android 用户推出了人工智能助手 Copilot 应用程序

微软为 Android 用户推出了人工智能助手 Copilot 应用程序 - 与 ChatGPT 类似&#xff0c;它包括聊天机器人功能和 DALL-E 3 图像生成 - 该应用程序包括免费访问 OpenAI 的 GPT-4 模型&#xff0c;这是 ChatGPT 中的付费功能 - 发布微软将 Bing Chat 更名为 Copilot 您是否尝试…

Linux 线程概念

文章目录 前言线程的概念线程的操作操作的原理补充与说明 前言 ① 函数的具体说明被放在补充与说明部分 ② 只说些基础概念和函数使用 线程的概念 网络回答&#xff1a;Linux 线程是指在 Linux 操作系统中创建和管理的轻量级执行单元。线程是进程的一部分&#xff0c;与进程…

易趋产品升级(EasyTrack 11_V1.3) | 集成飞书、WPS、个性化设置,增强团队协作和用户体验

企业在项目管理过程中&#xff0c;经常会遇到项目信息同步不及时、沟通障碍以及管理软件使用不便捷等难题&#xff0c;导致团队协作效率低下。这种情况下&#xff0c;如果使用了多个办公软件&#xff08;如&#xff1a;钉钉、企业微信、项目管理软件等&#xff09;&#xff0c;…

【DC-DC】这是一款半亮 高亮 瀑闪的LED降压恒流刹车灯线路图

1产品描述 AP2402 是一款 PWM 工作模式,高效率、外围简单、内置功率管&#xff0c;适用于 5-100V输入的高精度降压 LED 恒流驱动芯片。输出功率可达 15W&#xff0c;电流 1.5A。AP2402 可实现三段功能切换&#xff0c;通过MODE1/2/3 切换三种功能模式&#xff1a;全亮&#xf…

STM32 学习(一)新建工程

本课程使用的stm32型号 引脚定义&#xff0c;有FT能接5v&#xff0c;没有FT能接3.3v 启动配置 第二种启动模式中&#xff0c;系统存储器中存放了一部分Bootloader程序&#xff0c;该程序可以接收串口的数据&#xff0c;然后刷新到主闪存中&#xff0c;这样就可以使用串口下载程…

【经验分享】日常开发中的故障排查经验分享(一)

目录 简介CPU飙高问题1、使用JVM命令排查CPU飙升100%问题2、使用Arthas的方式定位CPU飙升问题3、Java项目导致CPU飙升的原因有哪些&#xff1f;如何解决&#xff1f; OOM问题&#xff08;内存溢出&#xff09;1、如何定位OOM问题&#xff1f;2、OOM问题产生原因 死锁问题的定位…

uni-app引入vant表单(附源码)

新建项目 下载安装vant npm i vant main.js引入 import { Form } from vant; import { Field } from vant;Vue.use(Form); Vue.use(Field);代码引入 <van-form submit"onSubmit"><van-fieldclass"rePwd"v-model"username"name"请…

【51单片机系列】DS18B20温度传感器扩展实验之设计一个智能温控系统

本文是关于DS18B20温度传感器的一个扩展实验。 文章目录 一、相关元件介绍二、实验分析三、proteus原理图设计四、软件设计 本扩展实验实现的功能&#xff1a;利用DS18B20设计一个智能温度控制系统&#xff0c;具有温度上下限值设定。当温度高于上限值时&#xff0c;电机开启&a…

flask之文件管理系统-项目 JRP上线啦!!! ----Bug版

既然单人应用那么就不需要注册、登录了&#xff0c;太麻烦&#xff0c;直接上功能项&#xff0c;而初版太不好看了&#xff0c;略微修改归纳了一下&#xff0c;出了第一版 很有精神&#xff0c;为了纪念&#xff0c;这个网页项目我命名为JRP 主要就是&#xff1a; 1、定义一个类…

Kubernetes之Ingress详解

目录 IngressIngress配置配置写法转发到单个后端服务不同的URL路径被转发到不同的服务上不同的域名转发到不同的服务上不使用域名的转发规则 Ingress Ingress 是 Kubernetes 中的一种 API 对象&#xff0c;用于管理和配置集群中的 HTTP 和 HTTPS 服务路由。 Ingress 可以在 K…

目标检测-One Stage-YOLOv1

文章目录 前言一、YOLOv1的网络结构和流程二、YOLOv1的损失函数三、YOLOv1的创新点总结 前言 前文目标检测-Two Stage-Mask RCNN提到了Two Stage算法的局限性&#xff1a; 速度上并不能满足实时的要求 因此出现了新的One Stage算法簇&#xff0c;YOLOv1是目标检测中One Stag…

如何批量提取pdf文件名到excel?

如何批量提取pdf文件名到excel&#xff1f;在大家整理PDF文档的时候会不会遇到下面这些问题&#xff0c;首先PDF过多&#xff0c;每个PDF文件都有自己的名字&#xff0c;我们想要分类排放的话非常麻烦&#xff0c;不仅耗费时间而且带来的收益非常低&#xff0c;然后即使我们整理…

docker +gitee+ jenkins +maven项目 (一)

jenkins环境和插件配置 文章目录 jenkins环境和插件配置前言一、环境版本二、jenkins插件三、环境安装总结 前言 现在基本都是走自动化运维&#xff0c;想到用docker 来部署jenkins &#xff0c;然后jenkins来部署java代码&#xff0c;做到了开箱即用&#xff0c;自动发布代码…

eBay自养号测评:提升销量与排名的安全可控之道

近年来&#xff0c;eBay平台吸引了大量商家入驻&#xff0c;许多原本在其他平台的卖家也纷纷转型至eBay。然而&#xff0c;许多商家在运营一段时间后发现&#xff0c;新账号的流量扶持期结束后&#xff0c;店铺流量开始下滑。面对这种情况&#xff0c;卖家应该采取哪些措施呢&a…

elasticsearch系列五:集群的备份与恢复

概述 前几篇咱们讲了es的语法、存储的优化、常规运维等等&#xff0c;今天咱们看下如何备份数据和恢复数据。 在传统的关系型数据库中我们有多种备份方式&#xff0c;常见有热备、冷备、全量定时增量备份、通过开发程序备份等等&#xff0c;其实在es中是一样的。 官方建议采用s…

YOLOv5改进 | 2023主干篇 | 华为最新VanillaNet主干替换Backbone实现大幅度长点

一、本文介绍 本文给大家来的改进机制是华为最新VanillaNet网络&#xff0c;其是今年最新推出的主干网络&#xff0c;VanillaNet是一种注重极简主义和效率的神经网络架构。它的设计简单&#xff0c;层数较少&#xff0c;避免了像深度架构和自注意力这样的复杂操作(需要注意的是…

用html,js和layui写一个简单的点击打怪小游戏

介绍&#xff1a; 一个简单的打怪小游戏&#xff0c;点击开始游戏后&#xff0c;出现攻击按钮&#xff0c;击败怪物后可以选择继续下一关和结束游戏。 继续下一个怪兽的血量会增加5点&#xff0c;攻击按钮会随机变色。 效果图&#xff1a; html代码&#xff1a; <!DOCTYPE…

2702 高级打字机

因为Undo操作只能撤销Type操作&#xff0c;所以Undo x 实际上就是删除文章末尾x个字母。用一个栈即可解决&#xff08;每个字母最多进出一次&#xff09;。 这种情况下只需要设计一个合理的数据结构依次执行操作即可。 版本树&#xff1a;Undo x撤销最近的x次修改操作&#xf…

HCIA-Datacom题库(自己整理分类的)——OSPF协议多选

ospf的hello报文功能是 邻居发现 同步路由器的LSDB 更新LSA信息 维持邻居关系 下列关于OSPF区域描述正确的是 在配置OSPF区域正确必须给路由器的loopback接配置IP地址 所有的网络都应在区域0中宣告 骨干区域的编号不能为2 区域的编号范围是从0.0.0.0到255.255.255.255…