news 2026/6/10 17:55:29

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/6/6 15:08:03

LLM动态调提示让医生操作快一倍

📝 博客主页:Jax的CSDN主页 动态提示革命:LLM如何让医生操作效率提升100% 目录 动态提示革命:LLM如何让医生操作效率提升100% 引言:医生效率的“隐形瓶颈”与破局点 一、技术应用场景:从“被动响应”到“主…

作者头像 李华
网站建设 2026/6/8 8:48:25

Qwen2.5-7B-Instruct模型部署优化|vLLM加持下的高效推理实践

Qwen2.5-7B-Instruct模型部署优化|vLLM加持下的高效推理实践 引言:大模型推理效率的工程挑战 随着Qwen系列语言模型迭代至Qwen2.5版本,其在知识广度、编程与数学能力、长文本生成及多语言支持等方面实现了显著提升。特别是Qwen2.5-7B-Instr…

作者头像 李华
网站建设 2026/6/10 10:09:01

57120001-FG DSAO130模拟输出单元

57120001-FG DSAO130 模拟输出单元:用于工业自动化系统的模拟信号输出支持多通道输出,精度高、线性度好可输出电压、电流等多种模拟信号类型模块化设计,便于系统扩展与维护内置自诊断功能,提高运行可靠性兼容主流控制器与现场总线…

作者头像 李华
网站建设 2026/5/22 15:39:52

Rembg抠图错误排查:常见问题与解决方案

Rembg抠图错误排查:常见问题与解决方案 1. 智能万能抠图 - Rembg 在图像处理和内容创作领域,精准、高效的背景去除技术一直是核心需求。无论是电商产品图精修、社交媒体素材制作,还是AI生成内容的后处理,自动抠图工具都扮演着关…

作者头像 李华
网站建设 2026/6/10 17:44:40

Qwen2.5-7B推理优化技巧|离线场景下的性能提升

Qwen2.5-7B推理优化技巧|离线场景下的性能提升 在大语言模型(LLM)的工程落地过程中,离线推理已成为高吞吐、低成本任务处理的核心手段。尤其对于像 Qwen2.5-7B 这类参数量达 76.1 亿的中大型模型,在批量数据生成、内容…

作者头像 李华
网站建设 2026/6/10 12:40:44

Qwen2.5-7B-Instruct + vLLM 高性能推理实战|快速部署指南

Qwen2.5-7B-Instruct vLLM 高性能推理实战|快速部署指南 在大模型落地加速的今天,如何构建一个高吞吐、低延迟、易扩展的语言模型服务,已成为AI工程团队的核心命题。尤其是在企业级应用中,面对长上下文理解、结构化输出生成和多语…

作者头像 李华