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

新版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数据就可以了,然后这里会出现超时返回,是因为我单片机没有订阅返回成功的主题,这里我觉得不影响操作就没搞了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

实际效果

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业私有云容器化架构运维实战

什么是虚拟化: 虚拟化&#xff08;Virtualization&#xff09;技术最早出现在 20 世纪 60 年代的 IBM 大型机系统&#xff0c;在70年代的 System 370 系列中逐渐流行起来&#xff0c;这些机器通过一种叫虚拟机监控器&#xff08;Virtual Machine Monitor&#xff0c;VMM&#x…

会议室占用时间段 - 华为OD统一考试

OD统一考试 题解: Java / Python / C++ 题目描述 现有若干个会议,所有会议共享一个会议室,用数组表示各个会议的开始时间和结束时间, 格式为: [[会议1开始时间,会议1结束时间],[会议2开始时间,会议2结束时间]] 请计算会议室占用时间段。 输入描述 [[会议1开始时间,…

数据库——LAMP的搭建及MySQL基操

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机&#xff0c;在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作&#xff1a; &#xff08;1&#xff09;登录 MySQL&#xff0c;在 MySQL 中创建用户&#xff0c;并对…

关于增强监控以检测针对Outlook Online APT活动的动态情报

一、基本内容 2023年6月&#xff0c;联邦民事行政部门&#xff08;FCEB&#xff09;在其Microsoft 365&#xff08;M365&#xff09;云环境中发现了可疑活动。该机构迅速向Microsoft和网络安全和基础设施安全局&#xff08;CISA&#xff09;报告了此情况。经过深入调查&#x…

【架构】企业信息安全体系架构详解

企业信息安全体系架构来说,是包含技术、运维、管理3个层面。本文说的安全架构,主要集中讨论偏研发技术层面的安全架构。 安全性是软件研发技术体系,系统架构设计阶段的一个关键DFX能力,与可靠性、可服务性、性能等架构属性并列。由于安全性设计自身的特点,涉及到系统架构…

Zblog主题模板:zblog博客主题aymeleven

zblog主题模板&#xff1a;zblog博客主题aymeleven zblog博客主题aymeleven主要是以文字内容为主导&#xff0c;将页面的设计杂乱的图片和元素进行最小化或者去除&#xff0c;从而使整个页面更加简洁、清晰&#xff0c;突出信息的呈现。 下面介绍一下zblog主题模板:zblog博客主…

AI产品经理 - 技术课-要不要懂技术(上)

一、AI产品经理&#xff0c;要不要懂技术&#xff1a;笔者答案是肯定的 1.AI产品经理要懂产品方案 2.不懂算法&#xff0c;会遇到问题&#xff1a;没有核心竞争力&#xff0c;会边缘化

基于ssm的数据结构课程网络学习平台的设计与实现论文

数据结构课程网络学习平台 摘要 本文介绍了数据结构课程网络学习平台的开发全过程。通过分析企业对于数据结构课程网络学习平台的需求&#xff0c;创建了一个计算机管理数据结构课程网络学习平台的方案。文章介绍了数据结构课程网络学习平台的系统分析部分&#xff0c;包括可行…

【elk-day01】es和kibana搭建及验证---Mac-Docker

Mac系统使用Docker下载搭建和验证eskibana Docker下载安装es安装es验证kibana安装kibana验证 Docker下载安装 Docker Desktop官网安装下载地址 说明一下为什么要安装desktop版本的docker&#xff0c;因为docker作为工具使用&#xff0c;我们需要的是开箱即用&#xff0c;没有必…

【yolov5驾驶员和摩托车佩戴头盔的检测】

yolov5驾驶员和摩托车佩戴头盔的检测 数据集和模型yolov5驾驶员和摩托车佩戴头盔的检测yolov5驾驶员和摩托车佩戴头盔的检测可视化结果 数据集和模型 数据和模型下载&#xff1a; yolov5摩托车佩戴头盔和驾驶员检测模型 yolov5-6.0-helmat-mortor-1225.zipyolov3摩托车佩戴头…

Windows实现MySQL5.7主从复制(详细版)

使用免安装版本&#xff08;官网下载地址&#xff09; 在Windows上安装两种MySQL服务并同时开启服务 1.下载配置 打开解压文件所在位置&#xff0c;就新建一个配置文件my.ini。 2.主库安装 主库的my.ini配置文件如下&#xff1a; [mysqld] #设置主库端口&#xff0c;注意须是…

java 纯代码导出pdf合并单元格

java 纯代码导出pdf合并单元格 接上篇博客 java导出pdf&#xff08;纯代码实现&#xff09; 后有一部分猿友叫我提供一下源码&#xff0c;实际上我的源码已经贴在帖子上了&#xff0c;都是同样的步骤&#xff0c;只是加多一点设置就可以了。今天我再次上传一下相对情况比较完整…

ROS学习记录:如何在Github上寻找并安装软件包

一、打开网页输入www.github.com 二、进入github界面 三、打开一个终端&#xff0c;输入mkdir catkin_ws1建立一个工作空间 四、使用cd catkin_ws1进入工作空间 五、使用mkdir src创建一个子目录src就是source&#xff0c;原始资料的意思,指的就是程序源代码这类资源材料&#…

Android studio socket客户端应用设计

一、XML布局设计&#xff1a; <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com…

利用网络教育系统构建个性化学习平台

在现代教育中&#xff0c;网络教育系统作为一种创新的学习方式&#xff0c;为学生提供了更加个性化和灵活的学习体验。在本文中&#xff0c;我们将通过简单的技术代码&#xff0c;演示如何构建一个基础的网络教育系统&#xff0c;为学生提供个性化的学习路径和资源。 1. 环境…

python3处理docx并flask显示

前言&#xff1a; 最近有需求处理docx文件&#xff0c;并讲内容显示到页面&#xff0c;对world进行在线的阅读&#xff0c;这样我这里就使用flaskDocument对docx文件进行处理并显示&#xff0c;下面直接上代码&#xff1a; Document处理&#xff1a; 首先下载Document的库文…

k8s二进制最终部署(网络 负载均衡和master高可用)

k8s中的通信模式 1、pod内部之间容器与容器之间的通信&#xff0c;在同一个pod 中的容器共享资源和网络&#xff0c;使用同一个网络命名空间&#xff0c;可以直接通信的 2、同一个node节点之内&#xff0c;不同pod之间的通信&#xff0c;每个pod都有一个全局的真实的IP地址&a…

计算机网络——传输层(五)

前言&#xff1a; 最重要的网络层我们已经学习完了&#xff0c;下面让我们再往上一层&#xff0c;对网络层的上一层传输层进行一个学习与了解&#xff0c;学习网络层的基本概念和网络层中的TCP协议和UDP协议 目录 ​编辑一、传输层的概述&#xff1a; 1.传输层&#xff1a; …

使用Visual Studio 2022 winform项目打包成安装程序.exe

winform项目打包 1.安装扩展插件 Microsoft Visual Studio Installer Projects 20222.在解决方案上新建一个setup project 项目3.新建成功如下图&#xff0c;之后添加你的winform程序生成之后的debug下的文件4.在Application Folder上点击右键->Add->项目输出->主输出…

【稳定检索|投稿优惠】2024年绿色能源与电网电力系统国际会议(ICGEGPS 2024)

2024年绿色能源与电网电力系统国际会议(ICGEGPS 2024) 2024 International Conference on Green Energy and Grid Power Systems(ICGEGPS) 一、【会议简介】 2024年绿色能源与电网电力系统国际会议(ICGEGPS 2024)将在宜宾盛大召开。本次会议将聚焦绿色能源与电网电力系统的最新…