温湿度阈值联网控制

news2024/11/23 6:22:49

温湿度阈值联网控制

引言

目的:

我们不管使用哪种协议, 哪种解决方案, 我们就目前的情况来看, 我们刚开始是使用 手动修改temp_th和 humi_th的方式, 来实现温湿度阈值的控制.但是对于投入到实际使用的话, 我们还需要使用更方便的联网控制, 所以我们首先利用Onenet的解决方案.

讲解方法:

我们其实构建也是按照就班, 能构建出来一个工程, 但是构建完后, 有些代码就是固定的, 所以, 我们只需要知道,再次新建一个工程后, 我们修改哪里, 大致流程是哪些, 我们能够在原有的基础上, 复制黏贴即可.

详细构建:

详细的联网构建步骤(这里是跳转详细的从零构建,我们这里是在原有基础上改):

https://blog.csdn.net/qq_57484399/article/details/140651413

源码下载:

构建完成的最小温湿度阈值工程:

https://ww0.lanzoul.com/ixRys26qkmhe

基础上构建工程

(1)我们在原有联网工程上, 构建Onenet联网工程, 首先下载 构建好的基本例程, 解压

https://ww0.lanzoul.com/imskP25ct2de

image-20240806154845902

(2)在这个目录下, 拿到这个构建好的最小联网例程

image-20240806154955357

(3)双击这个,打开工程,

image-20240806155135046

wifi和Onenet配置

(4)联网使用的是 ESP8266-01S , 对应的 RX 连 PA2, TX连 PA3 , 对应的gnd连gnd, 3.3v连gnd。

(5)我们现在只讨论联网修改温湿度阈值, 并上传服务器, 还有服务器下发阈值信息, 单片机本地修改阈值.

(6) 大概流程就是, 初始化ESP8266-01s, 配置wifi热点 ,然后链接Onenet服务器, 上传温湿度和温湿度阈值.

image-20240806155937602

下发信息的大概流程就是, 服务器下发阈值, 单片机检测到后, 使用cjson拆包, 然后得到服务器下发的阈值.

image-20240806155957008

创建产品

(7) 还是那句话, 我们只谈如何复制黏贴, 如何在最小例程上, 进行可行性使用.

(8)我们要把变量上传, 就首先需要在Onenet服务器上创建产品

跳转:

配置链接:https://blog.csdn.net/qq_57484399/article/details/140962964

修改工程,快速配置

(9)我们单片机配置wifi, 就要把变量去对标 服务器的功能标识符

<1>先编译一下最小联网示例, 方便跳转

image-20240806182658587

<2> 然后我们先调整一下, 服务器的 key值, 方便和服务器对接

点击左侧的onenet.c

image-20240806182751658

<3>分别进行对标

image-20240806182932990

把这个标识符, 赋值给下图所示位置

image-20240806182853631

<4> 这样服务器的key就配置好了, 我们是通过wifi链接的,wifi密码在esp8266.c里面

image-20240806183231477

(10)我们现在和服务器对接已经完成了, 下面直接去配置Onenet的标识符变量: 在main函数里的while, OneNet_SenData();这个就是发送函数, 我们按下f12, 跳转

image-20240806183416277

(11)往下翻, 接着f12

image-20240806183600203

(12)就看到了,这里标识符, 我们接着对应修改, 注意事项

<1>引入上传变量

image-20240511150947170

<2>严格按照下面格式进行填写:

image-20240511151358103

<3>强调: 最后一项,后面没逗号, 之前都有逗号

image-20240511151503105

<4>我们可以复制三行代码, 然后改动

	memset(text, 0, sizeof(text));
	sprintf(text, "\"temp_th\":{\"value\":%d},", temp_th);
	strcat(buf, text);

<5>注意这里, 我们这里要看注意事项, 这里是有逗号的, 所以我们不能放在最后一项, 我们修改对应的标识符就行了

下面是我们修改好的

	memset(text, 0, sizeof(text));
	sprintf(text, "\"temp_th\":{\"value\":%d},", temp_th);
	strcat(buf, text);

	memset(text, 0, sizeof(text));
	sprintf(text, "\"humi_th\":{\"value\":%d}", humi_th);
	strcat(buf, text);

image-20240806185952187

<6>注意, 因为这个是onenet.c文件,所以我们要引入全局变量

extern int temp_th;
extern int humi_th;

此函数代码摘录:

