继续阅读完整内容
支持我们的网站,请点击查看下方广告
在商场、医院等场所投放促销或服务信息,让用户通过蓝牙接收。
市面上的"蓝牙广告机"实质上分为两类:
- 纯蓝牙信标(Beacon)类:硬件设备持续广播一段唯一标识符(UUID、Major、Minor),手机上某个已安装的App检测到该标识符后,从云端拉取对应的广告内容进行展示。用户必须提前安装了该App才能收到信息。
- 手机App做高精度位置验证类:App在后台检测附近蓝牙信号,向服务器上报,验证用户确在该位置后才推送优惠。
因此,"蓝牙广告机"真实的技术路线是:硬件设备(BLE信标或蓝牙基站) + 配套手机App + 内容管理后台。硬件负责"广播身份ID",手机App负责"接收并翻译成具体内容"。
一、技术架构全景图
┌─────────────────────────────────────────────────────────────┐
│ 内容管理后台(云服务器) │
│ - 配置设备ID对应的广告内容 │
│ - 维护设备位置、分组 │
└───────────────────────────┬─────────────────────────────────┘
│ 网络同步
▼
┌─────────────────────────────────────────────────────────────┐
│ BLE广播设备(硬件) │
│ - 基于ESP32 / nRF52 / 成品BLE模块 │
│ - 持续广播iBeacon格式数据(包含设备唯一标识) │
│ - 广播间隔:100ms ~ 1000ms │
│ - 覆盖距离:约10~70米(视发射功率而定) │
└───────────────────────────┬─────────────────────────────────┘
│ BLE广播
▼
┌─────────────────────────────────────────────────────────────┐
│ 用户手机 + 你开发的App │
│ - 后台扫描到广播 → 提取UUID/Major/Minor │
│ - 组合RSSI辅助做近场校验 │
│ - 向云端拉取对应广告(或提前内置于App)→ 展示给用户 │
└─────────────────────────────────────────────────────────────┘
二、硬件开发:选型与组装
2.1 方案一:低成本自研(推荐初创/做验证)
核心芯片:ESP32系列(性价比最高)
ESP32自带BLE射频,发射功率可调(-20dBm ~ +4dBm),支持深睡眠省电模式,一块纽扣电池可工作数月,成本约20-50元/颗封装板。
推荐型号:
- ESP32-C3:RISC-V架构,低功耗,集成度高,官方ESP-IDF开发工具成熟
- ESP32-S3:性能更强,适合需要更多功能扩展的场景
- 特定版型见: 如Seeed Studio XIAO ESP32-C3——体积极小,可直接贴装在基板上推广应用
注意事项:BLE和Wi-Fi共用射频芯片,若同时开启会相互干扰,IBEACON广播模式下建议关闭Wi-Fi,专注BLE广播开数据传输。
搭建示例(ESP32 + Arduino IDE):
#include <BLEDevice.h>#include <BLEUtils.h>#include <BLEServer.h>#include <BLEBeacon.h>
BLEAdvertising *pAdvertising;
void setup() {Serial.begin(115200);BLEDevice::init("YourBeaconName");pAdvertising = BLEDevice::getAdvertising();
BLEBeacon oBeacon;// 设置UUID——唯一标识整个设备部署(如商场项目)oBeacon.setProximityUUID(BLEUUID("8A7B1A5C-9F4A-4E7B-9A2D-1C3F5E8B7D91"));oBeacon.setMajor(1); // 主分类,如分店号或楼层oBeacon.setMinor(2); // 次分类,如具体设备编号oBeacon.setManufacturerId(0x004C); // Apple的厂商ID(iBeacon标准)oBeacon.setSignalPower(-59); // 参考发射强度
// 生成广播数据BLEAdvertisementData oAdvertisementData = BLEAdvertisementData();oAdvertisementData.setFlags(0x04);std::string strPayload = "";strPayload += (char)0x1A;strPayload.append((char*)&oBeacon, sizeof(oBeacon));oAdvertisementData.setManufacturerData(strPayload);pAdvertising->setAdvertisementData(oAdvertisementData);
// 设置广播间隔(500ms→省电,100ms→快速响应)pAdvertising->setMinInterval(500);pAdvertising->setMaxInterval(500);pAdvertising->start();}
void loop() {} // 保持广播
供电模式:
- USB电源——商场部署最常用,插USB口长开。
- 2节AA电池——可支持1年以上(低功耗模式下)。
- 纽扣电池CR2032——体积最小,适合贴装外观。
- 深睡眠唤醒——在广播周期之间深度睡眠,仅在需要唤醒时发射短暂广播再回睡。
2.2 方案二:成品模块快速集成(量产或不想动手自焊版)
不需要从零绘制PCB,直接买已认证(RF/蓝牙)的成品模块,用UART等控制引脚对接MCU即可:
- Air8000模块(含BLE5.4):支持LuatOS脚本,直接调用库便可广播IBEACON。
- BlueNRG-LP:ST的BLE 5.2低功耗MCU,从底层开发到量产落地有完整指南,降低调试弯路。
- 沁恒BLE SoC(如CH582):支持RISC-V内核和蓝牙5.4,支持BLE+USB、BLE+NFC、BLE+以太网多种扩展组合。
- nRF52系列(nRF52833/nRF52840):Nordic方案,Zephyr RTOS生态成熟,开发文档齐全。
成品模块方式下,硬件开发 ≈ 烧录配置+接线固定(外壳自行设计),是初版验证和连锁量产的稳健选择。
三、软件开发:App端接收及展示
硬件广播的是ID,用户必须通过你的App才能"看懂"这些ID并呈现广告。
3.1 开发环境选择
| 框架 | 优缺点 | 适合场景 |
|---|---|---|
| Flutter + flutter_blue | 跨平台,一套代码iOS/Android,开发效率高 | 中小型项目,快速迭代 |
| React Native + react-native-ble-plx / react-native-ble-advertise | 跨平台,社区活跃 | 偏向JS技术栈团队 |
| 原生Android(Kotlin) + 原生iOS(Swift) | 性能最优,BLE能力完整,不受框架限制 | 大型项目,对稳定性和后台行为要求高 |
| 微信小程序 + 蓝牙API | 无需安装App,扫小程序码即可启用BLE扫描 | 用户触达门槛最低,但iOS后台权限限制严格 |
跨平台兼容性方面,不同平台(Android/iOS)API设计差异较大,需分别实现或用跨平台框架统一封装。
3.2 核心功能实现
(1) 蓝牙扫描并识别iBeacon
App在后台持续扫描周围设备,发现广播包后解析出UUID/Major/Minor:
// Android示例(Kotlin)val bleScanner = bluetoothAdapter.bluetoothLeScannerval scanSettings = ScanSettings.Builder().setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY).setReportDelay(0).build()val scanFilters = listOf(ScanFilter.Builder().setManufacturerData(0x004C, byteArrayOf()).build())
bleScanner.startScan(scanFilters, scanSettings, scanCallback)
(2) 距离估算(可选的近场验证)
根据RSSI(信号强度)估算用户和设备的距离,用于判断用户是否已真的进入商场柜台区域(室内定位)或医院门口。
(3) 通过ID拉取广告内容
- 方案A:App捕获UUID/Major/Minor,将此三位组合上传云端,根据后台配置表返回对应商场促销/医院陪诊卡片。好处:广告内容灵活可改,无需升级App。
- 方案B:预先将ID-广告映射写入App本地数据库(SQLite或JSON文件)。好处:完全离线、无时延,适合内容长期固定或网络不佳场景。
- 医院陪诊示例:当ID=101, Major=201, Minor=s(特定设备)时触发→弹出一条PUSH通知:"【市医院】专业陪诊服务陪诊全程陪同就诊+导医陪检+代排队取药,30元/小时"——后台不存储用户敏感信息。
3.3 iOS端的重要限制(务必阅读)
iOS对蓝牙后台扫描管控极其严格,这是绕过最多的坑:
- iOS App若要在后台(用户锁屏/退出后)仍能扫描蓝牙iBeacon并执行相应动作,必须在Info.plist中声明蓝牙后台运行模式(UIBackgroundModes: bluetooth-central)。
- 即便声明后,iOS也可能对扫描频率和唤醒机制做系统级限制,并非每次检测到广播就能立即拉起App做出响应。
- HUAWEI HMS Nearby Service等厂商级方案在华为手机上可能更易用,但苹果侧完全依赖于Core Bluetooth的限制(且不支持Easier Near-Activity Broadcasts)。
解决方案:提醒用户保持App在后台不定时运行允许;且用户开启蓝牙权限后还需手动在"设置→隐私→蓝牙"中授权。
四、合规与法律事项(不可跳过)
生产、销售和使用蓝牙发射设备在国内有明确强制认证要求,必须主动避免被罚款或下架:
| 合规要求 | 适用对象 | 关键事项 |
| SRRC型号核准 | 所有蓝牙/无线发射模块或成品设备 | 凭申请提交无线电发射设备型号核准证,未过不得销售、不得使用;证书号"CMIIT ID: ×××"需贴于产品 |
| 销售备案 | 销售商家(含网络渠道) | 工信部门要求凡销售蓝牙设备、对讲机等都要备案主体+设备信息;依据《电商法》强制要求上架须备有SRRC证书 |
| CCC认证 | 含电源适配器的一体机/广告机整机 | 若设备自带电源/显示屏等,须额外强制3C认证;若仅用蓝牙模组内置电池则不一定 |
五、完整开发路线图(按时间节点)
| 阶段 | 时长 | 具体任务 | 费用预算(估) |
|---|---|---|---|
| 方案设计 & 硬件选型 | 1-2周 | 决定自研ESP32还是买成品模块,设计电路/供电方式,获取模块数据手册 | <¥500(样品)+ 开发板¥100-200 |
| 硬件原型搭建 | 1-2周 | 搭好广播设备,验证广播覆盖距离5~30米是否达标,换高功率天线调试 | 元件采购¥200-800 |
| App开发 | 3-8周 | 编写安卓/IOS/Flutter前端扫描、解析iBeacon、拉取广告内容的完整逻辑;完成后台内容管理系统(CMS) | 开发人力(自研或外包) |
| 合规认证 | 6-10周 | 送检SRRC(8周左右)、申请销售备案(同步进行),然后进行整机打样CCC(若需要) | SRRC约3-6万元;CCC约1-2万 |
| 试产 & 现场部署 | 2-4周 | 小批量生产5-50台,分别部署在商场柜台、医院门口,手机App实际验证通知准确型 | 生产成本(按模组外壳打样¥50-100/台) |
六、关键注意事项总结
- 传播范围与功耗需平衡:距离设定约15-30米为宜;太远跨区域也可能触发误判。
- 区分Android和iOS后台行为差异:Android的扫描更自由;iOS必须获后台授权。广告触发最好做到App在前台最为稳妥。
- RSSI干扰不可避免:人员流动、金属框架会反射或衰减信号,建议搭配多个信标做三角定位提升命中准确率。
- 用户隐私隐私合规:所有蓝牙分析和上报不得涉及敏感用户数据,最小化上传(仅ID+时间戳);根据《个人信息保护法》不需明示收集不必要的个人身份。
- 数据信息更新方法:生产不联网的纯信标情况下,设备配发的广播ID固定,App端内容同步支持CMS后台,云端实时即可更新促销/活动内容。
- 防止滥用播放:由于App每次发现信标才拉取内容,建议缓存+防重复通知(如一天一次),避免用户经过多次时因重复弹窗而导致反感卸载应用。
总结:核心路线是 BLE发射器 + 已安装的配套App + 云后台内容管理三层体系。硬件选择低成本高成熟的ESP32或成品模块,App端则需要分别适配iOS/Android的蓝牙扫描机制,并提前完成合法合规的无线电销售备案和SRRC强制认证。若不想从零开发App,也可通过已存在的微信小程序调用蓝牙接口作为初期过渡方案,但体验会受iOS后台限制牺牲。