基于MM32W系列开发的蓝牙智能锁方案
0 2023-03-21

在前面一个章节中我们详细介绍到了基于MM32W系列芯片开发的温湿度监测仪方案,在本章节我们将继续给大家介绍一个使用场景非常丰富的蓝牙应用方案——基于MM32W系列开发的蓝牙智能锁方案。


图1方案场景

智能锁方案中使用到MM32W系列低功耗MCU,配合手机通过APP读取智能锁蓝牙信息,尝试配对,配对成功即可正常通讯,手机APP通过蓝牙把指令发送给智能锁进行解锁,整个流程简单可靠,该方案将彻底告别传统钥匙开锁。蓝牙智能锁安全便捷,符合用户的需求,可应用的日常场景广泛,例如:门锁(家门、仓库门、货车门等);车锁(电动车锁、自行车锁、摩托车锁等);私人箱柜锁(抽屉锁、更衣柜、旅行箱、工具箱等)。

硬件资源如下:

本方案基于MM32 BLE_Test Board进行测试验证,搭配上一颗微型的双向直流马达作为开锁方式的载体,这里只用马达驱动开锁,关锁默认为手动操作,用户可以通过手机APP来操作开锁。在硬件原理上,本方案使用到的DC马达是通过一颗专用的IC芯片来驱动,其控制引脚连接到MCU的PD2和PD3,通过控制两个IO的电平可以对马达进行不同运动状态的操作;使用PB1连接到绿色LED指示灯,可作为蓝牙连接状态的指示;模拟锁体状态功能引脚PA1配置为上拉输入,低功耗唤醒引脚选择PA0配置为上拉输入;蓝牙相关的功能引脚与前面介绍的方案一致,此处不做过多展开。以下为DC马达驱动原理图:


图2 方案应用图

软件资源如下:

结合上述使用到的硬件资源,下面我们着重介绍软件实现流程以及相关配置代码。由于本应用方案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)); //蓝牙未连接,指示灯快闪

}

}

除了上述关键的蓝牙数据发送函数外,下面再简单介绍一些与蓝牙相关的特征值定义,在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

在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图
声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 物联网
  • 蓝牙
  • WIFI
  • LoRa
  • 关于物联网应用难题解决方案

      2003年,全球仅有5亿多台联网设备,人均只有0.08台,也就是说平均每人只有0.02台设备可连接至互联网。2010年这个数字上升至125亿,平均每人几乎拥

    05-29
  • 采用RT5350或MT7620的智能家居整体方案设计

    设计思路: 作为智能家居系统,首先要有能为客户提供各种服务的终端设备,比如用于采集空气质量数据的二氧化碳传感器/煤气浓度传感器(防煤气溢出中毒)/PM2.5传感器等,还有能够控制照明设备通电/断电/改变照明亮度/改变灯光颜色的智能开关设备,以及控制窗帘

    05-29
  • MEMS传感器技术的价值

      感测器已成为物联网装置的标准配备,其所采集的各种数据,不仅有助实现智慧应用,若再结合云端资料库的巨量资料分析技术,更能提高感测数据的附加价值,甚至创造出新的

    05-29
  • 智能家居首选的无线连接方式是谁?

      无线技术的普及在这其中起到了很重要的推动作用。WiFi、Zigbee和蓝牙是当前连接智能家居产品和移动设备的主要手段。  WiFi  基于WiFi的智能家居

    05-29
  • 物联网系统的无线连接与典型应用

      物联网受到很多当之无愧的关注是因为它提供了很多潜在的好处。而IoT-connected节点安装在5、10年或以上是投机和市场研究的主题(以及猜测,),有一件

    05-29
  • 高度智能化物联网网关应具备哪些能力

      互联网的普及,使很多了解互联网的人都知道网关这么一个名词,网关(Gateway)就是一个网络连接到另一个网络的"关口"。在Internet网中,网关是一种连

    05-28
  • 带你快速区分蓝牙和NFC

      手机NFC和蓝牙现在已经得到了很广泛应用,原理上都是无线电传输技术,但它们有着本质区别。    蓝牙(Bluetooth)  是一种近距离、低功耗的无线通讯

    05-27
  • 应该如何考虑ESD保护方式

      “双二极管”是IC片上与片外最常见的ESD保护方法之一。该方法易于实现,占用面积最小,寄生电容小,漏电流也低,优点很多。  但是,对于物联网应用,“双二极管

    05-26
  • 一文详细分享蓝牙发展史及各版本技术特点

      自2014年12月发布蓝牙4.2标准以来,时隔1年多后,蓝牙技术联盟(BluetoothSpecialInterestGroup)于本周五透露新一代蓝牙标准

    05-26
  • 一文详解zigbee协议栈各层的系统

      随着传感器网络的大肆应用;随着物联网概念的爆发;随着通信技术的迅速发展,人们提出了在自身附近几米范围内通信的要求,这样就出现了个人区域网络PAN(Perso

    05-26
  • 了解智能家居技术的几个标准

      家里不同的智能家居设备为什么可以在同一个环境下工作,是因为有Wi-Fi吗?如果在外面没有Wi-Fi的情况下,为什么还可以看到家里的情况?在采访智能家居企业的

    05-25
  • 如何使用Dialog GreenPAK SLG46620V创建智能数字调光器设计

    术语和定义CMIC:可配置混合信号IC(ConfigurableMixed-SignalIntegratedCircuits)UART:通用异步收发器(Univ

    05-24
下载排行榜
更多
广告