灵活微MM32W系列低功耗MCU智能锁办理计划

2022-11-16 16:47:19 作者:我亦好歌亦好酒
导读:灵动微MM32W系列低功耗MCU智能锁解决方案,智能锁方案中使用到灵动微MM32W系列低功耗MCU,配合手机通过APP读取智能锁蓝牙信息,尝试配对,配对成功即可正常通讯,手机APP通过蓝牙把...
灵动微MM32W系列低功耗MCU智能锁解决方案

智能锁方案中利用到灵活微MM32W系列低功耗MCU,共同手机通过APP读取智能锁蓝牙信息,实验配对,配对乐成即可正常通讯,手机APP通过蓝牙把指令发送给智能锁举行解锁,整个流程简洁可靠,该方案将彻底告辞传统钥匙开锁。蓝牙智能锁宁静便捷,切合用户的需求,可应用的平常场景遍及,比方:门锁(家门、堆栈门、货车门等);车锁(电动车锁、自行车锁、摩托车锁等);私家箱柜锁(抽屉锁、换衣柜、观光箱、东西箱等)。接下来灵活微总署理英尚微给家人们先容一个利用场景非常富厚的蓝牙应用方案——基于MM32W系列开辟的蓝牙智能锁方案。

图1方案场景

硬件资源如下:
本方案基于MM32BLE_TestBoard举行测试验证,搭配上一颗微型的双向直流马达作为开锁方法的载体,这里只用马达驱动开锁,关锁默以为手动操纵,用户可以通过手机APP来操纵开锁。在硬件道理上,本方案利用到的DC马达是通过一颗专用的IC芯片来驱动,其操纵引脚毗连到MCU的PD2和PD3,通过操纵两个IO的电平可以对马达举行差别活动状态的操纵;利用PB1毗连到绿色LED指示灯,可作为蓝牙毗连状态的指示;模仿锁体状态功效引脚PA1设置装备摆设为上拉输入,低功耗叫醒引脚选择PA0设置装备摆设为上拉输入;蓝牙相干的功效引脚与前面先容的方案同等,此处不做过多睁开。以下为DC马达驱动道理图:

图2 方案应用图

灵动微MM32W系列低功耗MCU智能锁解决方案

软件资源如下:
联合上述利用到的硬件资源,下面我们偏重先容软件实现流程以及相干设置装备摆设代码。因为本应用方案ble蓝牙芯片与APP创建毗连历程中必要应用到配对的功效,使用蓝牙库的接口函数可以实现,这里将配对秘钥设置为“123456”,在毗连时间必要设置精确才气配对乐成而且毗连上;操纵DC马达的功效引脚全都配成推挽输出模式,直连续到驱动IC上去,通过转变崎岖电平组合来操纵电机的正反转和启停;别的再对测试和模仿功效的引脚举行设置装备摆设,从而更为直观地对应用成效的观察和验证,且使能看门狗复位功效来包管蓝牙办事的稳健性能;因为方案应用电池供电对低功耗的必要,本方案低功耗采纳STOP模式。

以下为主函数初始化设置装备摆设内容,重要将全部的外设资源和蓝牙协议栈初始化,而且以停止办事步伐的方法运行蓝牙,主函数的轮回中重要实现的功效为推断是否进入低功耗模式,而且叫醒后依据吸收到的蓝牙数据对DC马达举行差别的操纵,代码如下:

下面简洁先容一下蓝牙低功耗和DC马达操纵相干的几个函数:

//初始化DC马达操纵引脚PD2、PD3,而且全部置为低电平
void MOTOR_Init(void);//制止DC马达的转动
static void MOTOR_Stop(void);//依据差别偏向参数去操纵DC马达运转
static void MOTOR_Run(unsigned char direction);


在MOTOR_Proc()处置惩罚函数中针对蓝牙吸收到的暗码数据举行剖析,假如与默认设置的4位0-9数字暗码完全立室上则操纵解锁,将DC马达根据设定偏向操纵运转,为了简单验证,模仿一个信号表现解锁乐成,这里是通过收罗指定IO引脚PA1的输入来实现,收罗到输入为高电平那么制止DC马达转动,且清零锁定标记位。以下为代码实现内容:

我们在gatt_user_send_notify_data_callback函数中给手机发送数据,该函数属于回调函数,协议栈会在体系许可的时间(异步)回调本函数,该函数被用于蓝牙模块端自动发送是否解锁状态信息给手机APP,函数内部不得增添堵塞代码。细致实当代码如下:

//蓝牙毗连乐成后协议在闲暇的时间会挪用本回调函数
void gatt_user_send_notify_data_callback(void)
{
static u8 LockFlagBak = 1;
if (LockFlagBak != LockFlag)
{
LockFlagBak = LockFlag;//LockFlag标记位会在MOTOR_Proc()中清零和置位
sconn_notifydata(&LockFlagBak,1);
}
}

蓝牙协议会周期性回调本UsrProcCallback()函数,无论是在广播状态照旧毗连状态,在该函数中可以做运行和低功耗模式切换的超时计数,给IrqMcuGotoSleepAndWakeup()来处置惩罚是否进入低功耗模式,而且针对猎取到的是否毗连信息用LED指示灯做差别的状态表现。细致实当代码如下:

//蓝牙协议会周期性回调本函数
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)); //蓝牙未毗连,指示灯快闪
}
}

除了上述要害的蓝牙数据发送函数外,下面再简洁先容一些与蓝牙相干的特性值界说,在const BLE_CHAR AttCharList[] 中界说了本案中的两个特性值:

{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},//锁体状态
在void att_server_rdByGrType( u8 pdu_type, u8 attOpcode, u16 st_hd, u16 end_hd, u16 att_type )中实现了自界说特性值办事声明;
在void ser_write_rsp()中实现敌手机APP发送的蓝牙数据吸收和存储:
if (StartEncryption)
{
if (valueLen_w < 9)//对蓝牙数据进行解析和存储
{
Password_wr[0] = valueLen_w;
memcpy(&Password_wr[1], attValue, valueLen_w);
}
}else{ //无效数据,不储存
Password_wr[0] = 0;
}

在void server_rd_rsp(u8 attOpcode, u16 attHandle, u8 pdu_type)中实现把锁体状态复兴给手机APP:
att_server_rd( pdu_type, attOpcode, attHandle, &LockFlag, 1); //将LockFlag 标记位返回给手机APP


手机操纵流程如下:
利用手机原生蓝牙界面查找设置装备摆设,找到MM32_Lock后点击举行配对。默认配对暗码为123456,配对乐成后MM32_LOCK设置装备摆设主动储存到配对设置装备摆设列表,今后不必要该步调;

手机打开App,开始搜刮BLE设置装备摆设,选择对应名称(MM32_LOCK)的蓝牙设置装备摆设并举行配对,等候毗连乐成。毗连乐成后会有相应提示,按钮Connect名字会酿成Disconnect;

毗连乐成后,对UUID为fff1的特性值写0x31323334(模仿用户输入暗码”1234”),测试板上毗连的马达开始转动,实行开锁行动;

给PA1输入低电平模仿锁开启完成,UUID为fff2的特性值效果为0表现锁体开启,给PA1输入高电平模仿锁体锁上,UUID为fff2的特性值效果为1表现锁体锁上。这里只用马达驱动开锁,关锁默以为手动操纵。

图3 手机APP图

百亿智能温控器市场怎么把握 MCU智能化方案来助你
精彩图集