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)基本功能相关推荐

  1. 物联网开发笔记(53)- 使用Micropython开发ESP32开发板之蓝牙BLE通信

    一.目的 这一节我们学习如何使用我们的ESP32开发板通过蓝牙和手机进行通信. 二.环境 ESP32 + 手机(笔者用的小米10) + Thonny IDE 三.蓝牙介绍 这个知识大家自行百度吧,这里 ...

  2. Gaia蓝牙音箱android开发,Windows7系统配置蓝牙模块GAIA功能的方法

    蓝牙是一种短距离无线电技术,如今应用广泛,而GAIA功能是基于spp的蓝牙通讯协议,当开启这个功能之后,就可以在其他设备终端比如手机上面控制蓝牙模块,并能够获取蓝牙模块的状态,有时候要对GAIA功能进 ...

  3. Gaia蓝牙音箱android开发,win10系统配置蓝牙模块GAiA功能的图文技巧

    有关win10系统配置蓝牙模块GAiA功能的操作方法想必大家有所耳闻.但是能够对win10系统配置蓝牙模块GAiA功能进行实际操作的人却不多.其实解决win10系统配置蓝牙模块GAiA功能的问题也不是 ...

  4. 5、基于51单片智能手环设计心率计蓝牙app计步器温湿度设计

    毕设帮助.开题指导.技术解答(有偿)见文末. 目录 摘要 一.硬件方案 二.设计功能 三.实物图 四.原理图 五.程序源码 六.资料包括 摘要 计步器是一种颇受欢迎的日常锻炼进度监控器,可以激励人们挑 ...

  5. 微信小程序蓝牙BLE开发实战——案例(二)

    微信小程序蓝牙BLE开发实战(二) 上篇主要介绍在开发过程中应用到相关API操作.接下来介绍个人在项目开发中应用蓝牙BLE一些事情. 由于时间比较仓促, 有些注释没那么详细.请理解~写的不好欢迎各位大 ...

  6. RISC-V MCU应用之智能手环

    的卢CH582M,其采用沁恒自研RISC-V微处理器"青稞V4",片上集成2Mbps低功耗蓝牙,兼容Bluetooth® low energy 5.3,另外配备SPI.I²C.RT ...

  7. 智能手环功能模块设计_智能手环、功能模块以及智能手表的制作方法

    智能手环.功能模块以及智能手表的制作方法 [技术领域] [0001]本实用新型涉及通信领域,具体而言,涉及一种智能手环.功能模块以及智能手表. [背景技术] [0002]伴随着无线通信.传感器和处理器 ...

  8. 计算机考试可以带手环吗,注意这四点,分分钟学会选购智能手环!

    注意这四点,分分钟学会选购智能手环! 2021-01-02 21:15:23 0点赞 0收藏 0评论 2020年,是线上云技术加速发展的一年,也是各大数码厂商转战智能穿戴市场的一年,而在这些市场现象的 ...

  9. 【开发教程10】疯壳·开源蓝牙心率防水运动手环-蓝牙 BLE 收发

    开源蓝牙心率防水运动手环 --疯壳·智能穿戴开发系列 蓝牙 BLE 收发 1相关简介          DA14580 内部集成了射频模块,同时官方也提供了一套 SDK,里面包含了蓝牙协议栈部分.本节 ...

  10. 8.0ble设备 android_【胖猴小玩闹】智能门锁与BLE设备安全Part 4:一次BLE智能手环的小玩闹...

    1. 背景 在2019年的某个月份,笔者的朋友给笔者送来了一个手环,让笔者搞一搞.详细询问之后,笔者理清了具体情况:这个手环会收集佩戴者的步数并上报给公司,公司认为步数不够的员工显然是没有业绩的.一个 ...

最新文章

  1. android的支付宝sdk 提示系统繁忙 请稍后再试_《活动运营中防系统扑街指南》
  2. apscheduler 绿色版
  3. 数据:ContentResolver类
  4. FreeSql (四)实体特性 Fluent Api
  5. java+jxls利用excel模版进行导出
  6. Mybatis-no getter for property named 'col_name' in 'class com.xxx.onebean'
  7. Eclipse打开报错解决方案
  8. PS用套索工具抠图,并修改背景颜色
  9. 电子负载的 Von/Voff 设置
  10. MapboxGL 柱状图的绘制与展示
  11. 软件项目管理三国启示录01 群雄争霸之项目经理的自我修养
  12. ozip解密_【ozip转换解包】ROM制作工具已适配机型列表,全网最全!
  13. 函数(详解)——C语言
  14. Golang语言快速上手到综合实战视频教程
  15. 解决SQL Server占用服务器内存过高问题
  16. 计算机毕业设计SSMJava远程健康数据管理系统【附源码数据库】
  17. 2021年线上线下融合会议需求增长,Hilton EventReady Hybrid Solutions将启动
  18. 个人记账软件(团队成员介绍和软件介绍)
  19. 开源代码分析技巧之四——国外技术社区提问
  20. 你觉得java与嵌入式学哪个好?

热门文章

  1. 带宽与码元的关系_比特率与带宽什么关系
  2. 在线2进制8进制10进制16进制进制转换工具
  3. AJAX初窥门径教程
  4. xamp配置虚拟域名_如何下载,安装和配置XAMP以创建网页?
  5. 有两个瓶子,一个瓶子是5升_隐藏的功能,装在瓶子中的消息和痴呆的面包师。...
  6. 2010提升你幽默感的经典短句
  7. Swoole vs Workman
  8. 使用uniapp实现全局悬浮按钮(可拖动)
  9. (一)使用 Sliced Sprite 制作 UI 图像
  10. discuz 论坛不同版块使用不同模板