news 2026/6/1 9:21:45

ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-添加 conn_connected 连接状态参数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-添加 conn_connected 连接状态参数

ESP32添加修改蓝牙名称和获取蓝牙连接状态的AT命令-添加 conn_connected 连接状态参数

以下是为代码添加conn_connected连接状态参数的完整修改方案,包含变量定义、状态更新和日志调试:

核心修改点

  1. 定义全局变量conn_connected表示BLE连接状态(0=未连接/断开,1=已连接)
  2. 所有BLE连接事件中设置conn_connected = 1
  3. 所有BLE断开事件中设置conn_connected = 0
  4. 增加日志输出,方便调试状态变化

修改后的代码(关键部分标注)

break;caseESP_GATTS_CONNECT_EVT:esp_ble_conn_update_params_tconn_params={0};memcpy(conn_params.bda,param->connect.remote_bda,sizeof(esp_bd_addr_t));conn_params.latency=0;conn_params.max_int=0x20;conn_params.min_int=0x10;conn_params.timeout=400;ESP_LOGI(GATTS_TAG,"Connected, conn_id %u, remote "ESP_BD_ADDR_STR"",param->connect.conn_id,ESP_BD_ADDR_HEX(param->connect.remote_bda));gl_profile_tab[AUTO_IO_PROFILE_APP_ID].conn_id=param->connect.conn_id;conn_connected=1;// 新增:标记BLE已连接ESP_LOGI(GATTS_TAG,"conn_connected updated to 1 (connected)");// 调试日志esp_ble_gap_update_conn_params(&conn_params);break;caseESP_GATTS_DISCONNECT_EVT:ESP_LOGI(GATTS_TAG,"Disconnected, remote "ESP_BD_ADDR_STR", reason 0x%02x",ESP_BD_ADDR_HEX(param->disconnect.remote_bda),param->disconnect.reason);conn_connected=0;// 新增:标记BLE断开连接ESP_LOGI(GATTS_TAG,"conn_connected updated to 0 (disconnected)");// 调试日志break;caseESP_GATTS_CONF_EVT:ESP_LOGI(GATTS_TAG,"Confirm receive, status %d, attr_handle %d",param->conf.status,param->conf.handle);if(param->conf.status!=ESP_GATT_OK){ESP_LOG_BUFFER_HEX(GATTS_TAG,param->conf.value,param->conf.len);}break;default:break;}}// ... 其他代码不变 ...// 主动启用 UART_RX 特征的通知(向 CCCD 写入 0x0001)// esp_ble_gatts_set_attr_value(param->add_char_descr.attr_handle, 2, (uint8_t *)&cccd_val);uint16_tg_uart_rx_descr_handle=0;uint8_tconn_connected=0;// 新增:全局BLE连接状态(0=未连接/断开,1=已连接)voidenable_uart_rx_notify(){// ... 函数内容不变 ...}// UART服务事件处理(核心修改部分)staticvoiduart_gatts_profile_event_handler(esp_gatts_cb_event_tevent,esp_gatt_if_tgatts_if,esp_ble_gatts_cb_param_t*param){esp_err_tret;staticbool is_uart_tx_char_added=false;// 标记TX特征是否已添加switch(event){// ... 其他事件处理不变 ...caseESP_GATTS_CONNECT_EVT:ESP_LOGI(GATTS_TAG,"UART BLE profile connected, conn_id: %d",param->connect.conn_id);gl_profile_tab[UART_PROFILE_APP_ID].conn_id=param->connect.conn_id;conn_connected=1;// 新增:标记BLE已连接(UART profile连接事件)ESP_LOGI(GATTS_TAG,"conn_connected updated to 1 (UART profile connected)");// 调试日志break;caseESP_GATTS_DISCONNECT_EVT:ESP_LOGI(GATTS_TAG,"UART BLE profile disconnected");gl_profile_tab[UART_PROFILE_APP_ID].conn_id=0;uart_notify_enabled=false;// 断开连接后禁用通知conn_connected=0;// 新增:标记BLE断开连接(UART profile断开事件)ESP_LOGI(GATTS_TAG,"conn_connected updated to 0 (UART profile disconnected)");// 调试日志// 重启广播esp_ble_gap_start_advertising(&adv_params);break;// ... 其他事件处理不变 ...}}// ... 剩余代码不变 ...

