蓝牙BLE主从机中GAP几种状态的解释

本文详细解析了蓝牙低功耗(BLE)在主从机模式下的GAP状态,包括从机上的广播状态和主机上的连接状态,探讨了不同状态下设备的行为和交互过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是在从机上对GAP状态的描述

typedef enum
{
  GAPROLE_INIT = 0,                       //!< Waiting to be started 等待启动
  GAPROLE_STARTED,                        //!< Started but not advertising 启动但是没有在广播
  GAPROLE_ADVERTISING,                    //!< Currently Advertising 处于广播状态

  GAPROLE_WAITING,      
//设备启动但是没处于广播状态,处于再次广播之前的等待期间,比如关闭了广播等待再次打开广播             
 //!< Device is started but not advertising, is in waiting period before advertising again

  GAPROLE_WAITING_AFTER_TIMEOUT,      
// 设备仅仅是从连接中超时但是未广播,在再次广播之前处于等待期间   
 //!< Device just timed out from a connection but is not yet advertising, is in waiting perio
### ESP32 BLE 主从配置与代码示例 #### 配置方法 对于ESP32作为BLE和从的操作,通常涉及初始化BLE库并设置相应的角色。当ESP32充当BLE时,它会扫描周围可用的BLE设备并与之建立连接;而作为从,则等待其他设备发起连接请求。 为了使ESP32能够支持这两种模式,在Arduino IDE环境中安装特定版本的ESP32板管理器是必要的[^1]。完成此操作之后,可以利用`NimBLE`或`BluetoothSerial`类来实现具体功能。 #### 工作原理 ESP32通过其内置的蓝牙模块实现了对BLE协议的支持。在BLE通信中,数据传输基于服务和服务特征的概念。每个BLE应用定义了一组特性(characteristics),这些特性描述了如何读取、写入以及通知远程设备有关本地状态的信息变化情况。无论是作为主站还是从站运行,ESP32都遵循这一标准框架来进行交互。 - **作为主**: 发起GAP广播包监听,并尝试与其他外围设备配对形成链路层连接。 - **作为从**: 响应来自中心节点(GATT客户端)的服务发现请求,并提供访问权限给已知特性的值。 #### 代码示例 以下是两个简单的例子分别展示了ESP32作为BLE和从的基本编程方式: ##### ESP32作为BLE ```cpp #include <NimBLEDevice.h> #include <NimBLEScan.h> void setup() { Serial.begin(115200); NimBLEDevice::init("MyESP32"); } void loop() { NimBLEScan* pBLEScan = NimBLEDevice::getScan(); pBLEScan->start(5); // 扫描持续时间为5秒 } ``` ##### ESP32作为BLE ```cpp #include <NimBLEDevice.h> #include <NimBLEServer.h> // 创建服务UUID和服务中的一个特征UUID #define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b" #define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8" void setup(){ Serial.begin(115200); NimBLEDevice::init("ESP32_BLE_SERVER"); NimBLEServer *pServer = NimBLEDevice::createServer(); NimBLERemoteService *pRemoteService = pServer->createService(SERVICE_UUID); NimBLERemoteCharacteristic *pRemoteCharacteristic = pRemoteService->addCharacteristic( CHARACTERISTIC_UUID, NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE ); pRemoteService->start(); } void loop(){} ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值