[SDR] 蓝牙专项教程 —— 从 0 到 1 教小白基于 SDR 编写蓝牙协议栈
前言
之前我已经陆续出了 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 git@github.com: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 小工具教程:
基础块教程:
视频和博客


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

[SDR] 蓝牙专项教程 —— 从 0 到 1 教小白基于 SDR 编写蓝牙协议栈的更多相关文章
- Android蓝牙开发教程(三)——蓝牙设备相互通讯
在上一篇中已经介绍如何连接我们搜索到的蓝牙设备,如果你还没阅读过,建议先看看上一篇文章Android蓝牙开发教程(二)——连接蓝牙设备 在上一篇文章中,无论是自动连接还是被动连接,连接成功后,都是将获 ...
- ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView
原文地址: ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http:/ ...
- ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map
原文地址: ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NE ...
- ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置
原文地址: ArcGIS Runtime for Android开发教程V2.0(2)开发环境配置 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.c ...
- ArcGIS Runtime for Android开发教程V2.0(1)基本概念
原文地址: ArcGIS Runtime for Android开发教程V2.0(1)基本概念 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csd ...
- 《Ruby语言入门教程v1.0》学习笔记-01
<Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...
- yii2 支付宝支付教程 [ 2.0 版本 ]
yii2 支付宝支付教程 [ 2.0 版本 ] 支付宝支付流程个人理解大致就这三步1.前台页面将支付信息数据通过立即支付按钮 ajax提交到订单处理层2.在订单处理层引用支付宝的接口 将支付数据写入 ...
- [转]Tomcat9.0安装教程 Tomcat9.0环境变量配置教程
[转]Tomcat9.0安装教程 Tomcat9.0环境变量配置教程 [转]超详细MySQL安装及基本使用教程
- mysql8.0.20安装教程,mysql下载安装教程8.0.20
mysql8.0.20下载安装教程 mysql8.0.20安装教程 mysql安装包+mysql学习视频+mysql面试指南视频教程 下载地址: 链接:https://pan.baidu.com/s ...
- [IOT] 自制蓝牙工牌办公室定位系统 (二)—— 基于ESP32的蓝牙信号扫描系统
前面章节: 自制蓝牙工牌办公室定位系统 (一)-- 阿里物联网平台概览及打通端到云(硬核·干货) 目录: 1.蓝牙广播简介 2.蓝牙扫描简介 3.基于蓝牙广播和蓝牙扫描常见应用 4.ESP32 ...
随机推荐
- weixueyuan-Nginx Web服务4
https://www.weixueyuan.net/nginx/web/ Nginx静态资源服务器搭建 HTML 是一种标记语言,提供 HTML 文件读取是静态服务器最基本的功能,静态服务器的配置样 ...
- w3cschool-Go 教程
https://www.w3cschool.cn/go/ Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pi ...
- 足球预测:将六场预测法引入AI能增加预测准确率么?
前言 足球预测的历史可以追溯到200多年前,对足球比赛的结果预测一直是人们所津津乐道的话题.你有了解过这期间涌现过多少足球预测的方法么?过去的人们迫于工具和数据的限制,始终不能高概率的预测足球赛事,但 ...
- moectf2023 web wp
gas!gas!gas! 直接跑脚本 import requests session=requests.Session() url="http://127.0.0.1:14447" ...
- 0101-win10 jkd配置注意事项
更换新的电脑预装win10家庭版,根据常规方法配置jdk8后运行javac提示:不是内部或外部命令,也不是可运行的程序或批处理文件. 1 设置变量classpath时前面有个点(完成这一步后javac ...
- 硬件设计:逻辑电平--差分信号(PECL、LVDS、CML)电平匹配
参考资料:逻辑电平设计规范 PECL电平匹配设计指南 CML信号与LVPECL信号的连接 硬件设计:逻辑电平--CML 硬件设计:逻辑电平--ECL/PECL/LVPECL 硬件设计:逻辑电平--LV ...
- mysql之事务范例
package com.yeyue.lesson04; import com.yeyue.lesson02.JdbcUtils; import java.sql.Connection; import ...
- 分合之道:最小生成树的 Kruskal 与 Prim 算法
最小生成树问题 想象你是一位城市规划师,面前摊开一张地图,标记着散落的村庄.你的任务是用最经济的成本,在村庄间铺设道路,让所有村庄互通.这个问题看似简单,却隐藏着一个经典的数学命题:如何在一张&quo ...
- MacOS环境配置Homebrew
Homebrew笔记 1. 介绍 官网:https://brew.sh/ 对于习惯了使用命令来完成一切的程序员来说,安装软件这种小事,自然是能够用命令解决,就不用图形界面选择.但是在 Linux 中, ...
- Linux服务器快速卸载安装node环境(简单上手)
这篇文章主要介绍了Linux服务器快速卸载安装node环境(简单上手) 1.先卸载npm sudo npm uninstall npm -g 2.卸载node yum remove nodejs np ...