概述
涂鸦智能 (NYSE:TUYA) 是一家致力于让生活更智能的领先技术公司,涂鸦提供能够智连万物的云平台,打造互联互通的开发标准,连接品牌、OEM 厂商、开发者、零售商和各行业的智能化需求,涂鸦的解决方案赋能并提升合作伙伴和客户的产品价值,同时通过技术应用使消费者的生活更加便利,涂鸦智能的智慧商业 SaaS 为丰富的垂直行业提供智能解决方案。涂鸦智能领先业界的技术,符合严格的数据保护标准和安全性。
压力传感器是工业实践中最为常用的一种传感器,其广泛应用于各种工业自控环境,涉及水利水电、铁路交通、智能建筑、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业。
同时压力传感器可以应用于电子称重系统或者久坐系统,实现了称重显示、超限报警、校准、适应各种工作环境、远程实时监控等多种功能,可以广泛应用于各种称重场景。
本章主要是将传感器数据上报给涂鸦模组。
IoT商机孵化营:
https://t.tuya.com/AY1D3R9jFf
涂鸦功能修改
由于我用的压力传感器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); //上报压力值,向涂鸦模块发送
}
增值服务
在设置中可以开启短信通知,这样在触发压力传感器之后,就会给手机发送一条短信。
同时也会向手机发送告警信息。
评论
查看更多