关键说明

  1. 变量作用域conn_connected定义为全局变量,可在整个main.c中访问(如需在其他文件使用,可添加extern uint8_t conn_connected;声明)。
  2. 状态同步
    • 同时处理了AUTO_IO_PROFILEUART_PROFILE两个profile的连接/断开事件,确保无论哪个profile触发连接/断开,状态都能正确更新。
    • 连接事件(ESP_GATTS_CONNECT_EVT)触发时设为1,断开事件(ESP_GATTS_DISCONNECT_EVT)触发时设为0
  3. 调试日志:新增的日志可在串口输出中清晰看到状态变化,调试完成后可根据需要删除。
  4. 初始值:默认值为0,表示上电后未连接状态,符合业务逻辑。

使用示例

可在任意位置读取该状态,例如:

// 示例:检查BLE连接状态并执行对应逻辑voidcheck_ble_connection_status(){if(conn_connected==1){ESP_LOGI(GATTS_TAG,"当前BLE已连接,可发送数据");// 执行已连接时的逻辑(如发送通知、透传数据等)}else{ESP_LOGI(GATTS_TAG,"当前BLE未连接,暂停数据发送");// 执行未连接时的逻辑(如缓存数据、等待连接等)}}

该修改确保conn_connected能实时反映BLE的实际连接状态,且兼容现有代码逻辑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/24 20:13:16

一番赏小程序开发运营全解析:技术架构+玩法实现+合规落地

一番赏凭借“梯度奖池100%中奖稀缺隐藏款”的核心逻辑,成为潮玩赛道的技术开发热点,但超60%的项目因高并发支撑不足、概率不透明、IP合规缺失陷入困境。本文从开发者视角,拆解一番赏小程序的核心技术架构、关键功能实现、运营玩法的技术支撑及…

作者头像 李华
网站建设 2026/5/29 11:56:06

57310001-KH DSBC173总线中继器模块

57310001-KH DSBC173 总线中继器模块:用于工业总线系统的信号中继与增强延长总线传输距离,确保数据稳定可靠支持多种工业总线协议,兼容性广内置信号隔离和整形功能,抗干扰能力强模块化设计,便于安装、更换和系统扩展提…

作者头像 李华
网站建设 2026/5/23 18:09:43

ResNet18物体识别一键部署:预置镜像开箱即用,成本降80%

ResNet18物体识别一键部署:预置镜像开箱即用,成本降80% 引言:为什么选择ResNet18做物体识别? 开发智能相册APP时,自动识别照片中的物体(比如宠物、花卉、美食等)是提升用户体验的关键功能。传…

作者头像 李华
网站建设 2026/5/30 3:50:45

ResNet18图像识别懒人方案:预装环境一键运行,按分钟计费

ResNet18图像识别懒人方案:预装环境一键运行,按分钟计费 引言 作为一名设计师,你是否遇到过这样的困扰:想用AI技术快速识别设计稿中的物体元素,却被复杂的代码环境和漫长的配置过程劝退?今天我要介绍的Re…

作者头像 李华
网站建设 2026/6/1 1:56:47

Rembg抠图API文档:生成客户端SDK

Rembg抠图API文档:生成客户端SDK 1. 章节概述 随着AI图像处理技术的快速发展,自动化背景去除已成为内容创作、电商展示、设计修图等场景中的刚需。传统手动抠图效率低、成本高,而基于深度学习的智能抠图方案正逐步成为主流。Rembg 作为当前…

作者头像 李华