智能手环开发之 实现蓝牙(BLE)基本功能
0.前言
随着医疗健康、可穿戴设备的发展,华为、小米、vivo等大厂都在做智能手环、手表等可穿戴设备。未来,蓝牙设备的开发也会越来越多。
关于蓝牙BLE起源发展,各种类型蓝牙芯片介绍,以及蓝牙手环的硬件开发等在之前的文章已经有过详细介绍。
本文主要介绍蓝牙手环开发中,如何构建一个最小的BLE系统框架,以及使用的模块。
总结一句话:能让芯片的蓝牙协议栈跑起来,手机能连接上蓝牙手环设备。
要让蓝牙功能跑起来,需要将注意力放在BLE开发的程序框架和模块的整体功能上,之后再深入学习各个模块。
1.BLE程序框架
智能手环的核心除了各种传感器算法,最重要的就是蓝牙了。一个BLE程序通常至少包含4个必要部分:系统初始化、启动、空闲管理和事件处理。如下图所示。
(1)系统初始化
这个系统初始化看起来很简单,小学生貌似都能懂,不就是初始化系统吗?
的确是初始化系统,那需要初始化什么呢?
a.日志打印初始化:说白了就是为了方便我这种开发狗看上电启动的Log信息以及后续输出调试信息。不是必须的,但很重要。
b.APP定时器初始化:初始化APP定时器,用于实现各种定时任务。很重要。
c.硬件初始化:如指示灯初始化、OLED屏幕初始化、电源管理初始化等。
d.BLE相关初始化:包含蓝牙协议栈初始化、广播、首选连接参数、GAP层、服务等初始化配置。这部分初始化完成后,整个BLE部分的程序就会按照我们自己设置的参数运行。
(2)启动
对于外围设备来说,如手环,启动的是广播,启动之后系统开始按照配置的广播间隔开始发送广播,等待中心设备连接,也就是等待手机连接。
对于中心设备(手机)而言,启动的是扫描,扫描周围的蓝牙设备。
(3)空闲管理
空闲管理说白了就是为了省电,实现低功耗。你戴个手环,总不希望天天充电吧。空闲管理就是在你不看手环时候让手环进入到低功耗模式。若有事件唤醒,如抬手腕亮屏等,就会恢复工作模式。
若程序中启用了日志打印功能,空闲管理还处理挂起的日志信息。
(4)事件处理
应用程序通过注册“事件监听”来监视BLE协议栈事件。开发过Android就比较容易理解,如Button就需要监听,看看Button是否按下等。
蓝牙中如外围设备和中心设备连接后,SoftDevice会提交 “连接事件”,应用程序会在事件处理函数中接收该事件并执行操作。
对于一开始接触蓝牙开发的人而言,看完这些感到一丝丝懵逼也是很正常的。开发过蓝牙的话,这些就很容易理解了。
没关系,下面开始实战。
本次开发选用 Nordic nRF52832蓝牙芯片,相关开发板某宝也有很多卖。关于Nordic芯片之前的文章有过介绍,翻阅历史文章。
2.先看Main函数
Main函数中主要调用各个模块的初始化函数,如硬件初始化、IIC屏幕初始化等,这些模块初始化本文暂不深入,主要是讲蓝牙架构。其中最重要的是蓝牙初始化。
弄懂了蓝牙初始化,蓝牙就能跑起来。
int main(void){//Log 初始化APP_ERROR_CHECK(NRF_LOG_INIT(NULL));NRF_LOG_DEFAULT_BACKENDS_INIT();NRF_LOG_INFO("log init ok.");NRF_LOG_FLUSH(); //硬件初始化,APP timer,led,power Manager等my_ble_init_harder();//twi初始化,iic设备扫描,iic_sacn.ciic_scan_address();nrf_delay_ms(2000);//蓝牙初始化my_ble_init();}//蓝牙初始化函数void my_ble_init(void){NRF_LOG_INFO("Hello world BLE developer\n");NRF_LOG_INFO("BLE Template example:Log use uart as output terminal");//初始化协议栈ble_stack_init();NRF_LOG_INFO("ble_stack_init()...OK");//配置GAP参数gap_params_init();NRF_LOG_INFO("gap_params_init()...OK");//初始化GATTgatt_init();NRF_LOG_INFO("gatt_init()...OK");//初始化广播advertising_init();NRF_LOG_INFO("advertising_init()...OK");//初始化服务services_init();NRF_LOG_INFO("services_init()...OK");//连接参数协商初始化conn_params_init();NRF_LOG_INFO("conn_params_init()...OK");//ble_address_change_test();//启动app time定时器NRF_LOG_INFO("BLE HRS example started."); application_timers_start();//启动广播NRF_LOG_INFO("advertising_starting...");advertising_start();//主循环while(true){//OLED 显示my_oled_iic();//处理挂起的LOG和运行电源管理idle_state_handle();}}
3.蓝牙初始化
如上面代码,蓝牙初始化,包括初始化蓝牙协议栈,配置GAP参数,初始化GATT,初始化广播,初始化服务,连接参数初始化,启动广播,主循环。完成这些,手环蓝牙芯片就能够发广播了,打开手机蓝牙就能够搜索到。
当然,这些初始化函数也是有很多内容的,也是非常关键的。实际蓝牙手环的代码复杂的多,需要花时间和精力去探索。
4.总结
至于每个初始化函数的代码怎么写,还有广播参数等等,后面文章会逐一介绍。
毕竟一下子写的太长,也没人有耐心看下去。本文主要介绍蓝牙程序框架,以及跑起整个蓝牙时候大致的流程。
欲穷千里目,更上一层楼。了解整个架构,后续开发会轻松许多。
白浪介绍:
(1)关于射频、微波、天线、无线通信、智能硬件、软件编程、渗透安全、人工智能、区块链,Java、Android、C/C++、python等综合能力的培养提升。
(2)各种学习资料、学习软件分享。
(3) 关注后,查看往期博客内容,会有更多技术文章
========******=========******========******=========******==========
智能手环开发之 实现蓝牙(BLE)基本功能相关推荐
- 物联网开发笔记(53)- 使用Micropython开发ESP32开发板之蓝牙BLE通信
一.目的 这一节我们学习如何使用我们的ESP32开发板通过蓝牙和手机进行通信. 二.环境 ESP32 + 手机(笔者用的小米10) + Thonny IDE 三.蓝牙介绍 这个知识大家自行百度吧,这里 ...
- Gaia蓝牙音箱android开发,Windows7系统配置蓝牙模块GAIA功能的方法
蓝牙是一种短距离无线电技术,如今应用广泛,而GAIA功能是基于spp的蓝牙通讯协议,当开启这个功能之后,就可以在其他设备终端比如手机上面控制蓝牙模块,并能够获取蓝牙模块的状态,有时候要对GAIA功能进 ...
- Gaia蓝牙音箱android开发,win10系统配置蓝牙模块GAiA功能的图文技巧
有关win10系统配置蓝牙模块GAiA功能的操作方法想必大家有所耳闻.但是能够对win10系统配置蓝牙模块GAiA功能进行实际操作的人却不多.其实解决win10系统配置蓝牙模块GAiA功能的问题也不是 ...
- 5、基于51单片智能手环设计心率计蓝牙app计步器温湿度设计
毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.程序源码 六.资料包括 摘要 计步器是一种颇受欢迎的日常锻炼进度监控器,可以激励人们挑 ...
- 微信小程序蓝牙BLE开发实战——案例(二)
微信小程序蓝牙BLE开发实战(二) 上篇主要介绍在开发过程中应用到相关API操作.接下来介绍个人在项目开发中应用蓝牙BLE一些事情. 由于时间比较仓促, 有些注释没那么详细.请理解~写的不好欢迎各位大 ...
- RISC-V MCU应用之智能手环
的卢CH582M,其采用沁恒自研RISC-V微处理器"青稞V4",片上集成2Mbps低功耗蓝牙,兼容Bluetooth® low energy 5.3,另外配备SPI.I²C.RT ...
- 智能手环功能模块设计_智能手环、功能模块以及智能手表的制作方法
智能手环.功能模块以及智能手表的制作方法 [技术领域] [0001]本实用新型涉及通信领域,具体而言,涉及一种智能手环.功能模块以及智能手表. [背景技术] [0002]伴随着无线通信.传感器和处理器 ...
- 计算机考试可以带手环吗,注意这四点,分分钟学会选购智能手环!
注意这四点,分分钟学会选购智能手环! 2021-01-02 21:15:23 0点赞 0收藏 0评论 2020年,是线上云技术加速发展的一年,也是各大数码厂商转战智能穿戴市场的一年,而在这些市场现象的 ...
- 【开发教程10】疯壳·开源蓝牙心率防水运动手环-蓝牙 BLE 收发
开源蓝牙心率防水运动手环 --疯壳·智能穿戴开发系列 蓝牙 BLE 收发 1相关简介 DA14580 内部集成了射频模块,同时官方也提供了一套 SDK,里面包含了蓝牙协议栈部分.本节 ...
- 8.0ble设备 android_【胖猴小玩闹】智能门锁与BLE设备安全Part 4:一次BLE智能手环的小玩闹...
1. 背景 在2019年的某个月份,笔者的朋友给笔者送来了一个手环,让笔者搞一搞.详细询问之后,笔者理清了具体情况:这个手环会收集佩戴者的步数并上报给公司,公司认为步数不够的员工显然是没有业绩的.一个 ...
最新文章
- android的支付宝sdk 提示系统繁忙 请稍后再试_《活动运营中防系统扑街指南》
- apscheduler 绿色版
- 数据:ContentResolver类
- FreeSql (四)实体特性 Fluent Api
- java+jxls利用excel模版进行导出
- Mybatis-no getter for property named 'col_name' in 'class com.xxx.onebean'
- Eclipse打开报错解决方案
- PS用套索工具抠图,并修改背景颜色
- 电子负载的 Von/Voff 设置
- MapboxGL 柱状图的绘制与展示
- 软件项目管理三国启示录01 群雄争霸之项目经理的自我修养
- ozip解密_【ozip转换解包】ROM制作工具已适配机型列表,全网最全!
- 函数(详解)——C语言
- Golang语言快速上手到综合实战视频教程
- 解决SQL Server占用服务器内存过高问题
- 计算机毕业设计SSMJava远程健康数据管理系统【附源码数据库】
- 2021年线上线下融合会议需求增长,Hilton EventReady Hybrid Solutions将启动
- 个人记账软件(团队成员介绍和软件介绍)
- 开源代码分析技巧之四——国外技术社区提问
- 你觉得java与嵌入式学哪个好?