ESP32-idf学习(二)esp32C3作服务端与电脑蓝牙数据交互

一、当前需求

目前是想利用蓝牙来传输命令,或者一些数据,包括电脑、手机与板子的数据传输,板子与板子之间的数据传输。构思是一个板子是数据接收终端,在电脑或手机下发指令后,再给其他板子相应指令,也需要接收其他板子的状态信息。

之前做过类似的,但主机和PC端是通过http或者串口进行数据交互。都用蓝牙的话以我目前查到的信息来说是可以实现的,先试试看,需要分时复用蓝牙协议栈,分离服务端与客户端任务‌。

二、例程

1、选择例程

官方的例程有很多个,说实话我之前对蓝牙没什么了解,也没怎么应用过。

然后我问了一下AI,大概了解了一下

我现在应用需求是先透传看看,因为是电脑主动去连接esp32C3,所以选择服务端的例程

其他的我也百度了一下,gatt是低功耗蓝牙,spp是经典蓝牙的协议,还有其他例程是ios的、安卓、鼠标键盘的等等,这些用到的时候再了解吧,有点太多了

打开例程,很直观的先初始化

然后开中断

2、电脑连接

例程烧录之后,我用电脑连接发现连接失败,但是我手机nRF Connect是可以连接并且能收到数据的。

串口打印这里event10,然后就没有信息了

查看程序

是没有处理这个安全认证的

所以连接不上的原因应该是电脑发起了安全认证,但是我们的设备没有回复

我只能再次百度,找到了这个API

后来又来来回回改了安全参数:

最后是可以连接了,但是会在已配对和已连接2个状态一直跳。我再查了一下,是因为ESP32C3只支持ble,不能跟电脑直接连接(这里我是百度得出来的结论,有待查证)

3、用pc端工具连接

找了一个调试工具,附上连接,感谢大佬

PC端BLE调试工具——BLEDebug实现蓝牙/串口透传调试_pc蓝牙调试工具-CSDN博客

所以我在电脑下载个蓝牙助手先试试

这里跟手机nRF Connect的界面差不多,我给41这里发了cmd1,程序也收到了,但程序这里的值是2,还不太懂蓝牙,这里要研究一下uuid和handle,我只知道这里是可读可写

三、修改例程

1、led初始化

跟上一章一样

2、回调函数处修改

接收数据在这个gatts_profile_event_handler回调函数下

现在写入指令实现开关led灯,是执行的写入指令2,所以收到的event是ESP_GATTS_WRITE_EVT

然后在这里判断指令,我复制了一下上边caseSPP_IDX_SPP_COMMAND_VAL的创建数组

编译,烧录程序

四、演示

下边是拍了个视频,没有多余的手了,只能这样放板子拍

ESP32C3蓝牙点灯演示视频-CSDN直播

五、总结

1、esp32C3是否能跟电脑直连及低功耗蓝牙和经典蓝牙概念

先说概念:

①. 经典蓝牙(Bluetooth Classic)

  • 设计目标‌:
    针对‌持续、高带宽数据传输‌(如音频流、文件传输)。
  • 典型应用‌:
    • 无线耳机、音箱(音频传输)
    • 车载蓝牙(电话/音乐)
    • 传统外设(键盘、鼠标)
  • 关键特性‌:
    • 传输速率高‌:经典蓝牙 3.0 支持最高 24 Mbps(EDR 增强模式)。
    • 持续连接‌:适合长时间数据流传输,但功耗较高。
    • 协议架构‌:基于 ‌RFCOMM‌(串口模拟)、‌SPP‌(串口协议)、‌A2DP‌(音频传输)等协议。

‌②. 低功耗蓝牙(BLE)

  • 设计目标‌:
    专为‌间歇性、低功耗数据传输‌优化,适合电池供电设备。
  • 典型应用‌:
    • 健康传感器(心率、温度)
    • 智能家居设备(低功耗传感器)
    • 物联网设备(如信标、追踪器)
  • 关键特性‌:
    • 超低功耗‌:BLE 设备在睡眠模式下电流可低至 μA 级。
    • 短时通信‌:数据通过短脉冲传输,连接后快速进入休眠。
    • 协议架构‌:基于 ‌GATT‌(通用属性协议)和 ‌ATT‌(属性协议),通过“服务”和“特征值”定义数据交互。

然后这是esp32C3的数据手册,上边只对低功耗蓝牙进行了描述,并没有说明支持经典蓝牙

esp32-c3_datasheet_en.pdf

但我查了很久,得到这样的信息“”基于 BLE GATT 协议自定义服务,创建特征值用于发送和接收数据(如 FFE1 特征),并启用读写/通知属性‌ ,将串口数据(UART)与 BLE 特征值绑定,实现双向数据传输‌ ”这种方法是可以实现。这个我要再研究研究

2、uuid

UUID‌ 是蓝牙设备中用于唯一标识服务(Service)或功能(Characteristic)的“身份证号”。比如:心率服务用 0000180D-...,电量用 00002A19-...,类似身份证上的姓名和用途。开发者可自创UUID(如 ABCD1234-...),避免和其他服务重复

