xiyou2020eeeee 发表于 2024-3-4 20:28

【安信可BW16-Kit】7、手机搜索蓝牙

# 【安信可BW16-Kit】7、手机搜索蓝牙

## 1、实验步骤
这段代码用于创建一个iBeacon设备,iBeacon是一种基于蓝牙低功耗(BLE)技术的室内定位系统,它可以广播一个信号,被附近的设备识别和解析。下面是对代码功能的详细解释:

1. **引入库**:
    - `#include "BLEDevice.h"`:引入BLEDevice库,这个库提供了用于处理BLE设备初始化和配置的函数和类。
    - `#include "BLEBeacon.h"`:引入BLEBeacon库,这个库提供了创建和配置iBeacon信标的功能。

2. **定义iBeacon对象**:
    - `iBeacon beacon;`:创建一个iBeacon对象,这个对象将用于设置iBeacon的参数并广播iBeacon信号。

3. **定义UUID**:
    - `#define UUID "00112233-4455-6677-8899-AABBCCDDEEFF"`:定义一个UUID(Universally Unique Identifier),这是iBeacon的唯一标识符,用于区分不同的iBeacon设备。

4. **设置iBeacon参数**:
    - `beacon.setManufacturerId(0x004C);`:设置iBeacon的制造商ID,0x004C是Apple公司的ID,用于iBeacon。
    - `beacon.setRSSI(0xBF);`:设置iBeacon的RSSI(Received Signal Strength Indicator),这个值用于估算与iBeacon的距离。
    - `beacon.setMajor(0x007B);`:设置iBeacon的Major值,这个值用于区分同一位置的不同iBeacon群组。
    - `beacon.setMinor(0x01C8);`:设置iBeacon的Minor值,这个值用于区分同一群组内的不同iBeacon。
    - `beacon.setUUID(UUID);`:设置iBeacon的UUID。

5. **初始化BLE设备**:
    - `BLE.init();`:初始化BLE设备,准备开始广播。

6. **配置广播参数**:
    - `BLE.configAdvert()->setAdvType(GAP_ADTYPE_ADV_NONCONN_IND);`:设置广播类型为非连接广播,这意味着设备只广播数据,不接受连接。
    - `BLE.configAdvert()->setAdvData(beacon.getAdvData(), beacon.advDataSize);`:设置广播数据为iBeacon的广播数据。
    - `BLE.configAdvert()->setScanRspData(beacon.getScanRsp(), beacon.scanRspSize);`:设置扫描响应数据为iBeacon的扫描响应数据。

7. **开始广播**:
    - `BLE.beginPeripheral();`:开始以外围设备的身份广播BLE信号,这时iBeacon设备开始广播其信号。

8. **循环函数**:
    - `void loop() { delay(1000); }`:在这个示例中,loop函数只包含一个延时,因为iBeacon的广播是自动进行的,不需要在循环中进行额外的操作。

总体来说,这段代码通过设置iBeacon的各种参数并初始化BLE设备,创建了一个可以广播特定信号的iBeacon设备。这个信号可以被附近的设备识别和解析,用于室内定位、接近检测和其他基于位置的服务。



## 2、代码解释

```cpp
#include "BLEDevice.h" // 引入BLEDevice库,用于处理BLE设备的初始化和配置
#include "BLEBeacon.h" // 引入BLEBeacon库,用于创建和配置iBeacon信标

iBeacon beacon; // 创建一个iBeacon对象

// 定义一个UUID,这是iBeacon的唯一标识符
#define UUID "00112233-4455-6677-8899-AABBCCDDEEFF"

void setup() {
    // 设置iBeacon的制造商ID,0x004C是Apple公司的ID,用于iBeacon
    beacon.setManufacturerId(0x004C);

    // 设置iBeacon的RSSI(接收信号强度指示),用于估算与iBeacon的距离
    beacon.setRSSI(0xBF);

    // 设置iBeacon的Major值,用于区分同一位置的不同iBeacon群组
    beacon.setMajor(0x007B);

    // 设置iBeacon的Minor值,用于区分同一群组内的不同iBeacon
    beacon.setMinor(0x01C8);

    // 设置iBeacon的UUID
    beacon.setUUID(UUID);

    // 初始化BLE设备
    BLE.init();

    // 配置广告类型为非连接广告,这意味着设备只广播数据,不接受连接
    BLE.configAdvert()->setAdvType(GAP_ADTYPE_ADV_NONCONN_IND);

    // 设置广告数据为iBeacon的广告数据
    BLE.configAdvert()->setAdvData(beacon.getAdvData(), beacon.advDataSize);

    // 设置扫描响应数据为iBeacon的扫描响应数据
    BLE.configAdvert()->setScanRspData(beacon.getScanRsp(), beacon.scanRspSize);

    // 开始以外围设备的身份广播BLE信号
    BLE.beginPeripheral();
}

void loop() {
    // 每隔一秒重复循环,但在这个示例中,loop函数为空,因为iBeacon的广播是自动进行的
    delay(1000);
}
```
## 3、效果

Jacktang 发表于 2024-3-5 07:57

<p>能和手机蓝牙配对上吧</p>

xiyou2020eeeee 发表于 2024-3-5 08:33

本帖最后由 xiyou2020eeeee 于 2024-3-5 08:34 编辑

<div class="quote">
<blockquote><font size="2"><a href="forum.php?mod=redirect&amp;goto=findpost&amp;pid=3304348&amp;ptid=1273449" target="_blank"><font color="#999999">Jacktang 发表于 2024-3-5 07:57</font></a></font> 能和手机蓝牙配对上吧</blockquote>
</div>

<p>这个主要是实现手机搜索BW16 蓝牙</p>
页: [1]
查看完整版本: 【安信可BW16-Kit】7、手机搜索蓝牙