智能鎖方案中使用到
靈動(dòng)微MM32W系列低功耗MCU,配合手機(jī)通過APP讀取智能鎖藍(lán)牙信息,嘗試配對(duì),配對(duì)成功即可正常通訊,手機(jī)APP通過藍(lán)牙把指令發(fā)送給智能鎖進(jìn)行解鎖,整個(gè)流程簡(jiǎn)單可靠,該方案將徹底告別傳統(tǒng)鑰匙開鎖。藍(lán)牙智能鎖安全便捷,符合用戶的需求,可應(yīng)用的日常場(chǎng)景廣泛,例如:門鎖(家門、倉(cāng)庫門、貨車門等);車鎖(電動(dòng)車鎖、自行車鎖、摩托車鎖等);私人箱柜鎖(抽屜鎖、更衣柜、旅行箱、工具箱等)。接下來靈動(dòng)微總代理英尚微給大家介紹一個(gè)使用場(chǎng)景非常豐富的藍(lán)牙應(yīng)用方案——基于MM32W系列開發(fā)的藍(lán)牙智能鎖方案。
圖1方案場(chǎng)景
硬件資源如下:
本方案基于MM32BLE_TestBoard進(jìn)行測(cè)試驗(yàn)證,搭配上一顆微型的雙向直流馬達(dá)作為開鎖方式的載體,這里只用馬達(dá)驅(qū)動(dòng)開鎖,關(guān)鎖默認(rèn)為手動(dòng)操作,用戶可以通過手機(jī)APP來操作開鎖。在硬件原理上,本方案使用到的DC馬達(dá)是通過一顆專用的IC芯片來驅(qū)動(dòng),其控制引腳連接到MCU的PD2和PD3,通過控制兩個(gè)IO的電平可以對(duì)馬達(dá)進(jìn)行不同運(yùn)動(dòng)狀態(tài)的操作;使用PB1連接到綠色LED指示燈,可作為藍(lán)牙連接狀態(tài)的指示;模擬鎖體狀態(tài)功能引腳PA1配置為上拉輸入,低功耗喚醒引腳選擇PA0配置為上拉輸入;藍(lán)牙相關(guān)的功能引腳與前面介紹的方案一致,此處不做過多展開。以下為DC馬達(dá)驅(qū)動(dòng)原理圖:
圖2 方案應(yīng)用圖
軟件資源如下:
結(jié)合上述使用到的硬件資源,下面我們著重介紹軟件實(shí)現(xiàn)流程以及相關(guān)配置代碼。由于本應(yīng)用方案
ble藍(lán)牙芯片與APP建立連接過程中需要應(yīng)用到配對(duì)的功能,利用藍(lán)牙庫的接口函數(shù)可以實(shí)現(xiàn),這里將配對(duì)秘鑰設(shè)置為“123456”,在連接時(shí)候需要設(shè)置正確才能配對(duì)成功并且連接上;控制DC馬達(dá)的功能引腳全都配成推挽輸出模式,直接連到驅(qū)動(dòng)IC上去,通過改變高低電平組合來控制電機(jī)的正反轉(zhuǎn)和啟停;另外再對(duì)測(cè)試和模擬功能的引腳進(jìn)行配置,從而更為直觀地對(duì)應(yīng)用效果的觀測(cè)和驗(yàn)證,且使能看門狗復(fù)位功能來保證藍(lán)牙服務(wù)的穩(wěn)定性能;由于方案應(yīng)用電池供電對(duì)低功耗的需要,本方案低功耗采用STOP模式。
以下為主函數(shù)初始化配置內(nèi)容,主要將所有的外設(shè)資源和藍(lán)牙協(xié)議棧初始化,并且以中斷服務(wù)程序的方式運(yùn)行藍(lán)牙,主函數(shù)的循環(huán)中主要實(shí)現(xiàn)的功能為判斷是否進(jìn)入低功耗模式,并且喚醒后根據(jù)接收到的藍(lán)牙數(shù)據(jù)對(duì)DC馬達(dá)進(jìn)行不同的操作,代碼如下:
下面簡(jiǎn)單介紹一下藍(lán)牙低功耗和DC馬達(dá)操作相關(guān)的幾個(gè)函數(shù):
//初始化DC馬達(dá)控制引腳PD2、PD3,并且全部置為低電平
void MOTOR_Init(void);//停止DC馬達(dá)的轉(zhuǎn)動(dòng)
static void MOTOR_Stop(void);//根據(jù)不同方向參數(shù)去控制DC馬達(dá)運(yùn)轉(zhuǎn)
static void MOTOR_Run(unsigned char direction);
在MOTOR_Proc()處理函數(shù)中針對(duì)藍(lán)牙接收到的密碼數(shù)據(jù)進(jìn)行解析,如果與默認(rèn)設(shè)置的4位0-9數(shù)字密碼完全匹配上則操作解鎖,將DC馬達(dá)按照設(shè)定方向控制運(yùn)轉(zhuǎn),為了簡(jiǎn)易驗(yàn)證,模擬一個(gè)信號(hào)表示解鎖成功,這里是通過采集指定IO引腳PA1的輸入來實(shí)現(xiàn),采集到輸入為高電平那么停止DC馬達(dá)轉(zhuǎn)動(dòng),且清零鎖定標(biāo)志位。以下為代碼實(shí)現(xiàn)內(nèi)容:
我們?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ā)送是否解鎖狀態(tài)信息給手機(jī)APP,函數(shù)內(nèi)部不得增加阻塞代碼。詳細(xì)實(shí)現(xiàn)代碼如下:
//藍(lán)牙連接成功后協(xié)議在空閑的時(shí)候會(huì)調(diào)用本回調(diào)函數(shù)
void gatt_user_send_notify_data_callback(void)
{
static u8 LockFlagBak = 1;
if (LockFlagBak != LockFlag)
{
LockFlagBak = LockFlag;//LockFlag標(biāo)志位會(huì)在MOTOR_Proc()中清零和置位
sconn_notifydata(&LockFlagBak,1);
}
}
藍(lán)牙協(xié)議會(huì)周期性回調(diào)本UsrProcCallback()函數(shù),無論是在廣播狀態(tài)還是連接狀態(tài),在該函數(shù)中可以做運(yùn)行和低功耗模式切換的超時(shí)計(jì)數(shù),給IrqMcuGotoSleepAndWakeup()來處理是否進(jìn)入低功耗模式,并且針對(duì)獲取到的是否連接信息用LED指示燈做不同的狀態(tài)顯示。詳細(xì)實(shí)現(xiàn)代碼如下:
//藍(lán)牙協(xié)議會(huì)周期性回調(diào)本函數(shù)
void UsrProcCallback(void)
{
static unsigned char led_flash = 0;
IWDG_ReloadCounter();
StandbyTimeout ++;
if(gConnectedFlag){ //連接成功
StandbyTimeout = 0;
LED_ONOFF(1);
}else{
led_flash ++;
LED_ONOFF(!(led_flash%10)); //藍(lán)牙未連接,指示燈快閃
}
}
除了上述關(guān)鍵的藍(lán)牙數(shù)據(jù)發(fā)送函數(shù)外,下面再簡(jiǎn)單介紹一些與藍(lán)牙相關(guān)的特征值定義,在const BLE_CHAR AttCharList[] 中定義了本案中的兩個(gè)特征值:
{TYPE_CHAR,0x0011,{ATT_CHAR_PROP_W_NORSP,0x12,0,0xf1,0xff}, UUID16_FORMAT},//解鎖命令
{TYPE_CHAR,0x0013,{ATT_CHAR_PROP_RD|ATT_CHAR_PROP_NTF,0x14,0,0xf2,0xff}, UUID16_FORMAT},//鎖體狀態(tài)
在void att_server_rdByGrType( u8 pdu_type, u8 attOpcode, u16 st_hd, u16 end_hd, u16 att_type )中實(shí)現(xiàn)了自定義特征值服務(wù)聲明;
在void ser_write_rsp()中實(shí)現(xiàn)對(duì)手機(jī)APP發(fā)送的藍(lán)牙數(shù)據(jù)接收和存儲(chǔ):
if (StartEncryption)
{
if (valueLen_w < 9)//對(duì)藍(lán)牙數(shù)據(jù)進(jìn)行解析和存儲(chǔ)
{
Password_wr[0] = valueLen_w;
memcpy(&Password_wr[1], attValue, valueLen_w);
}
}else{ //無效數(shù)據(jù),不保存
Password_wr[0] = 0;
}
在void server_rd_rsp(u8 attOpcode, u16 attHandle, u8 pdu_type)中實(shí)現(xiàn)把鎖體狀態(tài)回復(fù)給手機(jī)APP:
att_server_rd( pdu_type, attOpcode, attHandle, &LockFlag, 1); //將LockFlag 標(biāo)志位返回給手機(jī)APP
手機(jī)操作流程如下:
使用手機(jī)原生藍(lán)牙界面查找設(shè)備,找到MM32_Lock后點(diǎn)擊進(jìn)行配對(duì)。默認(rèn)配對(duì)密碼為123456,配對(duì)成功后MM32_LOCK設(shè)備自動(dòng)保存到配對(duì)設(shè)備列表,以后不需要該步驟;
手機(jī)打開App,開始搜索BLE設(shè)備,選擇對(duì)應(yīng)名稱(MM32_LOCK)的藍(lán)牙設(shè)備并進(jìn)行配對(duì),等待連接成功。連接成功后會(huì)有相應(yīng)提示,按鈕Connect名字會(huì)變成Disconnect;
連接成功后,對(duì)UUID為fff1的特征值寫0x31323334(模擬用戶輸入密碼”1234”),測(cè)試板上連接的馬達(dá)開始轉(zhuǎn)動(dòng),執(zhí)行開鎖動(dòng)作;
給PA1輸入低電平模擬鎖開啟完成,UUID為fff2的特征值結(jié)果為0表示鎖體開啟,給PA1輸入高電平模擬鎖體鎖上,UUID為fff2的特征值結(jié)果為1表示鎖體鎖上。這里只用馬達(dá)驅(qū)動(dòng)開鎖,關(guān)鎖默認(rèn)為手動(dòng)操作。
圖3 手機(jī)APP圖
本文關(guān)鍵詞: 靈動(dòng)微 MM32W系列低功耗MCU
相關(guān)文章:?靈動(dòng)總代理MM32F103C8T6 PIN2PIN兼容STM32F103C8T6
深圳市英尚微電子有限公司是一家專業(yè)的靜態(tài)隨機(jī)記憶體產(chǎn)品及方案提供商,十年來專業(yè)致力代理分銷存儲(chǔ)芯片IC, SRAM、MRAM、pSRAM、 FLASH芯片、SDRAM(DDR1/DDR2/DDR3)等,為客人提供性價(jià)比更高的產(chǎn)品及方案。
英尚微電子中國(guó)區(qū)指定的授權(quán)代理:VTI代理、NETSOL、JSC濟(jì)州半導(dǎo)體(EMLSI)、Everspin 、IPSILOG、LYONTEK、ISSI、CYPRESS、ISOCOME、PARAGON、SINOCHIP、UNIIC; 著名半導(dǎo)體品牌的專業(yè)分銷商 如:RAMTROM、ETRON、FUJITSU、LYONTEK、WILLSEMI。
?更多資訊關(guān)注SRAMSUN. www.henhenlu10.com 0755-66658299