对 DUAL_SENSOR_BOX_KIT(基于 CYBT-263065-EVAL 和 TDA5235_868_5_BOARD)的 BLE/蓝牙模式编程,需遵循以下步骤。整个过程使用 ModusToolbox(英飞凌官方开发环境)和 WICED SDK BLE 协议栈:
1. 开发环境准备
- 安装 ModusToolbox
下载并安装 ModusToolbox(最新版本):
ModusToolbox 官网
- 添加开发板支持包
安装 CYBT-263065-EVAL BSP(Board Support Package):
- 打开 ModusToolbox → Tools → Packs → Board Support Packages → 搜索
CYBT-263065-EVAL 并安装。
- 获取 SDK
确保安装 WICED BLE Stack(或最新版 AIROC BLE SDK)。
2. 创建新项目
- 打开 ModusToolbox → New Application。
- 选择目标开发板:
CYBT-263065-EVAL。
- 选择 BLE 模板:
- 推荐模板:Empty BLE PSoC 6 App(基础框架)或 BLE Sensor Reporter(传感器示例)。
- 命名项目并生成代码。
3. 配置 BLE 服务(GATT)
- 使用 GATT Configurator 工具(图形化配置):
- 打开项目中的
.cybt/.cygatt 文件(如 design.cybt)。
- 添加 自定义 GATT 服务:
- Service UUID:定义一个唯一 UUID(如
0xA001)。
- 特征值 (Characteristics):
- 传感器1数据(如温度):
TEMP_SENSOR_1(UUID 0xA011,属性:Read & Notify)。
- 传感器2数据(如湿度):
HUMID_SENSOR_2(UUID 0xA012,属性:Read & Notify)。
- (可选)控制命令:
SENSOR_CTRL(UUID 0xA013,属性:Write)。
- 保存配置 → 自动生成 GATT 代码。
4. 编写传感器驱动
在 main.c 中添加传感器初始化与数据读取逻辑(假设传感器通过 I²C 连接):
#include "sensor_driver.h" // 替换为实际传感器驱动头文件
// 初始化传感器
void init_sensors(void) {
i2c_init(); // 初始化 I²C 接口
sensor1_init(); // 初始化传感器1(温度)
sensor2_init(); // 初始化传感器2(湿度)
}
// 读取传感器数据
void read_sensor_data(void) {
float temp = sensor1_read_temp();
float humid = sensor2_read_humid();
// 将数据更新到 BLE 特征值
update_ble_characteristic(TEMP_SENSOR_1, (uint8_t*)&temp, sizeof(temp));
update_ble_characteristic(HUMID_SENSOR_2, (uint8_t*)&humid, sizeof(humid));
}
5. 实现 BLE 事件回调
在 cy_ble_event_handler 中处理 BLE 事件:
void cy_ble_event_handler(uint32_t event, void *event_param) {
switch (event) {
// BLE 连接成功
case CY_BLE_EVT_GAP_DEVICE_CONNECTED:
enable_notifications(); // 启用通知
break;
// 写入请求(来自手机端)
case CY_BLE_EVT_GATTS_WRITE_REQ: {
cy_ble_gatts_write_req_param_t *req = (cy_ble_gatts_write_req_param_t *)event_param;
if (req->handleValPair.attrHandle == SENSOR_CTRL_HANDLE) {
process_control_command(req->handleValPair.value); // 处理控制命令
}
break;
}
}
}
6. 主循环逻辑
在 main() 中周期性读取传感器数据并发送通知:
int main(void) {
cy_rslt_t result;
result = cybt_platform_initialize(); // 初始化蓝牙平台
init_sensors(); // 初始化传感器
for (;;) {
cy_ble_process_events(); // 处理 BLE 事件
read_sensor_data(); // 读取传感器数据
cy_ble_gatts_send_notification(connection_handle, TEMP_SENSOR_1_HANDLE); // 发送通知
cy_ble_gatts_send_notification(connection_handle, HUMID_SENSOR_2_HANDLE);
Cy_SysLib_Delay(2000); // 每 2 秒更新一次
}
}
7. 编译与烧录
- 编译:
ModusToolbox → Build Application(生成 .hex 文件)。
- 烧录固件:
- 连接开发板到 PC(通过 USB)。
- 使用 KitProg3 烧录工具:
ModusToolbox → Tools → Program (KitProg3) → 选择生成的 .hex 文件。
8. 手机端测试
- BLE 扫描工具:
使用 nRF Connect 或 LightBlue 扫描设备。
- 验证服务:
- 连接后查看 GATT 服务列表。
- 订阅温度/湿度特征值的通知 → 接收实时数据。
- 发送控制命令(如果实现)。
关键文档参考
调试技巧
- 日志输出:
使用 printf 通过 UART 输出日志(配置 cy_retarget_io)。
- BLE 嗅探器:
使用 Ellisys 或 Frontline 抓包分析 BLE 通信。
- 功耗优化:
在 cycfg_ble.c 中调整广播间隔/连接参数降低功耗。
通过以上步骤,您可实现 DUAL_SENSOR_BOX_KIT 的 BLE 通信功能。根据实际传感器型号调整驱动逻辑,并优化数据更新策略以平衡功耗与实时性。
对 DUAL_SENSOR_BOX_KIT(基于 CYBT-263065-EVAL 和 TDA5235_868_5_BOARD)的 BLE/蓝牙模式编程,需遵循以下步骤。整个过程使用 ModusToolbox(英飞凌官方开发环境)和 WICED SDK BLE 协议栈:
1. 开发环境准备
- 安装 ModusToolbox
下载并安装 ModusToolbox(最新版本):
ModusToolbox 官网
- 添加开发板支持包
安装 CYBT-263065-EVAL BSP(Board Support Package):
- 打开 ModusToolbox → Tools → Packs → Board Support Packages → 搜索
CYBT-263065-EVAL 并安装。
- 获取 SDK
确保安装 WICED BLE Stack(或最新版 AIROC BLE SDK)。
2. 创建新项目
- 打开 ModusToolbox → New Application。
- 选择目标开发板:
CYBT-263065-EVAL。
- 选择 BLE 模板:
- 推荐模板:Empty BLE PSoC 6 App(基础框架)或 BLE Sensor Reporter(传感器示例)。
- 命名项目并生成代码。
3. 配置 BLE 服务(GATT)
- 使用 GATT Configurator 工具(图形化配置):
- 打开项目中的
.cybt/.cygatt 文件(如 design.cybt)。
- 添加 自定义 GATT 服务:
- Service UUID:定义一个唯一 UUID(如
0xA001)。
- 特征值 (Characteristics):
- 传感器1数据(如温度):
TEMP_SENSOR_1(UUID 0xA011,属性:Read & Notify)。
- 传感器2数据(如湿度):
HUMID_SENSOR_2(UUID 0xA012,属性:Read & Notify)。
- (可选)控制命令:
SENSOR_CTRL(UUID 0xA013,属性:Write)。
- 保存配置 → 自动生成 GATT 代码。
4. 编写传感器驱动
在 main.c 中添加传感器初始化与数据读取逻辑(假设传感器通过 I²C 连接):
#include "sensor_driver.h" // 替换为实际传感器驱动头文件
// 初始化传感器
void init_sensors(void) {
i2c_init(); // 初始化 I²C 接口
sensor1_init(); // 初始化传感器1(温度)
sensor2_init(); // 初始化传感器2(湿度)
}
// 读取传感器数据
void read_sensor_data(void) {
float temp = sensor1_read_temp();
float humid = sensor2_read_humid();
// 将数据更新到 BLE 特征值
update_ble_characteristic(TEMP_SENSOR_1, (uint8_t*)&temp, sizeof(temp));
update_ble_characteristic(HUMID_SENSOR_2, (uint8_t*)&humid, sizeof(humid));
}
5. 实现 BLE 事件回调
在 cy_ble_event_handler 中处理 BLE 事件:
void cy_ble_event_handler(uint32_t event, void *event_param) {
switch (event) {
// BLE 连接成功
case CY_BLE_EVT_GAP_DEVICE_CONNECTED:
enable_notifications(); // 启用通知
break;
// 写入请求(来自手机端)
case CY_BLE_EVT_GATTS_WRITE_REQ: {
cy_ble_gatts_write_req_param_t *req = (cy_ble_gatts_write_req_param_t *)event_param;
if (req->handleValPair.attrHandle == SENSOR_CTRL_HANDLE) {
process_control_command(req->handleValPair.value); // 处理控制命令
}
break;
}
}
}
6. 主循环逻辑
在 main() 中周期性读取传感器数据并发送通知:
int main(void) {
cy_rslt_t result;
result = cybt_platform_initialize(); // 初始化蓝牙平台
init_sensors(); // 初始化传感器
for (;;) {
cy_ble_process_events(); // 处理 BLE 事件
read_sensor_data(); // 读取传感器数据
cy_ble_gatts_send_notification(connection_handle, TEMP_SENSOR_1_HANDLE); // 发送通知
cy_ble_gatts_send_notification(connection_handle, HUMID_SENSOR_2_HANDLE);
Cy_SysLib_Delay(2000); // 每 2 秒更新一次
}
}
7. 编译与烧录
- 编译:
ModusToolbox → Build Application(生成 .hex 文件)。
- 烧录固件:
- 连接开发板到 PC(通过 USB)。
- 使用 KitProg3 烧录工具:
ModusToolbox → Tools → Program (KitProg3) → 选择生成的 .hex 文件。
8. 手机端测试
- BLE 扫描工具:
使用 nRF Connect 或 LightBlue 扫描设备。
- 验证服务:
- 连接后查看 GATT 服务列表。
- 订阅温度/湿度特征值的通知 → 接收实时数据。
- 发送控制命令(如果实现)。
关键文档参考
调试技巧
- 日志输出:
使用 printf 通过 UART 输出日志(配置 cy_retarget_io)。
- BLE 嗅探器:
使用 Ellisys 或 Frontline 抓包分析 BLE 通信。
- 功耗优化:
在 cycfg_ble.c 中调整广播间隔/连接参数降低功耗。
通过以上步骤,您可实现 DUAL_SENSOR_BOX_KIT 的 BLE 通信功能。根据实际传感器型号调整驱动逻辑,并优化数据更新策略以平衡功耗与实时性。
举报