日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁 >> MM32/靈動(dòng)微電子 >> MM32W無線MCU系列產(chǎn)品應(yīng)用筆記 —— 溫濕度監(jiān)測儀方案

MM32W無線MCU系列產(chǎn)品應(yīng)用筆記 —— 溫濕度監(jiān)測儀方案

關(guān)鍵字:靈動(dòng)微電子 MM32W系列MCU 溫濕度監(jiān)測儀方案 作者: 來源: 發(fā)布時(shí)間:2022-06-14  瀏覽:22
在本章節(jié)我們將繼續(xù)給大家介紹一個(gè)使用場景較為豐富的藍(lán)牙應(yīng)用方案——基于MM32W系列開發(fā)的溫濕度監(jiān)測儀。

方案應(yīng)用圖              

圖1 方案應(yīng)用圖
 
溫度、濕度與我們的生活息息相關(guān),科研實(shí)驗(yàn)室、農(nóng)業(yè)大棚、食品儲(chǔ)存室、疫苗存儲(chǔ)及配送、貯藏室等對(duì)環(huán)境的溫度、濕度有著嚴(yán)格的控制標(biāo)準(zhǔn),溫度、濕度的異常變化都可能會(huì)給其造成嚴(yán)重的影響。傳統(tǒng)的人工巡查和記錄環(huán)境溫濕度變化并非易事,隨著時(shí)代的發(fā)展,可實(shí)現(xiàn)智能化監(jiān)測環(huán)境溫濕度的溫濕度傳感器出現(xiàn)了。如今,科研、農(nóng)業(yè)、暖通、機(jī)房、航天航空、電力等工業(yè)部門都開始采用智能化的溫濕度傳感器監(jiān)測環(huán)境的溫濕度。利用溫濕度傳感器對(duì)環(huán)境的溫濕度進(jìn)行實(shí)時(shí)監(jiān)測,不僅能夠及時(shí)發(fā)現(xiàn)環(huán)境溫濕度的異常,進(jìn)而做出應(yīng)對(duì)措施,避免或減少損失,還能夠減少員工工作量,降低人力成本。


硬件資源如下:
本方案基于MM32 BLE_Test Board進(jìn)行測試驗(yàn)證,搭配上溫濕度傳感器DHT11作為采集環(huán)境中溫濕度數(shù)據(jù),再加上一款小型的OLED屏幕作為本地式數(shù)據(jù)輸出顯示窗口,另外可以通過手機(jī)APP獲取溫濕度變化情況。在硬件原理上,本方案的DHT11模塊的單線數(shù)據(jù)傳輸引腳連接到MCU的PA7,為了解析模塊的數(shù)據(jù)時(shí)序,該引腳復(fù)用為TIM3_CH2輸入捕獲功能;使用硬件IIC接口連接到OLED屏上去,引腳為PB6(SCL)、PB7(SDA),可以將溫濕度數(shù)據(jù)顯示在OLED;藍(lán)牙相關(guān)的功能引腳與前面介紹的方案一致,此處不做過多展開。
 
軟件資源如下:
結(jié)合上述使用到的硬件資源,下面我們著重介紹軟件實(shí)現(xiàn)流程以及相關(guān)配置代碼。使用MCU的引腳復(fù)用為TIM3_CH2輸入捕獲功能DHT11模塊,在開啟捕獲時(shí)將PA7配置為浮空輸入模式,復(fù)用功能選擇AF1配置為TIM3的CH2輸入捕獲通道,并且將TIM3開啟;在停止捕獲時(shí)將PA7配置為推挽輸出模式,并且將TIM3關(guān)閉。由于DHT11模塊限制,溫濕度采樣周期間隔必須大于1S,本方案采樣和顯示周期為2S。
 
在使用OLED屏幕需要用到硬件IIC外設(shè)接口,需要將對(duì)應(yīng)的PB6 PB7配置為復(fù)用開漏輸出模式,初始化時(shí)還需要根據(jù)不同的OLED模塊在函數(shù)IIC_Init()中修改slave設(shè)備地址,使能IIC接口后即可以開始傳輸工作了。由于數(shù)據(jù)采集和定時(shí)顯示需要,本方案的低功耗模式采用STOP模式。
 
以下為主函數(shù)初始化配置內(nèi)容,主要將所有的外設(shè)資源和藍(lán)牙協(xié)議棧初始化,并且以中斷服務(wù)程序的方式運(yùn)行藍(lán)牙,代碼如下:
 
代碼

主函數(shù)的循環(huán)中主要實(shí)現(xiàn)的功能為定時(shí)采集和顯示當(dāng)前環(huán)境的溫濕度數(shù)據(jù),而該數(shù)據(jù)也將在藍(lán)牙服務(wù)中發(fā)送到APP端顯示,代碼如下:

代碼


下面簡單介紹一下OLED操作相關(guān)的幾個(gè)函數(shù):


//初始化IIC


void IIC_Init(I2C_TypeDef* I2Cx);


//發(fā)送命令函數(shù)


static void Write_Command(unsigned char Command);


//發(fā)送數(shù)據(jù)顯示在屏幕


static void Write_DataBuff(unsigned char *Data, unsigned char Len);


//OLED屏初始化


void OLED_Init(void);


//設(shè)置坐標(biāo)


