找回密码
 立即注册
首页 业界区 业界 [SDR] 蓝牙专项教程 —— 从 0 到 1 教小白基于 SDR 编 ...

[SDR] 蓝牙专项教程 —— 从 0 到 1 教小白基于 SDR 编写蓝牙协议栈

懵诬哇 2025-6-3 10:52:18
目录



    • 前言
    • 一、开题之作
    • 二、动态发送 BLE 广播包
    • 三、基于 PlutoSDR 实现 BLE 广播包的收发一体能力
    • 四、基于 PlutoSDR 的 BLE 广播包的收发实现接入涂鸦智能 APP

  • 教程列表

    • 基础教程:
    • 综合教程:
    • SDR 小工具教程:
    • 基础块教程:

  • 视频和博客


前言

之前我已经陆续出了 3 篇蓝牙收和 2 篇蓝牙发的视频,将蓝牙 BLE 广播收发的协议栈讲的非常清楚了:
1.png

图片来源:https://www.beautifulzzzz.com/gnuradio/
2.png
3.png
4.png
5.png
6.png

这里将其单独拎出来组成一个 BLE + SDR 的专题,用于汇总关于蓝牙协议栈在 SDR 上实现的各种技术点。

一、开题之作

为了方便后续代码构建,我将之前零零散散的关于 BLE+SDR 的相关工程代码,全部合并到一个独立仓库中 auto_test_tool。
PS: 这个仓库是之前我的一个很老的仓库,用于编写一些简单的自动化测试的 python 串口工具,因为里面有些组件整合适合 BLE 广播包的解析与发送,因此就在这里附加了。
为了防止后续的课程对代码修改导致老课程不方便复现,我这里每个课程都会生成一个 tag,这样每个课程都可以拉取对应的 tag 来还原现场。比如,我们这个开题之作采用的是 ble_course_1,因此可以使用下面三种方式拉取代码:
方法命令备注httpsgit clone --branch ble_course_1  https://github.com/nbtool/auto_test_tool.git小白懂 git 但不懂 sshsshgit clone --branch ble_course_1 git@github.com:nbtool/auto_test_tool.git既懂 git 又懂 ssh点击下载https://github.com/nbtool/auto_test_tool/releases/tag/ble_course_1啥都不懂
OK,开题相关的铺垫到此结束,那么硬核的东西也不能少:
7.png

如上图,我将之前的所有 BLE 广播包接收教程的代码全部重新整理,形成上图所示能兼容 hackrf、plutosdr、limesdr 和 zmq 等不同 SDR 源的蓝牙广播接收解析系统(抓包器)。
具体的教程细节见:app/app_sdr_ble_adv_rx

二、动态发送 BLE 广播包

上节我们将 BLE 广播包接收代码进行全部整理,本节我们将 BLE 广播包发送代码进行全部整理,实现每隔 1S 更换广播内容,并从零开始合成 BLE 广播 IQ 数据,然后调用 SDR 发送,实现 BLE 动态广播能力:
8.png

具体的教程细节见:app/app_sdr_ble_adv_tx

三、基于 PlutoSDR 实现 BLE 广播包的收发一体能力

本节将前两节的知识结合起来,借助具有全双工双收双发能力的 PlutoSDR 实现 BLE 广播包收发一体能力:
9.png

具体的教程细节见:app/app_sdr_ble_adv_tx_rx

四、基于 PlutoSDR 的 BLE 广播包的收发实现接入涂鸦智能 APP

本节在上一节的基础上更进一步:通过叠加 TuyaOS BeaconMesh 上层应用协议,最终实现从电磁波开始,到全双工蓝牙广播收发接入涂鸦智能,变成一个物联网 BeaconMesh 灯节点:
10.png

具体的教程细节见:app/app_sdr_tuya_beacon_node


教程列表

