[SDR] 藍(lán)牙專項(xiàng)教程 —— 從 0 到 1 教小白基于 SDR 編寫藍(lán)牙協(xié)議棧
前言
之前我已經(jīng)陸續(xù)出了 3 篇藍(lán)牙收和 2 篇藍(lán)牙發(fā)的視頻,將藍(lán)牙 BLE 廣播收發(fā)的協(xié)議棧講的非常清楚了:

圖片來(lái)源:https://www.beautifulzzzz.com/gnuradio/
這里將其單獨(dú)拎出來(lái)組成一個(gè) BLE + SDR 的專題,用于匯總關(guān)于藍(lán)牙協(xié)議棧在 SDR 上實(shí)現(xiàn)的各種技術(shù)點(diǎn)。
一、開(kāi)題之作
為了方便后續(xù)代碼構(gòu)建,我將之前零零散散的關(guān)于 BLE+SDR 的相關(guān)工程代碼,全部合并到一個(gè)獨(dú)立倉(cāng)庫(kù)中 auto_test_tool。
PS: 這個(gè)倉(cāng)庫(kù)是之前我的一個(gè)很老的倉(cāng)庫(kù),用于編寫一些簡(jiǎn)單的自動(dòng)化測(cè)試的 python 串口工具,因?yàn)槔锩嬗行┙M件整合適合 BLE 廣播包的解析與發(fā)送,因此就在這里附加了。
為了防止后續(xù)的課程對(duì)代碼修改導(dǎo)致老課程不方便復(fù)現(xiàn),我這里每個(gè)課程都會(huì)生成一個(gè) tag,這樣每個(gè)課程都可以拉取對(duì)應(yīng)的 tag 來(lái)還原現(xiàn)場(chǎng)。比如,我們這個(gè)開(kāi)題之作采用的是 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 |
| 點(diǎn)擊下載 | https://github.com/nbtool/auto_test_tool/releases/tag/ble_course_1 | 啥都不懂 |
OK,開(kāi)題相關(guān)的鋪墊到此結(jié)束,那么硬核的東西也不能少:

如上圖,我將之前的所有 BLE 廣播包接收教程的代碼全部重新整理,形成上圖所示能兼容 hackrf、plutosdr、limesdr 和 zmq 等不同 SDR 源的藍(lán)牙廣播接收解析系統(tǒng)(抓包器)。
具體的教程細(xì)節(jié)見(jiàn):app/app_sdr_ble_adv_rx
二、動(dòng)態(tài)發(fā)送 BLE 廣播包
上節(jié)我們將 BLE 廣播包接收代碼進(jìn)行全部整理,本節(jié)我們將 BLE 廣播包發(fā)送代碼進(jìn)行全部整理,實(shí)現(xiàn)每隔 1S 更換廣播內(nèi)容,并從零開(kāi)始合成 BLE 廣播 IQ 數(shù)據(jù),然后調(diào)用 SDR 發(fā)送,實(shí)現(xiàn) BLE 動(dòng)態(tài)廣播能力:

具體的教程細(xì)節(jié)見(jiàn):app/app_sdr_ble_adv_tx
三、基于 PlutoSDR 實(shí)現(xiàn) BLE 廣播包的收發(fā)一體能力
本節(jié)將前兩節(jié)的知識(shí)結(jié)合起來(lái),借助具有全雙工雙收雙發(fā)能力的 PlutoSDR 實(shí)現(xiàn) BLE 廣播包收發(fā)一體能力:

具體的教程細(xì)節(jié)見(jiàn):app/app_sdr_ble_adv_tx_rx
四、基于 PlutoSDR 的 BLE 廣播包的收發(fā)實(shí)現(xiàn)接入涂鴉智能 APP
本節(jié)在上一節(jié)的基礎(chǔ)上更進(jìn)一步:通過(guò)疊加 TuyaOS BeaconMesh 上層應(yīng)用協(xié)議,最終實(shí)現(xiàn)從電磁波開(kāi)始,到全雙工藍(lán)牙廣播收發(fā)接入涂鴉智能,變成一個(gè)物聯(lián)網(wǎng) BeaconMesh 燈節(jié)點(diǎn):

