目录
前言
之前我已经陆续出了 3 篇蓝牙收和 2 篇蓝牙发的视频,将蓝牙 BLE 广播收发的协议栈讲的非常清楚了:
图片来源:<https://www.beautifulzzzz.com/gnuradio/>
这里将其单独拎出来组成一个 BLE + SDR 的专题,用于汇总关于蓝牙协议栈在 SDR 上实现的各种技术点。
一、开题之作
为了方便后续代码构建,我将之前零零散散的关于 BLE+SDR 的相关工程代码,全部合并到一个独立仓库中 auto_test_tool。
^PS: 这个仓库是之前我的一个很老的仓库,用于编写一些简单的自动化测试的 python 串口工具,因为里面有些组件整合适合 BLE 广播包的解析与发送,因此就在这里附加了。^
为了防止后续的课程对代码修改导致老课程不方便复现,我这里每个课程都会生成一个 tag,这样每个课程都可以拉取对应的 tag 来还原现场。比如,我们这个开题之作采用的是 ble_course_1
,因此可以使用下面三种方式拉取代码:
方法 | 命令 | 备注 |
---|---|---|
https | git clone --branch ble_course_1 https://github.com/nbtool/auto_test_tool.git |
小白懂 git 但不懂 ssh |
ssh | git clone --branch ble_course_1 [email protected]:nbtool/auto_test_tool.git |
既懂 git 又懂 ssh |
点击下载 | https://github.com/nbtool/auto_test_tool/releases/tag/ble_course_1 | 啥都不懂 |
OK,开题相关的铺垫到此结束,那么硬核的东西也不能少:
如上图,我将之前的所有 BLE 广播包接收教程的代码全部重新整理,形成上图所示能兼容 hackrf、plutosdr、limesdr 和 zmq 等不同 SDR 源的蓝牙广播接收解析系统(抓包器)。
具体的教程细节见:app/app_sdr_ble_adv_rx
二、动态发送 BLE 广播包
上节我们将 BLE 广播包接收代码进行全部整理,本节我们将 BLE 广播包发送代码进行全部整理,实现每隔 1S 更换广播内容,并从零开始合成 BLE 广播 IQ 数据,然后调用 SDR 发送,实现 BLE 动态广播能力:
具体的教程细节见:app/app_sdr_ble_adv_tx
三、基于 PlutoSDR 实现 BLE 广播包的收发一体能力
本节将前两节的知识结合起来,借助具有全双工双收双发能力的 PlutoSDR 实现 BLE 广播包收发一体能力:
具体的教程细节见:app/app_sdr_ble_adv_tx_rx
四、基于 PlutoSDR 的 BLE 广播包的收发实现接入涂鸦智能 APP
本节在上一节的基础上更进一步:通过叠加 TuyaOS BeaconMesh 上层应用协议,最终实现从电磁波开始,到全双工蓝牙广播收发接入涂鸦智能,变成一个物联网 BeaconMesh 灯节点:
具体的教程细节见: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 小工具教程:
基础块教程:
视频和博客
: 如果觉得不错,帮忙点个支持哈~