1. 项目背景与核心价值
去年在做一个智慧仓储项目时,需要实时追踪货架上贵重物品的位置。当时尝试过RFID方案,但存在读取距离短、无法获取方向信息的痛点。后来偶然接触到iBeacon技术,发现它不仅能提供米级定位精度,还能通过信号强度(RSSI)判断设备与基站的距离关系。于是用树莓派搭建了一套原型系统,效果出乎意料的好。
这套方案的核心优势在于:
- 硬件成本极低:一个iBeacon基站价格不到百元,树莓派更是创客标配
- 开发门槛适中:Python生态有成熟的BLE库支持
- 定位原理简单:基于蓝牙信号衰减模型,不需要复杂的数学运算
- 扩展性强:可轻松部署多个基站实现区域覆盖
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件准备与环境搭建
2.1 设备选型要点
我测试过三种不同价位的iBeacon设备,这里分享实测对比:
| 型号 | 发射功率 | 续航时间 | 稳定性 | 参考价格 |
|---|---|---|---|---|
| 某品牌A1 | -12dBm | 3个月 | ★★★☆ | ¥89 |
| 某工业级B2 | -8dBm | 1年 | ★★★★☆ | ¥220 |
| 某山寨C3 | -20dBm | 2周 | ★★☆ | ¥35 |
实际使用建议:室内环境选-12dBm足够,工业场景建议-8dBm以上。特别注意山寨设备可能存在UUID无法修改的问题。
2.2 树莓派蓝牙配置
很多人忽略的蓝牙适配器兼容性问题:
bash复制# 查看蓝牙控制器信息
hciconfig -a
# 典型输出示例
hci0: Type: Primary Bus: USB
BD Address: B8:27:EB:XX:XX:XX ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING PSCAN ISCAN
RX bytes:1245 acl:0 sco:0 events:67 errors:0
TX bytes:990 acl:0 sco:0 commands:67 errors:0
如果看到"Manufacturer: Cambridge Silicon Radio"说明是博通芯片,兼容性最好。遇到连接不稳定时可以尝试:
bash复制# 重置蓝牙模块
sudo hciconfig hci0 reset
3. Python核心代码解析
3.1 BLE扫描实现
使用bluepy库的Scanner类时有个坑:默认扫描间隔太短会导致丢包。这是我的优化版本:
python复制from bluepy.btle import Scanner, DefaultDelegate
class ScanDelegate(DefaultDelegate):
def __init__(self):
DefaultDelegate.__init__(self)
self.beacons = []
def handleDiscovery(self, dev, isNewDev, isNewData):
if dev.scanData.get(0x16): # 检查Service Data字段