extern int temp_th;
extern int humi_th;
unsigned char OneNet_FillBuf(char *buf)
{
	
	char text[48];
	
	memset(text, 0, sizeof(text));
	
	strcpy(buf, "{\"id\":\"123\",\"params\":{");
	
	memset(text, 0, sizeof(text));
	sprintf(text, "\"temp_th\":{\"value\":%d},", temp_th);
	strcat(buf, text);

	memset(text, 0, sizeof(text));
	sprintf(text, "\"humi_th\":{\"value\":%d}", humi_th);
	strcat(buf, text);

	strcat(buf, "}}");
	
	return strlen(buf);

}

<7> 那我们上传温湿度阈值的操作就完成了

(13)下面我们操作下发改变阈值, 跟我走

① 先编译运行一下工程, 方便我们跳转

image-20240806190402050

② 然后我们跳转

image-20240806190432633

③ 这里就是cjson处理函数, 我们接受到服务器发来的数据,我们通过拆包, 就可以获得具体数值, 然后我们赋值给我们本地变量就可以了.

<1>下面是固定化套路, 复制黏贴即可, 找到规律,实现功能.

定义拆包的变量, 一个是temp_h, 一个是 humi_th

	//这里定义 cjson格式的变量名,例如 *led_jason
	cJSON *temp_th_jason, *humi_th_jason;

image-20240806190723278

<2> 拆包, 通过标识符, 锁定数值

image-20240806190910308

<3>判断拆包是否为空 , 然后赋值本地变量

image-20240806191016554

				if(temp_th_jason != NULL)
				{
					temp_th = temp_th_jason->valueint;
				}
				if(humi_th_jason != NULL)
				{
					humi_th = humi_th_jason->valueint;
				}

修改完成的函数摘录:

//==========================================================
//	函数名称:	OneNet_RevPro
//
//	函数功能:	平台返回数据检测
//
//	入口参数:	dataPtr:平台返回的数据
//
//	返回参数:	无
//
//	说明:		
//==========================================================

void OneNet_RevPro(unsigned char *cmd)
{
	char *req_payload = NULL;
	char *cmdid_topic = NULL;
	
	unsigned short topic_len = 0;
	unsigned short req_len = 0;
	
	unsigned char qos = 0;
	static unsigned short pkt_id = 0;

	unsigned char type = 0;
	short result = 0;
	//原始数据 -> cjson数据
	cJSON *raw_jason;
	// cjson中摘出标识符变量
	cJSON *params_jason;
	//这里定义 cjson格式的变量名,例如 *led_jason
	cJSON *temp_th_jason, *humi_th_jason;
	type = MQTT_UnPacketRecv(cmd);
	//UsartPrintf(USART_DEBUG, "688\r\n");
	switch(type)
	{
		case MQTT_PKT_PUBLISH:																//接收的Publish消息
//			UsartPrintf(USART_DEBUG, "689\r\n");
			result = MQTT_UnPacketPublish(cmd, &cmdid_topic, &topic_len, &req_payload, &req_len, &qos, &pkt_id);
			
			if(result == 0)
			{
				UsartPrintf(USART_DEBUG, "topic: %s, topic_len: %d, payload: %s, payload_len: %d\r\n",
																	cmdid_topic, topic_len, req_payload, req_len);
				
				//将原始字符串信息,转化成cjson格式
				raw_jason = cJSON_Parse(req_payload);//解析原始字符串数据到raw_jason
				//从raw_jason中提取params字符段到params_jason
				params_jason = cJSON_GetObjectItem(raw_jason,"params");
				//然后再从params_jason中提取要操作的器件,

				temp_th_jason = cJSON_GetObjectItem(params_jason,"temp_th");
				
				humi_jason = cJSON_GetObjectItem(params_jason,"humi_th");
				
				//判断对应cjson 标识符变量 是否为空, 不空,则代表有对应的下发信息

				if(temp_th_jason != NULL)
				{
					temp_th = temp_th_jason->valueint;
				}
				if(humi_th_jason != NULL)
				{
					humi_th = humi_th_jason->valueint;
				}
				cJSON_Delete(raw_jason);
			}
			
		case MQTT_PKT_PUBACK:														//发送Publish消息,平台回复的Ack
//			UsartPrintf(USART_DEBUG, "111\r\n");
			if(MQTT_UnPacketPublishAck(cmd) == 0)
//				UsartPrintf(USART_DEBUG, "Tips:	MQTT Publish Send OK\r\n");
		break;
		case MQTT_PKT_SUBACK:																//发送Subscribe消息的Ack
//			UsartPrintf(USART_DEBUG, "222\r\n");
			if(MQTT_UnPacketSubscribe(cmd) == 0)
				UsartPrintf(USART_DEBUG, "Tips:	MQTT Subscribe OK\r\n");
			else
				UsartPrintf(USART_DEBUG, "Tips:	MQTT Subscribe Err\r\n");
		break;
		default:
//			UsartPrintf(USART_DEBUG, "333\r\n");
			result = -1;
		break;
	}
	ESP8266_Clear();									//清空缓存
	if(result == -1)
		return;
	if(type == MQTT_PKT_CMD || type == MQTT_PKT_PUBLISH)
	{
		MQTT_FreeBuffer(cmdid_topic);
		MQTT_FreeBuffer(req_payload);
	}
}

