涂鸦模组开发(压力传感器HX711)——4. 上报传感器数据给涂鸦模块

涂鸦模组开发_压力传感器HX711——4. 上报传感器数据给涂鸦模块

概述

涂鸦智能 (NYSE:TUYA) 是一家致力于让生活更智能的领先技术公司,涂鸦提供能够智连万物的云平台,打造互联互通的开发标准,连接品牌、OEM 厂商、开发者、零售商和各行业的智能化需求,涂鸦的解决方案赋能并提升合作伙伴和客户的产品价值,同时通过技术应用使消费者的生活更加便利,涂鸦智能的智慧商业 SaaS 为丰富的垂直行业提供智能解决方案。涂鸦智能领先业界的技术,符合严格的数据保护标准和安全性。
压力传感器是工业实践中最为常用的一种传感器,其广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业。
同时压力传感器可以应用于电子称重系统或者久坐系统,实现了称重显示、超限报警、校准、适应各种工作环境、远程实时监控等多种功能,可以广泛应用于各种称重场景。
本章主要是将传感器数据上报给涂鸦模组。

视频演示

听不到声音的请点击跳转进行观看。
https://www.bilibili.com/video/BV1LT4y1U7Qs/

涂鸦模组开发(压力传感器HX711)——4.上报传感器数据给涂鸦模块

资料下载

https://download.csdn.net/download/qq_24312945/84796130

涂鸦智能

想更多了解涂鸦智能化开发方案,获取相关技术资料或开发物料,可点击下方报名参加,同时有30元优惠券。。
https://t.tuya.com/AY1D3R9jGr

涂鸦功能修改

由于我用的压力传感器HX711采集0-20kg,故可以修改一下,修改成如下所示。
在这里插入图片描述

压力值上报

由于主程序中每过100ms执行一次循环,频繁上报会导致mcu和涂鸦模块的压力过大,故设定3s上报一次。
在这里插入图片描述

由上图也可以得知,压力值的发送命令,故还需要定义一个发送的buff数组。
要注意数据长度,0x08代表后面还有8个数据,即功能指令应该是0-0xFFFFFFFF,不过有效的只有0-0x4e20。

/* USER CODE BEGIN PV */
uint32_t Reported_pressure=0 ;//压力值
uint32_t Reported_pressure_counter=0 ;//压力值上报计数器,防止上报过快
uint8_t Buff8[15]={0x55,0xAA,0x00,0x07,0x00,0x08,0x02,0x02,0x00,0x04,0x00,0x00,0x00,0x00,0x00};//上报压力值
/* USER CODE END PV */

在主程序中添加代码,当采集的数据为正压力值时候正常上报,在负压力值时候为0,3s上报一次。

/***********读取压力传感器值******************/		
		weight_shiji=ReadCount();
		if(weight_qupi>=weight_shiji)
		{
			weight_shiji=weight_qupi-weight_shiji;
			weight_shiji=weight_shiji/100;
//			printf("重量为:%dg",weight_shiji);
			Reported_pressure=weight_shiji;//正压力值正常赋值
		}
		else
		{
			weight_shiji=weight_shiji-weight_qupi;
			weight_shiji=weight_shiji/100;
//			printf("重量为:-%dg",weight_shiji);
			Reported_pressure=0;//负压力值为0
		}	

		
		
		Reported_pressure_counter++;//压力值上报计数器,防止上报过快
		if(Reported_pressure_counter==30)//3s上报一次
		{
			Reported_pressure_counter=0;//压力值上报计数器,防止上报过快
			Buff8[10]=0;//用不到,赋值为0
			Buff8[11]=0;//用不到,赋值为0
			Buff8[12]=Reported_pressure/256;
			Buff8[13]=Reported_pressure%256;
			Buff8[14]=0;//校验和赋值为0
			for(int i=0;i<14;i++)
			{
				Buff8[14]=Buff8[14]+Buff8[i];		
			}
			for(int i=0;i<12;i++)
			{
				Buff8[12]=Buff8[12]+Buff8[i];		
			}
			HAL_UART_Transmit(&huart3,(uint8_t*)Buff8,15,0xFFFF);	//上报压力值,向涂鸦模块发送
			HAL_UART_Transmit(&huart1,(uint8_t*)Buff8,15,0xFFFF);	//上报压力值,向涂鸦模块发送		
		}

