news 2026/7/15 0:25:34

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/7/1 9:59:47

sci文献检索入口:快速查找与获取SCI学术文献的权威平台指引

盯着满屏的PDF,眼前的外语字母开始跳舞,脑子里只剩下“我是谁、我在哪、这到底在说什么”的哲学三问,隔壁实验室的师兄已经用AI工具做完了一周的文献调研。 你也许已经发现,打开Google Scholar直接开搜的“原始人”模式&#xff…

作者头像 李华
网站建设 2026/7/14 14:06:26

Qwen2.5-7B-Instruct + vLLM 实战|高效离线推理与结构化数据生成

Qwen2.5-7B-Instruct vLLM 实战|高效离线推理与结构化数据生成 引言:为何需要高效离线推理与结构化输出? 在大模型落地应用的过程中,响应效率和结果可解析性是决定系统能否真正投入生产的关键因素。传统的在线推理方式虽然实时…

作者头像 李华
网站建设 2026/7/1 21:25:49

智能万能抠图Rembg:无需标注的自动去背景指南

智能万能抠图Rembg:无需标注的自动去背景指南 1. 引言:为什么我们需要智能抠图? 在图像处理、电商展示、UI设计和内容创作等领域,精准去除背景是一项高频且关键的需求。传统方法依赖人工手动抠图(如Photoshop魔棒、钢…

作者头像 李华
网站建设 2026/7/13 2:33:21

ResNet18傻瓜式教程:3步完成图像识别,没显卡也能用

ResNet18傻瓜式教程:3步完成图像识别,没显卡也能用 引言 作为小公司老板,你可能经常听到"AI"、"图像识别"这些高大上的词汇,但总觉得离自己很遥远。IT部门说要配环境得等一周,电脑配置又跟不上&…

作者头像 李华
网站建设 2026/7/1 9:59:53

大模型应用开发系列教程:第一章LLM到底在做什么?

在开始写任何复杂的 LLM 应用之前,我们必须先解决一个根本问题:LLM 到底在“干什么”?如果你对这个问题的理解是模糊的,那么后面所有工程决策 ——Prompt 怎么写、参数怎么调、是否要加 RAG、什么时候该用 Agent 都会变成“试出来…

作者头像 李华