概述
涂鴉智能 (NYSE:TUYA) 是一家致力于讓生活更智能的領(lǐng)先技術(shù)公司,涂鴉提供能夠智連萬物的云平臺(tái),打造互聯(lián)互通的開發(fā)標(biāo)準(zhǔn),連接品牌、OEM 廠商、開發(fā)者、零售商和各行業(yè)的智能化需求,涂鴉的解決方案賦能并提升合作伙伴和客戶的產(chǎn)品價(jià)值,同時(shí)通過技術(shù)應(yīng)用使消費(fèi)者的生活更加便利,涂鴉智能的智慧商業(yè) SaaS 為豐富的垂直行業(yè)提供智能解決方案。涂鴉智能領(lǐng)先業(yè)界的技術(shù),符合嚴(yán)格的數(shù)據(jù)保護(hù)標(biāo)準(zhǔn)和安全性。
壓力傳感器是工業(yè)實(shí)踐中最為常用的一種傳感器,其廣泛應(yīng)用于各種工業(yè)自控環(huán)境,涉及水利水電、鐵路交通、智能建筑、生產(chǎn)自控、航空航天、軍工、石化、油井、電力、船舶、機(jī)床、管道等眾多行業(yè)。
同時(shí)壓力傳感器可以應(yīng)用于電子稱重系統(tǒng)或者久坐系統(tǒng),實(shí)現(xiàn)了稱重顯示、超限報(bào)警、校準(zhǔn)、適應(yīng)各種工作環(huán)境、遠(yuǎn)程實(shí)時(shí)監(jiān)控等多種功能,可以廣泛應(yīng)用于各種稱重場(chǎng)景。
本章主要是將傳感器數(shù)據(jù)上報(bào)給涂鴉模組。
? 進(jìn)入IoT商機(jī)孵化營(yíng),獲取開發(fā)資料及相關(guān)硬件物料。 ? ? ? ? ? ? ? ? ? ?
? IoT商機(jī)孵化營(yíng): ? ? ??
? https://t.tuya.com/AY1D3R9jFf ? ? ? ? ? ? ? ? ? ? ? ? ??
涂鴉功能修改
由于我用的壓力傳感器HX711采集0-20kg,故可以修改一下,修改成如下所示。
?
壓力值上報(bào)
由于主程序中每過100ms執(zhí)行一次循環(huán),頻繁上報(bào)會(huì)導(dǎo)致mcu和涂鴉模塊的壓力過大,故設(shè)定3s上報(bào)一次。
?
由上圖也可以得知,壓力值的發(fā)送命令,故還需要定義一個(gè)發(fā)送的buff數(shù)組。
要注意數(shù)據(jù)長(zhǎng)度,0x08代表后面還有8個(gè)數(shù)據(jù),即功能指令應(yīng)該是0-0xFFFFFFFF,不過有效的只有0-0x4e20。
/* USER CODE BEGIN PV */
uint32_t Reported_pressure=0 ;//壓力值
uint32_t Reported_pressure_counter=0 ;//壓力值上報(bào)計(jì)數(shù)器,防止上報(bào)過快
uint8_t Buff8[15]={0x55,0xAA,0x00,0x07,0x00,0x08,0x02,0x02,0x00,0x04,0x00,0x00,0x00,0x00,0x00};//上報(bào)壓力值
/* USER CODE END PV */
在主程序中添加代碼,當(dāng)采集的數(shù)據(jù)為正壓力值時(shí)候正常上報(bào),在負(fù)壓力值時(shí)候?yàn)?,3s上報(bào)一次。
/***********讀取壓力傳感器值******************/
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;//負(fù)壓力值為0
}
Reported_pressure_counter++;//壓力值上報(bào)計(jì)數(shù)器,防止上報(bào)過快
if(Reported_pressure_counter==30)//3s上報(bào)一次
{
Reported_pressure_counter=0;//壓力值上報(bào)計(jì)數(shù)器,防止上報(bào)過快
Buff8[10]=0;//用不到,賦值為0
Buff8[11]=0;//用不到,賦值為0
Buff8[12]=Reported_pressure/256;
Buff8[13]=Reported_pressure%256;
Buff8[14]=0;//校驗(yàn)和賦值為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); //上報(bào)壓力值,向涂鴉模塊發(fā)送
HAL_UART_Transmit(&huart1,(uint8_t*)Buff8,15,0xFFFF); //上報(bào)壓力值,向涂鴉模塊發(fā)送
}
同時(shí)涂鴉模塊可能會(huì)想mcu詢問壓力值,故需要在uart3_data()函數(shù)中添加判斷進(jìn)行上報(bào)。
else if(RX_BUFF[3]==0x06&&RX_BUFF[6]==0x02)//上報(bào)壓力值
{
HAL_UART_Transmit(&huart3,(uint8_t*)Buff8,13,0xFFFF); //上報(bào)壓力值,向涂鴉模塊發(fā)送
HAL_UART_Transmit(&huart1,(uint8_t*)Buff8,13,0xFFFF); //上報(bào)壓力值,向涂鴉模塊發(fā)送
}
壓力狀態(tài)上報(bào)
由于主程序中每過100ms執(zhí)行一次循環(huán),頻繁上報(bào)會(huì)導(dǎo)致mcu和涂鴉模塊的壓力過大,故設(shè)定3s上報(bào)一次。
同時(shí)設(shè)定壓力值為500g以下為alarm,超過為normal。
?
由上圖也可以得知,壓力值的發(fā)送命令,故還需要定義一個(gè)發(fā)送的buff數(shù)組。
/* USER CODE BEGIN PV */
uint8_t Buff9[12]={0x55,0xAA,0x00,0x07,0x00,0x05,0x01,0x04,0x00,0x01,0x00,0x00};//上報(bào)壓力值
/* USER CODE END PV */
在主程序中添加代碼,當(dāng)采集的數(shù)據(jù)為壓力值為500g以下正常上報(bào),在大于500g上報(bào)告警,3s上報(bào)一次。
/***********讀取壓力傳感器值******************/
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;//負(fù)壓力值為0
}
Reported_pressure_counter++;//壓力值上報(bào)計(jì)數(shù)器,防止上報(bào)過快
if(Reported_pressure_counter==30)//3s上報(bào)一次
{
Reported_pressure_counter=0;//壓力值上報(bào)計(jì)數(shù)器,防止上報(bào)過快
Buff8[10]=0;//用不到,賦值為0
Buff8[11]=0;//用不到,賦值為0
Buff8[12]=Reported_pressure/256;
Buff8[13]=Reported_pressure%256;
Buff8[14]=0;//校驗(yàn)和賦值為0
for(int i=0;i<14;i++)
{
Buff8[14]=Buff8[14]+Buff8[i];
}
HAL_UART_Transmit(&huart3,(uint8_t*)Buff8,15,0xFFFF); //上報(bào)壓力值,向涂鴉模塊發(fā)送
HAL_UART_Transmit(&huart1,(uint8_t*)Buff8,15,0xFFFF); //上報(bào)壓力值,向涂鴉模塊發(fā)送
//設(shè)定壓力值為500g以下為alarm,超過為normal
if(Reported_pressure>500)
Buff9[10]=0;
else
Buff9[10]=1;
Buff9[11]=0;//校驗(yàn)和賦值為0
for(int i=0;i<11;i++)
{
Buff9[11]=Buff9[11]+Buff9[i];
}
HAL_UART_Transmit(&huart3,(uint8_t*)Buff9,12,0xFFFF); //上報(bào)壓力值,向涂鴉模塊發(fā)送
HAL_UART_Transmit(&huart1,(uint8_t*)Buff9,12,0xFFFF); //上報(bào)壓力值,向涂鴉模塊發(fā)送
}
同時(shí)涂鴉模塊可能會(huì)想mcu詢問壓力狀態(tài),故需要在uart3_data()函數(shù)中添加判斷進(jìn)行上報(bào)。
else if(RX_BUFF[3]==0x06&&RX_BUFF[6]==0x02)//上報(bào)壓力值
{
HAL_UART_Transmit(&huart3,(uint8_t*)Buff8,13,0xFFFF); //上報(bào)壓力值,向涂鴉模塊發(fā)送
HAL_UART_Transmit(&huart1,(uint8_t*)Buff8,13,0xFFFF); //上報(bào)壓力值,向涂鴉模塊發(fā)送
}
增值服務(wù)
在設(shè)置中可以開啟短信通知,這樣在觸發(fā)壓力傳感器之后,就會(huì)給手機(jī)發(fā)送一條短信。
?
同時(shí)也會(huì)向手機(jī)發(fā)送告警信息。
評(píng)論
查看更多