概述
涂鴉智能 (NYSE:TUYA) 是一家致力于讓生活更智能的領先技術公司,涂鴉提供能夠智連萬物的云平臺,打造互聯互通的開發標準,連接品牌、OEM 廠商、開發者、零售商和各行業的智能化需求,涂鴉的解決方案賦能并提升合作伙伴和客戶的產品價值,同時通過技術應用使消費者的生活更加便利,涂鴉智能的智慧商業 SaaS 為豐富的垂直行業提供智能解決方案。涂鴉智能領先業界的技術,符合嚴格的數據保護標準和安全性。
壓力傳感器是工業實踐中最為常用的一種傳感器,其廣泛應用于各種工業自控環境,涉及水利水電、鐵路交通、智能建筑、生產自控、航空航天、軍工、石化、油井、電力、船舶、機床、管道等眾多行業。
同時壓力傳感器可以應用于電子稱重系統或者久坐系統,實現了稱重顯示、超限報警、校準、適應各種工作環境、遠程實時監控等多種功能,可以廣泛應用于各種稱重場景。
本章主要是將傳感器數據上報給涂鴉模組。
? 進入IoT商機孵化營,獲取開發資料及相關硬件物料。 ? ? ? ? ? ? ? ? ? ?
? 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); //上報壓力值,向涂鴉模塊發送
}
增值服務
在設置中可以開啟短信通知,這樣在觸發壓力傳感器之后,就會給手機發送一條短信。
?
同時也會向手機發送告警信息。
評論
查看更多