同时涂鸦模块可能会想mcu询问压力值,故需要在uart3_data()函数中添加判断进行上报。

					else if(RX_BUFF[3]==0x06&&RX_BUFF[6]==0x02)//上报压力值               
					{
					
						HAL_UART_Transmit(&huart3,(uint8_t*)Buff8,13,0xFFFF);	//上报压力值,向涂鸦模块发送
						HAL_UART_Transmit(&huart1,(uint8_t*)Buff8,13,0xFFFF);	//上报压力值,向涂鸦模块发送	
					}	

在这里插入图片描述

压力状态上报

由于主程序中每过100ms执行一次循环,频繁上报会导致mcu和涂鸦模块的压力过大,故设定3s上报一次。
同时设定压力值为500g以下为alarm,超过为normal。
在这里插入图片描述
由上图也可以得知,压力值的发送命令,故还需要定义一个发送的buff数组。

/* USER CODE BEGIN PV */
uint8_t Buff9[12]={0x55,0xAA,0x00,0x07,0x00,0x05,0x01,0x04,0x00,0x01,0x00,0x00};//上报压力值

/* USER CODE END PV */

在主程序中添加代码,当采集的数据为压力值为500g以下正常上报,在大于500g上报告警,3s上报一次。

/***********读取压力传感器值******************/		
		weight_shiji=ReadCount();
		if(weight_qupi>=weight_shiji)
		{
			weight_shiji=weight_qupi-weight_shiji;
			weight_shiji=weight_shiji/100;
//			printf("重量为:%dg",weight_shiji);
			Reported_pressure=weight_shiji;//正压力值正常赋值
		}
		else
		{
			weight_shiji=weight_shiji-weight_qupi;
			weight_shiji=weight_shiji/100;
//			printf("重量为:-%dg",weight_shiji);
			Reported_pressure=0;//负压力值为0
		}	

		
		
		Reported_pressure_counter++;//压力值上报计数器,防止上报过快
		if(Reported_pressure_counter==30)//3s上报一次
		{
			Reported_pressure_counter=0;//压力值上报计数器,防止上报过快
			
			Buff8[10]=0;//用不到,赋值为0
			Buff8[11]=0;//用不到,赋值为0
			Buff8[12]=Reported_pressure/256;
			Buff8[13]=Reported_pressure%256;
			Buff8[14]=0;//校验和赋值为0
			for(int i=0;i<14;i++)
			{
				Buff8[14]=Buff8[14]+Buff8[i];		
			}
			HAL_UART_Transmit(&huart3,(uint8_t*)Buff8,15,0xFFFF);	//上报压力值,向涂鸦模块发送
			HAL_UART_Transmit(&huart1,(uint8_t*)Buff8,15,0xFFFF);	//上报压力值,向涂鸦模块发送
			
			//设定压力值为500g以下为alarm,超过为normal
			if(Reported_pressure>500)
				Buff9[10]=0;
			else
				Buff9[10]=1;
			Buff9[11]=0;//校验和赋值为0
			for(int i=0;i<11;i++)
			{
				Buff9[11]=Buff9[11]+Buff9[i];		
			}
			HAL_UART_Transmit(&huart3,(uint8_t*)Buff9,12,0xFFFF);	//上报压力值,向涂鸦模块发送
			HAL_UART_Transmit(&huart1,(uint8_t*)Buff9,12,0xFFFF);	//上报压力值,向涂鸦模块发送
					
		}

同时涂鸦模块可能会想mcu询问压力状态,故需要在uart3_data()函数中添加判断进行上报。

					else if(RX_BUFF[3]==0x06&&RX_BUFF[6]==0x02)//上报压力值               
					{
					
						HAL_UART_Transmit(&huart3,(uint8_t*)Buff8,13,0xFFFF);	//上报压力值,向涂鸦模块发送
						HAL_UART_Transmit(&huart1,(uint8_t*)Buff8,13,0xFFFF);	//上报压力值,向涂鸦模块发送	
					}	

在这里插入图片描述

增值服务

在设置中可以开启短信通知,这样在触发压力传感器之后,就会给手机发送一条短信。
在这里插入图片描述
在这里插入图片描述
同时也会向手机发送告警信息。
在这里插入图片描述

最后

以上的代码会在Q群里分享。QQ群:615061293。
或者关注微信公众号『记帖』,持续更新文章和学习资料,可加作者的微信交流学习!
在这里插入图片描述

posted @ 2022-05-28 22:04  记帖  阅读(231)  评论(0编辑  收藏  举报