void OLED_SetPos(unsigned char x, unsigned char y);


//字符串顯示


void OLED_DispStr(unsigned char x, unsigned char y, char *ch);


//顯示logo


void OLED_DispLogo(void);


//清屏操作


void OLED_Clear(void);


下面簡單介紹一下DHT11模塊操作相關(guān)的幾個(gè)函數(shù):


// TIM3_CH2輸入捕獲初始化


void CaptureInit(void);   //用TIM3_CH2  PB5  AF3


//啟動(dòng)捕獲


void CaptureStart(void);


//停止捕獲


void CaptureStop(void);


在TIM3_IRQHandler()中針對(duì)捕獲的數(shù)據(jù)進(jìn)行解析和處理。
 
我們?cè)趃att_user_send_notify_data_callback函數(shù)中給手機(jī)發(fā)送數(shù)據(jù),該函數(shù)屬于回調(diào)函數(shù),協(xié)議棧會(huì)在系統(tǒng)允許的時(shí)候(異步)回調(diào)本函數(shù),該函數(shù)可用于藍(lán)牙模塊端主動(dòng)發(fā)送數(shù)據(jù)之用,函數(shù)內(nèi)部不得增加阻塞代碼。該應(yīng)用中我們?cè)诖撕瘮?shù)中實(shí)現(xiàn)將采集轉(zhuǎn)換好的溫濕度數(shù)據(jù)傳輸給手機(jī)APP。詳細(xì)實(shí)現(xiàn)代碼如下:
 
//藍(lán)牙連接成功后協(xié)議在空閑的時(shí)候會(huì)調(diào)用本回調(diào)函數(shù)


void gatt_user_send_notify_data_callback(void){ 


static u8 notiCnt = 0;//回調(diào)次數(shù)計(jì)數(shù)器


u16 humiBat ,tempBpm = 0;


unsigned char DHTData[3]={0x00,0x00,0x01};


notiCnt++; //每進(jìn)一次該函數(shù)回調(diào)次數(shù)計(jì)數(shù)器+1


if(CaptureDataMon(&humiBat, &tempBpm) == 0) return;//未成功采集到溫濕度數(shù)據(jù)立即返回


tempBpm %= 512;//初步判斷溫度數(shù)據(jù)大小


humiBat /= 10;//初步判斷濕度數(shù)據(jù)大小


if (notiCnt >= 20) {//每進(jìn)入該回調(diào)函數(shù)20次才發(fā)送一次溫度數(shù)據(jù)


notiCnt = 0;       


cur_notifyhandle = 0x12;//溫度數(shù)據(jù)回復(fù)句柄值


if (tempBpm < 0x100){


DHTData[0] = 0; //1Byte


DHTData[1] = tempBpm;


sconn_notifydata(DHTData,2);//換算處理好溫度數(shù)據(jù)后通過藍(lán)牙發(fā)出


}


else {


DHTData[0] = 1; //2Byte


DHTData[1] = tempBpm;


DHTData[2] = tempBpm>>8;


sconn_notifydata(DHTData,3);//換算處理好溫度數(shù)據(jù)后通過藍(lán)牙發(fā)出


}


}


else if (10 == notiCnt) {//每進(jìn)入該回調(diào)函數(shù)10次才發(fā)送一次濕度數(shù)據(jù)


SimBatt = humiBat; //0~100


cur_notifyhandle = 0x18;//濕度數(shù)據(jù)回復(fù)句柄值


sconn_notifydata(&SimBatt,1);//換算處理好濕度數(shù)據(jù)后通過藍(lán)牙發(fā)出


}


}




除了上述關(guān)鍵的藍(lán)牙數(shù)據(jù)發(fā)送函數(shù)外,下面再簡單介紹一些與藍(lán)牙相關(guān)的特征值定義:
 
代碼


手機(jī)操作流程如下:


打開手機(jī)藍(lán)牙并打開App,選擇HRM進(jìn)入,點(diǎn)擊Connect按鈕開始搜索溫濕度藍(lán)牙設(shè)備。


選擇對(duì)應(yīng)名稱(MM32W0_DHT)的藍(lán)牙設(shè)備并進(jìn)行配對(duì),等待連接成功。連接成功后會(huì)有相應(yīng)提示,按鈕Connect名字會(huì)變成Disconnect。


連接成功后,在App界面上電池圖標(biāo)會(huì)顯示從DHT11傳感器獲取的濕度信息(百分比)Finger和圖表會(huì)顯示從DHT11傳感器獲取的溫度信息(原始數(shù)據(jù),溫度值x10)。


代碼


圖2 手機(jī)APP圖

編輯:ls  最后修改時(shí)間:2022-06-14

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號(hào)-4

车险| 衡山县| 元氏县| 河北区| 鄂托克前旗| 茶陵县| 太白县| 城口县| 仪陇县| 景泰县| 宁波市| 城步| 石泉县| 金沙县| 临颍县| 华安县| 静海县| 重庆市| 通山县| 隆尧县| 兴山县| 新竹市| 招远市| 夏河县| 龙井市| 黎平县| 景东| 延吉市| 易门县| 宜兰县| 朝阳区| 沭阳县| 广汉市| 疏勒县| 新河县| 邢台县| 阿图什市| 凌源市| 大城县| 柯坪县| 东安县|