基础教程:


  • [1]. GNU Radio 系列教程(一) —— 什么是 GNU Radio
  • [2]. GNU Radio 系列教程(二) —— 绘制第一个信号分析流程图
  • [3]. GNU Radio 系列教程(三) —— 变量的使用
  • [4]. GNU Radio 系列教程(四) —— 比特的打包与解包
  • [5]. GNU Radio 系列教程(五) —— 流和向量
  • [6]. GNU Radio 系列教程(六) —— 基于层创建自己的块
  • [7]. GNU Radio 系列教程(七)—— 创建第一个块
  • [8]. GNU Radio 系列教程(八)—— 创建能处理向量的 Python 块
  • [9]. GNU Radio 系列教程(九)—— Python 块的消息传递
  • [10]. GNU Radio 系列教程(十)—— Python 块的 Tags
  • [11]. GNU Radio 系列教程(十一)—— 低通滤波器
  • [12]. GNU Radio 系列教程(十二)—— 窄带 FM 收发系统(基于ZMQ模拟射频发送)
  • [13]. GNU Radio 系列教程(十三)—— 用两个 HackRF 实现 FM 收发
  • [14]. GNU Radio 系列教程(十四)—— GNU Radio 低阶到高阶用法的分水岭 ZMQ 的使用详解
  • [15]. GNU Radio 系列教程(十五)—— GNU Radio GFSK 模块
  • [16]. GNU Radio 系列教程(十六)—— GNU Radio 的调试利器 Message Strobe
  • [17]. GNU Radio 系列教程(十七)—— GNU Radio PDU TX 利用三个块实现最小的数据包(帧头+数据+校验)
  • [18]. GNU Radio 系列教程(十八)—— GNU Radio PDU TX 将帧头和 payload 消息合并为数据帧
  • [19]. GNU Radio 系列教程(十九)—— GNU Radio PDU TX 将最小数据帧实施脉冲突发整形填充 --> 让帧更稳定
  • [20]. GNU Radio 系列教程(二十)—— GNU Radio PDU TX 根升余弦深度介绍&发送数据帧的收尾之作
  • [21]. GNU Radio 系列教程(二一)—— GNU Radio PDU RX 利用相关性估计器寻找数据帧的起始位置
  • [22]. GNU Radio 系列教程(二二)—— GNU Radio PDU RX 利用多相时钟同步块实现消除时钟偏移
  • [23]. GNU Radio 系列教程(二三)—— GNU Radio PDU RX 利用自适应线性均衡器消除 ISI
  • [24]. GNU Radio 系列教程(二四)—— GNU Radio PDU RX 利用 Costas Loop 校正相位和频率偏移
  • [25]. GNU Radio 系列教程(二五)—— 硬核,基于通信原理设计一个文件传输系统
  • [26]. GNU Radio 系列教程(二六)—— 开胃菜,hackrf 发送 ble 广播包的简单 DEMO

综合教程:


  • [1]. SDR 教程实战(一) —— 利用 GNU Radio + HackRF 做 FM 收音机
  • [2]. SDR 教程实战(二) —— 利用 GNU Radio + HackRF 做蓝牙定频测试工具(超低成本)
  • [3]. SDR 教程实战(三) —— 利用 GNU Radio + HackRF + WireShark 做蓝牙抓包器(超低成本)
  • [4]. SDR 教程实战(四) —— 利用 GNU Radio + HackRF 手把手深入了解蓝牙协议栈(从电磁波 -> 01数据流 -> 蓝牙数据包)
  • [5]. SDR 教程实战(五) —— 利用 GNU Radio + LimeSDR+ WireShark 做蓝牙抓包器(上上个视频使用 HackRF)
  • [6]. SDR 教程实战(五) —— 利用两个 hackrf 实现大文件(视频)高速传输

SDR 小工具教程:


  • [1]. SDR 小工具--一分钟将吃灰的 hackrf 化作价值数千元的频谱分析仪

基础块教程:


  • [1]. GNU Radio 块介绍(一)-- GNU Radio 的绝对值(Abs)块

视频和博客

11.png

12.png


: 如果觉得不错,帮忙点个支持哈~  
13.png


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册