BLE学习路线

第一周

准备工作,环境搭建
根据自动安装文档,安装nRF Connect for Desktop,nRF Command Line Tools,VScode,并下载最新版本SDK(2.4.0) https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/getting_started/assistant.html
Nordic资料入口:https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/index.html
快速入门文档:https://www.cnblogs.com/iini/p/14174427.html
Nordic开发者论坛:https://devzone.nordicsemi.com

目标:编译并成功下载第一个例程:nrf/samples/bluetooth/peripheral_uart/

第二周

调试跑通peripheral_uart例程,手机端nrf connect,PC端串口工具,通过5340DK板蓝牙完成双向透传数据
可以在prj.conf中设置CONFIG_BT_NUS_SECURITY_ENABLED=n,不加密
结合例程学习文档,初步了解BLE广播,连接,协议栈概念: https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/samples/bluetooth/peripheral_uart/README.html
https://www.cnblogs.com/iini/p/8969828.html
https://www.cnblogs.com/iini/p/12334646.html
https://www.cnblogs.com/iini/p/8972635.html

目标
    学会使用nrf connect工具
    理清peripheral_uart例程的应用层通信过程,对蓝牙通信有一个初步的认识
    根据自己理解,在周报中回答下面问题:例程中5340DK板是如何通过蓝牙发送数据给手机的?蓝牙连接后,手机接收5340DK板发送的蓝牙数据前需要做什么?手机如何通过蓝牙发送数据给5340DK板的?

第三周

广播专项,调试Multiple advertising sets例程,例程中使用宏CONFIG_BT_EXT_ADV开启了两个广播,一个可连接,另一个不可连接。重点只需关注可连接广播
学习广播相关文档:
https://blog.csdn.net/Life_Maze/article/details/81395910?locationNum=9&fps=1
https://blog.csdn.net/weixin_40108380/article/details/105648788
https://www.cnblogs.com/Free-Thinker/p/11375840.html
https://www.jianshu.com/p/c220aacccc0b

学习蓝牙项目应用中如何设置广播参数及广播数据,扫描响应数据。使用nrf connect扫描周边Anona设备广播并查看广播数据内容,与代码形成对应
将Peripheral UART例程复制重命名一份到同一SDK目录,在复制的工程中做修改:
动态切换广播间隔,上电或者BLE断连后快广播间隔100ms,1分钟后切换为慢广播间隔1S,建立连接后广播停止。在nrf connect观察是否设置成功

1分钟定时可参考的方法:1.在任务中delay(k_sleep)2.使用zephyr的工作队列work
queue,延时执行K_WORK_DELAYABLE_DEFINE 3.使用zephyr软定时器k_timer

zephyr工作队列的使用:https://blog.csdn.net/iotisan/article/details/79997755
zephyr定时器的使用:https://blog.csdn.net/iotisan/article/details/80140104
​设置蓝牙发射功率为-3dbm,并将发射功率Tx power放在广播数据0x0A字段。使用nrf connet观察设置后与默认参数0dbm对比,广播和连接通信时的RSSI变化
学习BLE MAC地址类型,主要了解两种MAC地址Static Device Address和Public Device Address,设置mac地址类型Public Device Address,值为:5CE50CFBD5D6,通过nrf connect扫描观察mac地址是否设置成功,并将mac地址以HEX小端格式放在广播数据0xFF字段Manufacturer

第四周

学习Debug,积累解决死机类问题经验。设置CONFIG_RESET_ON_FATAL_ERROR=n,在MCU halt后通过查看backtrace,设置断点,单步调试等方式,查找到具体hardfault或assert的地方,总结原因
zephyr线程学习
https://blog.csdn.net/iotisan/article/details/79718117
https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/kernel/services/threads/index.html
分别使用k_thread_create和K_THREAD_DEFINE各创建一个自定义线程,通过debug方式了解K_THREAD_DEFINE方式创建线程是在哪里及什么时候创建的,简要输出zephyr系统的启动流程(系统从上电/复位到运行main()函数之前经历了什么过程)
学习zephyr信号量,事件,消息队列的使用
https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/kernel/services/synchronization/semaphores.html
https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/kernel/services/synchronization/events.html
https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/zephyr/kernel/services/data_passing/message_queues.html

分别使用sem,event,message
queque三种方式,将zephyr定时器回调同步到自定义的Thread中处理:切换BLE广播。比较sem,event,message
queque各自特点,本需求比较适合用什么方式?在中断中使用这三种通信方式有什么条件?

第五周

服务和特征值的创建和通信,学习门锁maismart_gatt_service_register创建service和Characteristic及使用
在之前的调试例程中,新增1个service,4个Characteristic,UUID自定义,尝试分别设置16位和128位UUID,转换关系128位UUID=UUID16+Base

特征值1:read,nrf connect读取值,初始值0,每读一次加1
特征值2:write&notify 1s一次定时notify上报当前时间戳,k_uptime_get获取上电后的时间偏移,write通过nrf connect手动同步初始时间戳
特征值3:write 自定义两三条简单协议指令(HEX或字符串),通过nrf connect手动发给DK板
特征值4:notify 对收到的指令进行对应回复

上面两个notify发送的数据放到一个message queque里,深度10,统一管理,上一个notify完成回调后发送下一包。即在一个线程里取message queque数据发送,notify cb通过信号量方式传递
调试时记录4个特征值通信属性在属性表里对应的handle值

第六周

配对pair与绑定bind的学习:https://www.cnblogs.com/iini/p/12801242.html
调试例程nrf/samples/bluetooth/peripheral_bms/,使用nrf connect进行Bond及删除Bond,通过例程的Bond Management服务,发送对应指令调试
使用安卓手机设置-蓝牙进行配对/取消配对
尝试在例程中增加和修改功能:
在5340 DK端已绑定的情况下,手机主机端再次来配对时拒绝(其它主机连接后来进行配对或手机单方面删除了绑定信息再次来配对)
长按按键可以删除5340 DK端的绑定信息,以便重新绑定

思考总结:1.配对及绑定的主要概念,目的
2.在配对绑定的基础上,通信数据如何防重放?重放:比如手机App传输给门锁一条BLE开锁指令进行开锁,被第三方通过抓取空中包的方式获取到,虽然指令数据是加密的,但把同样的加密数据再次发给门锁

第七/八周

BLE主从通信,调试测试例程Central UART,需要另一个DK板做从机
熟悉主从双方流程:扫描-发起连接-连接成功-协商MTU-发现服务-协商连接参数
学习HM-19 dongle做主机使用,与之前自建的服务进行通信
学习主机扫描间隔和扫描窗口设置,不同主从连接间隔的设置,连接间隔的作用, 不同MTU设置及作用
快速连接,快速通信:在从机正常广播情况下,主机上电运行后跳过发起连接前的扫描过程,直接通过MAC地址进行连接从机;跳过服务发现过程,直接使用从机特征值属性表的handle直接通信

  • 47
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知名社畜L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值