至此, 我们上传下发阈值信息的工程就完成了, 我们把温湿度阈值设置成全局变量, 然后我们通过调用此文件, 就可以访问全局变量, 然后修改了。

我们其余工程, 全在此工程上构建, 即可。对于详细的工程构建完成, 把之前的最小例程加上, 然后调试就可以了, 后面专一出一讲,讲解如何快速 移植联网工程和测试。

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

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

相关文章

Kickstart

一&#xff1a;实验前提&#xff1a; 1.RHEl7主机 2.开启图形 init5开图形 3.配置网络可用 4.关闭vmware dhcp功能 5.关闭火墙 二&#xff1a;下载kickstart [roottao ~]# yum install system-config-kickstart 三&#xff1a;启动kickstart并完成相关配置&#xff1a;…

JVM 加载阶段 Class对象加载位置是在 堆中还是方法区?

在JVM&#xff08;Java虚拟机&#xff09;的类加载过程中&#xff0c;Class对象的加载位置涉及到堆&#xff08;Heap&#xff09;和方法区&#xff08;Method Area&#xff09;两个关键区域。具体来说&#xff0c;类的加载阶段涉及到将类的.class文件中的二进制数据读入到内存中…

linux搭建redis超详细

1、下载redis包 链接: https://download.redis.io/releases/ 我以7.0.11为例 2、上传解压 mkdir /usr/local/redis tar -zxvf redis-7.0.11.tar.gz3、进入redis-7.0.11&#xff0c;依次执行 makemake install4、修改配置文件redis.conf vim redis.conf为了能够远程连接redis…

PHP高校教材管理系统-计算机毕业设计源码29810

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3系统开发的目标意义 1.4论文结构与章节安排 2 高校教材管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功…

Pyside6实战教程专栏目录

Pyside6实战教程&#x1f680; 专栏目录介绍 本专栏将详细地向Python开发者展示如何利用PySide6框架创建功能丰富的桌面应用程序。无论你是刚刚接触GUI编程的新手&#xff0c;还是希望快速提升自己技能水平的进阶用户&#xff0c;本文都将为你提供一系列简单易懂的教程&#xf…

Apache漏洞复现CVE-2021-41773

Apache HTTP Server 路径穿越漏洞 漏洞简介 该漏洞是由于Apache HTTP Server 2.4.49版本存在目录穿越漏洞,在路径穿越目录 <Directory/>Require all granted</Directory>允许被访问的的情况下&#xff08;默认开启&#xff09;&#xff0c;攻击者可利用该路径穿越…

混合现实技术在虚拟培训、销售展示及教育科研等领域的应用方向

混合现实技术是虚拟现实技术的进一步发展方向&#xff0c;与传统的沉浸式虚拟现实技术相比混合现实技术能够为用户提供更多元化的观看场景。通过将虚拟物体与现实世界融合的全新形式为&#xff0c;包括虚拟训练、产品销售、教育科研等领域赋能。 混合现实技术中最为重要的是显示…

什么是爬虫软件?这两个爬虫神器你必须要试试

爬虫软件概述 爬虫&#xff0c;又称为网络爬虫或网页爬虫&#xff0c;是一种自动浏览互联网的程序&#xff0c;它按照一定的算法顺序访问网页&#xff0c;并从中提取有用信息。爬虫软件通常由以下几部分组成&#xff1a; 用户代理&#xff08;User-Agent&#xff09;&#xf…

08.FreeRTOS任务调度与任务切换

文章目录 08. FreeRTOS任务调度与任务切换1. FreeRTOS任务调度2. SVC中断服务函数源码调试结果分析3. FreeRTOS任务切换3.1 PendSV异常3.2 PendSV中断服务函数3.3 PendSV中断服务函数源码调试分析3.4 确定下一个要执行的任务 08. FreeRTOS任务调度与任务切换 1. FreeRTOS任务调…