3、handle

‌Handle‌ 是蓝牙协议栈中用于‌唯一标识资源‌的‌临时句柄‌,主要用于协议内部快速访问和管理属性(Attribute)、服务(Service)或特征值(Characteristic)‌

至于为什么我读到的handle和软件上显示的handle不同,可能是因为调试工具显示的 Handle=41 可能是特征值声明的起始位置

有可能会发生以下偏移:

[特征值声明Handle=41] → [读属性Handle=42] → [写属性Handle=43]

还是勉强完成了蓝牙和电脑通讯,还需要更多的去学习蓝牙相关的知识以及进一步的改进!

<think>嗯,用户想找ESP32-C3的演示示例或教程。首先,我需要回忆一下ESP32-C3的相关资料。ESP32-C3乐鑫推出的支持Wi-Fi和蓝牙5.0的RISC-V芯片,常用于物联网开发。用户提到的引用里提到了GATT通信、GAP连接,还有代码片段,可能他们需要具体的蓝牙部分示例,比如BLE服务器或客户端的实现。 用户可能已经看过站内的几篇参考资料,比如关于GATT数据发送和GAP主机连接,但需要更多资源。我应该先整理官方资源,因为乐鑫ESP-IDF框架有丰富的示例,这是最权威的。然后,第三方平台如GitHub和博客可能提供更多实际项目案例,比如传感器应用或低功耗配置。视频教程对视觉学习者有帮助,比如B站或YouTube上的教程。社区论坛像ESP32官方论坛和Stack Overflow也是解决问题的好地方。 用户可能需要具体的步骤,比如如何获取和运行示例代码,或者如何修改参数适应自己的项目。同时,常见问题如UUID设置、连接稳定性、数据格式转换可能也是他们关心的点。要确保回答结构清晰,分点列出,引用官方文档和社区资源,并附上链接方便用户访问。最后,生成相关问题帮助用户深入探索,比如优化BLE通信或结合Wi-Fi使用等。</think>### ESP32-C3 示例教程整理 以下是 ESP32-C3 的官方示例、第三方教程及关键实现逻辑整理: --- #### 一、官方资源 1. **ESP-IDF 示例代码** - **路径**:`esp-idf/examples`(安装 ESP-IDF 后自动包含) - **关键示例**: - **蓝牙低功耗 (BLE)**: - `bluetooth/bluedroid/ble/gatt_server`:BLE 服务器实现,包含特征值读写[^1] - `bluetooth/bluedroid/ble/gatt_client`:BLE 客户端扫描连接[^3] - **Wi-Fi**: - `wifi/getting_started/station`:基础 Wi-Fi 连接 - `wifi/power_save`:低功耗模式配置 - **操步骤**: ```bash # 克隆 ESP-IDF git clone --recursive https://github.com/espressif/esp-idf.git # 进入示例目录 cd esp-idf/examples/bluetooth/bluedroid/ble/gatt_server # 配置并编译 idf.py set-target esp32c3 idf.py menuconfig idf.py build flash monitor ``` 2. **乐鑫官方文档** - **BLE GATT 协议实现**:[GATT Server API 文档](https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32c3/api-reference/bluetooth/esp_gatts.html) - **GAP 主机连接示例**:通过 `esp_ble_gap_start_scanning()` 实现设备扫描[^3] --- #### 、第三方教程 1. **GitHub 项目** - **ESP32-C3-MINI-IoT-Example**:传感器数据上报 + BLE 控制[^1] - 实现逻辑: ```c // BLE 特征值回调 esp_ble_gatts_add_char(service_handle, &char_uuid, ...); // 数据发送 esp_ble_gatts_send_indicate(gatts_if, conn_id, char_handle, data_len, data, false); ``` - **ESP-NOW 通信示例**:多设备无线数据传输 2. **博客视频** - **B 站教程**:[ESP32-C3 BLE 入门](https://www.bilibili.com/video/BV1X44y1j7Yq)(含自定义数据格式解析) - **CSDN 指南**:[GATT 服务端配置](https://blog.csdn.net/xxx/article/details/xxx)(需替换 UUID 为 128 位格式) --- #### 三、关键问题解决 1. **自定义 UUID 配置** - 使用 128 位 UUID 避免冲突: ```c #define CUSTOM_SERVICE_UUID 0x12345678-1234-5678-1234-56789abcdef0 esp_bt_uuid_t service_uuid = {.len = ESP_UUID_LEN_128, .uuid = {.uuid128 = CUSTOM_SERVICE_UUID}}; ``` 2. **连接稳定性优化** - 调整连接间隔: ```c esp_ble_gap_update_conn_params(&conn_params); ``` --- #### 四、常见调试工具 1. **nRF Connect App**:用于扫描 BLE 设备并查看服务/特征值 2. **Wireshark + ESP32-C3 Sniffer**:抓包分析 BLE 协议交互 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Try1harder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值