具體的教程細(xì)節(jié)見(jiàn):app/app_sdr_tuya_beacon_node
教程列表
基礎(chǔ)教程:
- [1]. GNU Radio 系列教程(一) —— 什么是 GNU Radio
- [2]. GNU Radio 系列教程(二) —— 繪制第一個(gè)信號(hào)分析流程圖
- [3]. GNU Radio 系列教程(三) —— 變量的使用
- [4]. GNU Radio 系列教程(四) —— 比特的打包與解包
- [5]. GNU Radio 系列教程(五) —— 流和向量
- [6]. GNU Radio 系列教程(六) —— 基于層創(chuàng)建自己的塊
- [7]. GNU Radio 系列教程(七)—— 創(chuàng)建第一個(gè)塊
- [8]. GNU Radio 系列教程(八)—— 創(chuàng)建能處理向量的 Python 塊
- [9]. GNU Radio 系列教程(九)—— Python 塊的消息傳遞
- [10]. GNU Radio 系列教程(十)—— Python 塊的 Tags
- [11]. GNU Radio 系列教程(十一)—— 低通濾波器
- [12]. GNU Radio 系列教程(十二)—— 窄帶 FM 收發(fā)系統(tǒng)(基于ZMQ模擬射頻發(fā)送)
- [13]. GNU Radio 系列教程(十三)—— 用兩個(gè) HackRF 實(shí)現(xiàn) FM 收發(fā)
- [14]. GNU Radio 系列教程(十四)—— GNU Radio 低階到高階用法的分水嶺 ZMQ 的使用詳解
- [15]. GNU Radio 系列教程(十五)—— GNU Radio GFSK 模塊
- [16]. GNU Radio 系列教程(十六)—— GNU Radio 的調(diào)試?yán)?Message Strobe
- [17]. GNU Radio 系列教程(十七)—— GNU Radio PDU TX 利用三個(gè)塊實(shí)現(xiàn)最小的數(shù)據(jù)包(幀頭+數(shù)據(jù)+校驗(yàn))
- [18]. GNU Radio 系列教程(十八)—— GNU Radio PDU TX 將幀頭和 payload 消息合并為數(shù)據(jù)幀
- [19]. GNU Radio 系列教程(十九)—— GNU Radio PDU TX 將最小數(shù)據(jù)幀實(shí)施脈沖突發(fā)整形填充 --> 讓幀更穩(wěn)定
- [20]. GNU Radio 系列教程(二十)—— GNU Radio PDU TX 根升余弦深度介紹&發(fā)送數(shù)據(jù)幀的收尾之作
- [21]. GNU Radio 系列教程(二一)—— GNU Radio PDU RX 利用相關(guān)性估計(jì)器尋找數(shù)據(jù)幀的起始位置
- [22]. GNU Radio 系列教程(二二)—— GNU Radio PDU RX 利用多相時(shí)鐘同步塊實(shí)現(xiàn)消除時(shí)鐘偏移
- [23]. GNU Radio 系列教程(二三)—— GNU Radio PDU RX 利用自適應(yīng)線性均衡器消除 ISI
- [24]. GNU Radio 系列教程(二四)—— GNU Radio PDU RX 利用 Costas Loop 校正相位和頻率偏移
- [25]. GNU Radio 系列教程(二五)—— 硬核,基于通信原理設(shè)計(jì)一個(gè)文件傳輸系統(tǒng)
- [26]. GNU Radio 系列教程(二六)—— 開(kāi)胃菜,hackrf 發(fā)送 ble 廣播包的簡(jiǎn)單 DEMO
綜合教程:
- [1]. SDR 教程實(shí)戰(zhàn)(一) —— 利用 GNU Radio + HackRF 做 FM 收音機(jī)
- [2]. SDR 教程實(shí)戰(zhàn)(二) —— 利用 GNU Radio + HackRF 做藍(lán)牙定頻測(cè)試工具(超低成本)
- [3]. SDR 教程實(shí)戰(zhàn)(三) —— 利用 GNU Radio + HackRF + WireShark 做藍(lán)牙抓包器(超低成本)
- [4]. SDR 教程實(shí)戰(zhàn)(四) —— 利用 GNU Radio + HackRF 手把手深入了解藍(lán)牙協(xié)議棧(從電磁波 -> 01數(shù)據(jù)流 -> 藍(lán)牙數(shù)據(jù)包)
- [5]. SDR 教程實(shí)戰(zhàn)(五) —— 利用 GNU Radio + LimeSDR+ WireShark 做藍(lán)牙抓包器(上上個(gè)視頻使用 HackRF)
- [6]. SDR 教程實(shí)戰(zhàn)(五) —— 利用兩個(gè) hackrf 實(shí)現(xiàn)大文件(視頻)高速傳輸
SDR 小工具教程:
基礎(chǔ)塊教程:
視頻和博客
: 如果覺(jué)得不錯(cuò),幫忙點(diǎn)個(gè)支持哈~









浙公網(wǎng)安備 33010602011771號(hào)