MIMO技术入门(通俗易懂)

MIMO技术的思路 形象地形容就是&#xff0c;从原来的一个人在搬砖&#xff0c;转变成多个人在搬砖。 MIMO/SIMO/MISO示意图 MIMO用专业一点的词形容&#xff0c;就是发射端和接收端都有多个天线&#xff0c;这里的多天线并不是指有多个天线板&#xff0c;对于基站来说&#…

Ubuntu distro环境搭建

0 Preface/Foreword 1 环境搭建 1.1 安装make工具 sudo apt install make 1.1.1 查看make版本 1.1.2 查看make使用方法 2 搭建交叉编译工具链 2.1 解压交叉工具链到指定路径 命令解释如下&#xff1a; sudo&#xff0c; 表示使用administrative privilegetar&#xff0c;…

Unity补完计划 之 Mask SortingGroup

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1.Mask 遮罩故名思意就是起到遮挡作用的罩子:精灵遮罩 - Unity 手册 如果我想让sprite与遮罩发生交互&#xff0c;那么我…

宇哥18讲需要同步搭配他的1000题吗?

张宇老师本来就以“偏难怪”著称&#xff0c;无独有偶&#xff0c;24考研真题也是“偏难怪”&#xff01; 所以&#xff0c;24考研结束之后&#xff0c;大家欧鼓吹张宇「封神」 先不说张宇老师是不是真的符合考研的趋势&#xff0c;但是跟张宇老师的同学确实比跟其他老师的同…

工具变量模型及 Stata 具体操作步骤

目录 一、引言 二、文献综述 三、理论原理 四、实证模型 五、程序代码及解释 六、代码运行结果 一、引言 在实证研究中&#xff0c;我们常常面临内生性问题&#xff0c;即解释变量与误差项相关&#xff0c;这可能导致估计结果的偏差和不一致。工具变量&#xff08;Instrum…

<数据集>agv仓储机器人识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1514张 标注数量(xml文件个数)&#xff1a;1514 标注数量(txt文件个数)&#xff1a;1514 标注类别数&#xff1a;3 标注类别名称&#xff1a;[G1PB2000_Paleteira_AGVS BYD, G1RB5000, AGV-P] 序号类别名称图片数…

Web性能监测的利器Performance Observer!!

前言 前段时间在研究前端异常监控平台&#xff0c;在思考性能监控时&#xff0c;想到了浏览器自带的观察者以及页面生命周期API 。于是在翻查资料时发现了&#xff0c;Performance ObserverAPI。正好趁着这个机会给大家好好讲讲Performance Observer API Performance Observe…

ArcGIS基础:二维面要素生成三维体模型

如下&#xff0c;为处理前的二维数据图斑以及需要用到的字段【高度】 使用ArcScene软件打开&#xff0c;找到【拉伸】设置&#xff0c;按照下述顺序进行设置参数&#xff0c;在【拉伸值或表达式】里选择【高度】字段 如下所示&#xff0c;就可以完成二维数据的三维表达&#x…

国产版Sora复现——智谱AI开源CogVideoX-2b 本地部署复现实践教程

目录 一、CogVideoX简介二、CogVideoX部署实践流程2.1、创建丹摩实例2.2、配置环境和依赖2.3、上传模型与配置文件2.4、开始运行 最后 一、CogVideoX简介 智谱AI在8月6日宣布了一个令人兴奋的消息&#xff1a;他们将开源视频生成模型CogVideoX。目前&#xff0c;其提示词上限为…

2020C题 中小微企业的信贷决策论文分析复现笔记

比赛题目&#xff1a; 在实际中&#xff0c;由于中小微企业规模相对较小&#xff0c;也缺少抵押资产&#xff0c;因此银行通常是依据信贷政策、企业的交易票据信息和上下游企业的影响力&#xff0c;向实力强、供求关系稳定的企业提供贷款&#xff0c;并可以对信誉高、信贷风险…

“MySQL中的空间索引技术深度解析:利用Spatial Key优化地理空间数据查询“

目录 简介 空间数据类型 GEOMETRY&#xff08;抽象基类&#xff09; POINT LINESTRING POLYGON MULTIPOINT MULTILINESTRING MULTIPOLYGON GEOMETRYCOLLECTION 总结 函数 ST_GeomFromText() ST_X ST_Y ST_AsText 空间函数 总结 坐标系 WGS 84坐标系&#x…