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

news2025/5/13 1:23:22

一、当前需求

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

之前做过类似的,但主机和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]

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2338343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NHANES指标推荐:CMI

文章题目:Association between cardiometabolic index and biological ageing among adults: a population-based study DOI:10.1186/s12889-025-22053-3 中文标题:成年人心脏代谢指数与生物衰老之间的关系:一项基于人群的研究 发…

前端单元测试实战:如何开始?

实战:如何开始单元测试 1.安装依赖 npm install --save-dev jest2.简单的例子 首先,创建一个 sum.js 文件 ./sum.js function sum(a, b) {return a b; }module.exports sum;创建一个名为 sum.test.js 的文件,这个文件包含了实际测试内…

react-native搭建开发环境过程记录

主要参考:官网的教程 https://reactnative.cn/docs/environment-setup 环境介绍:macos ios npm - 已装node18 - 已装,通过nvm进行版本控制Homebrew- 已装yarn - 已装ruby - macos系统自带的2.2版本。watchman - 正常安装Xcode - 正常安装和…

观察者模式详解与C++实现

1. 模式定义 观察者模式(Observer Pattern)是一种行为型设计模式,定义了对象间的一对多依赖关系。当一个对象(被观察者/主题)状态改变时,所有依赖它的对象(观察者)都会自动收到通知…

UE5 关卡序列

文章目录 介绍创建一个关卡序列编辑动画添加一个物体编辑动画时间轴显示秒而不是帧时间轴跳转到一个确定的时间时间轴的显示范围更改关键帧的动画插值方式操作多个关键帧 播放动画 介绍 类似于Unity的Animation动画,可以用来录制场景中物体的动画 创建一个关卡序列…

AI测试用例生成平台

AI测试用例生成平台 项目背景技术栈业务描述项目展示项目重难点 项目背景 针对传统接口测试用例设计高度依赖人工经验、重复工作量大、覆盖场景有限等行业痛点,基于大语言模型技术实现接口测试用例智能生成系统。 技术栈 LangChain框架GLM-4模型Prompt Engineeri…

C#中扩展方法和钩子机制使用

1.扩展方法: 扩展方法允许向现有类型 “添加” 方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像实例方法一样进行调用。 使用场景: 1.当无法修改某个类的源代码&#…

YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12的网络结构图

文章目录 一、YOLOv5二、YOLOv6三、YOLOv7四、YOLOv8五、YOLOv9六、YOLOv10七、YOLOv11八、YOLOv12九、目标检测系列文章 本文将给出YOLO各版本(YOLOv5、YOLOv6、YOLOv7、YOLOv8、YOLOv9、YOLOv10、YOLOv11、YOLOv12)网络结构图的绘制方法及图。本文所展…

03 UV

04 Display工具栏_哔哩哔哩_bilibili 讲的很棒 ctrlMMB 移动点 s 打针 ss 批量打针

AIGC-几款本地生活服务智能体完整指令直接用(DeepSeek,豆包,千问,Kimi,GPT)

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi)👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资…

C#/.NET/.NET Core拾遗补漏合集(25年4月更新)

前言 在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。 ✍C#/.NET/.N…

MySQL性能调优(三):MySQL中的系统库(简介、performance_schema)

文章目录 MySQL性能调优数据库设计优化查询优化配置参数调整硬件优化 1.MySQL中的系统库1.1.系统库简介1.2.performance_schema1.2.1.什么是performance_schema1.2.2.performance_schema使用1.2.3.检查当前数据库版本是否支持1.2.4.performance_schema表的分类1.2.5.performanc…

印度zj游戏出海代投本土网盟广告核心优势

印度游戏出海代投本土网盟广告的核心优势包括: 本土化广告策略:针对印度市场的特点,定制本土化的广告策略,吸引更多印度用户的关注和参与。 深度了解印度市场:对印度文化、消费习惯、网络使用习惯等有深入了解&#x…

NO.97十六届蓝桥杯备战|数论板块-最大公约数和最小公倍数|欧几里得算法|秦九韶算法|小红的gcd(C++)

约数和倍数 如果a 除以b 没有余数,那么a 就是b 的倍数,b 就是a 的约数,记作b ∣ a 。 约数,也称因数。 最⼤公约数和最⼩公倍数 最⼤公约数Greatest Common Divisor,常缩写为gcd。 ⼀组整数的公约数,是…

《软件设计师》复习笔记(11.6)——系统转换、系统维护、系统评价

目录 一、遗留系统(Legacy System) 定义: 特点: 演化策略(基于价值与技术评估): 高水平 - 低价值: 高水平 - 高价值: 低水平 - 低价值: 低水平 - 高价…

人像面部关键点检测

此工作为本人近期做人脸情绪识别,CBAM模块前是否能加人脸关键点检测而做的尝试。由于创新点不是在于检测点的标注,而是CBAM的改进,因此,只是借用了现成库Dilb与cv2进行。 首先,下载人脸关键点预测模型:Index of /file…

EDID结构

EDID DDC通讯中传输显示设备数据 VGA , DVI 的EDID由128字节组成,hdmi的EDID增加扩展块128字节。扩展快的内容主要是和音频属性相关的,DVI和vga没有音频,hdmi自带音频,扩展快数据规范按照cea-861x标准。 Edid为了让pc或其他的图像…

文件包含(详解)

文件包含漏洞是一种常见的Web安全漏洞,其核心在于应用程序未对用户控制的文件路径或文件名进行严格过滤,导致攻击者能够包含并执行任意文件(包括本地或远程恶意文件)。 1. 文件包含原理 动态文件包含机制 开发者使用动态包含函数…

《SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战》​

🌟 ​大家好,我是摘星!​ 🌟 今天为大家带来的是Scheduled和Quartz对比分析: 新手常见困惑: 刚学SpringBoot时,我发现用Scheduled写定时任务特别简单。但当我看到同事在项目里用Quartz时&…

安装fvm可以让电脑同时管理多个版本的flutter、flutter常用命令、vscode连接模拟器

打开 PowerShellfvm安装 dart pub global activate fvm安装完成后,如果显示FVM无法识别,那么需要去添加环境变量path添加这个:C:\Users\Administrator\AppData\Local\Pub\Cache\bin 常用命令 fvm releases 查看用户可以装的flutter版本fvm l…