1. 项目概述与背景
最近在研究室内定位方案时,发现基于蓝牙信标(iBeacon)的定位系统是个很有意思的方向。正好手头有树莓派4B和信驰达的RF-B-SRx系列BLE基站,就决定用Python来实现一个简单的iBeacon定位系统。这个项目不仅能学习BLE蓝牙通信原理,还能实践Python硬件交互,对物联网开发很有帮助。
iBeacon是苹果公司提出的一种基于蓝牙低功耗(BLE)技术的定位协议,通过测量信号强度(RSSI)来估算设备与基站之间的距离。不同于标准iBeacon设备,我使用的信驰达基站采用了自定义的ServiceData格式,这给数据解析带来了一些挑战。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件环境搭建
2.1 设备选型与准备
在硬件选择上,我推荐使用树莓派4B或5B作为开发平台,原因有三:
- 内置蓝牙5.0/5.2模块,BLE通信稳定
- 足够的计算性能处理实时数据
- GPIO接口丰富,方便后续扩展
关键硬件清单:
- 树莓派4B/5B(建议使用官方电源)
- 信驰达RF-B-SRx系列BLE基站(需提前配置好UUID/Major/Minor参数)
- 优质MicroSD卡(建议32GB以上,Class10速度等级)
- 散热片和风扇(长时间运行必备)
提示:如果使用外接BLE模块,建议选择支持蓝牙5.0的适配器,如CSR8510芯片的方案,兼容性更好。
2.2 系统配置要点
我使用的是Raspberry Pi OS(基于Debian Bookworm)系统,有几个关键配置需要注意:
- 蓝牙服务检查:
bash复制sudo systemctl status bluetooth
确保蓝牙服务是active状态
- 禁用不必要的蓝牙功能:
bash复制sudo btmgmt le on
sudo btmgmt bredr off
这样可以优化BLE扫描性能
- 提升蓝牙优先级(可选):
bash复制sudo nice -n -20 hcitool lescan
减少系统其他进程对蓝牙扫描的干扰
3. 软件环境配置
3.1 Python虚拟环境搭建
为了避免依赖冲突,强烈建议使用虚拟环境。我使用的是Python 3.9+版本,配置步骤如下:
bash复制# 创建虚拟环境
python3 -m venv ~/beacon_venv --prompt="BeaconEnv"
# 激活环境
source ~/beacon_venv/bin/activate
# 安装必要依赖
pip install --upgrade pip setuptools wheel
虚拟环境的好处是隔离项目依赖,特别是当你在同一台树莓派上运行多个Python项目时,可以避免库版本冲突。
3.2 核心库安装
BLE开发的核心库是bleak,这是一个跨平台的BLE库,支持Linux/Windows/macOS:
bash复制# 安装系统依赖
sudo apt update && sudo apt install -y libcap2-bin bluez
# 安装Python库
pip install bleak numpy # numpy用于后续的距离计算
bleak库的优势在于:
- 异步IO设计,扫描效率高
- 支持ServiceData解析
- 活跃的社区维护
3.3 蓝牙权限配置
树莓派上运行
