当前位置: 首页 > article >正文

别再傻傻分不清!用ESP32和Arduino IDE实战,5分钟搞懂BLE服务与特征值

ESP32与BLE实战用Arduino IDE五分钟掌握服务与特征值刚拿到ESP32开发板时我被BLE文档里那些Service、Characteristic、UUID之类的术语绕得头晕。直到有一次我试着用手机APP控制板载LED才发现这些概念其实就像超市的货架系统——服务是商品大类如生鲜特征是具体商品如三文鱼而UUID就是条形码。今天我们就用Arduino IDE通过真实代码带你看懂这套商品分类系统。1. 环境准备从零搭建BLE实验平台打开Arduino IDE时记得先安装ESP32开发板支持包。就像给新手机装SIM卡这是让IDE识别ESP32的关键步骤。在首选项的附加开发板管理器网址中添加https://dl.espressif.com/dl/package_esp32_index.json然后在工具菜单选择开发板管理器搜索安装esp32。提示国内用户可能会遇到下载缓慢的问题可以尝试将网址替换为国内镜像源安装完成后你需要准备以下硬件ESP32开发板推荐带板载LED的型号如ESP32-DevKitCMicro USB数据线智能手机支持BLE功能验证环境是否正常工作可以上传一个简单的闪烁LED程序void setup() { pinMode(2, OUTPUT); // 多数ESP32开发板的板载LED连接在GPIO2 } void loop() { digitalWrite(2, HIGH); delay(1000); digitalWrite(2, LOW); delay(1000); }2. BLE基础服务与特征值的超市模型想象走进一家智能超市BLE设备就像这里的商品管理系统。每个商品区域Service有特定功能比如生鲜区提供新鲜食品家电区提供电子产品。在BLE中这些区域就是服务每个服务都有唯一的UUID作为标识。特征值则是区域里的具体商品。比如在生鲜区服务UUID:0x180A里可能有三文鱼特征UUID:0x2A00、牛排特征UUID:0x2A01等。这些特征值决定了你能对设备做什么操作属性类型操作权限典型应用场景READ只读读取传感器数据WRITE写入控制设备参数NOTIFY通知实时数据推送标准UUID就像国际通用的商品分类代码。蓝牙技术联盟(SIG)定义了一些常用服务的16位短UUID# 常见BLE服务UUID DEVICE_INFO_SERVICE 0x180A # 设备信息服务 BATTERY_SERVICE 0x180F # 电池服务 HEART_RATE_SERVICE 0x180D # 心率服务3. 实战演练创建简易BLE温度计让我们用ESP32模拟一个带温度传感器的BLE设备。这个例子会包含两个服务设备信息服务(0x180A)和自定义温度服务。首先在Arduino中引入BLE库#include BLEDevice.h #include BLEServer.h #include BLEUtils.h #include BLE2902.h然后设置服务和特征值// 创建BLE设备 BLEDevice::init(ESP32_Thermometer); BLEServer *pServer BLEDevice::createServer(); // 设备信息服务 BLEService *pDeviceInfoService pServer-createService(180A); BLECharacteristic *pManufacturerName pDeviceInfoService-createCharacteristic( 2A29, BLECharacteristic::PROPERTY_READ); pManufacturerName-setValue(MakerSpace); pDeviceInfoService-start(); // 自定义温度服务 BLEService *pTempService pServer-createService(181A); BLECharacteristic *pTempCharacteristic pTempService-createCharacteristic( 2A6E, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY); pTempCharacteristic-addDescriptor(new BLE2902()); pTempService-start();这段代码创建了一个具有以下结构的BLE设备设备信息服务 (180A)制造商名称特征 (2A29): 只读属性值为MakerSpace温度服务 (181A)温度测量特征 (2A6E): 支持读取和通知功能包含一个描述符(2902)用于启用通知4. 手机端交互用APP验证BLE服务现在你可以在手机上下载任意BLE调试APP如nRF Connect搜索并连接ESP32_Thermometer。连接成功后你会看到两个服务Generic Access (1800): 这是所有BLE设备都有的默认服务Device Information (180A): 我们添加的设备信息服务Environmental Sensing (181A): 我们的自定义温度服务点击Manufacturer Name String特征你应该能看到之前设置的MakerSpace值。虽然我们现在还没有实现真正的温度读取逻辑但框架已经搭建完成。注意如果APP中看不到服务尝试重启ESP32或关闭重新打开手机蓝牙要让温度服务真正工作可以添加模拟温度数据生成的代码void updateTemperature() { static float temp 20.0; // 初始温度 temp (random(0, 20) - 10) * 0.1; // 随机温度波动 uint8_t tempData[5]; memcpy(tempData, temp, sizeof(temp)); pTempCharacteristic-setValue(tempData, sizeof(tempData)); pTempCharacteristic-notify(); } void loop() { updateTemperature(); delay(2000); // 每2秒更新一次温度 }5. 进阶技巧处理BLE连接事件实际应用中我们需要处理设备连接和断开事件。ESP32的BLE库提供了相应的回调机制class MyServerCallbacks: public BLEServerCallbacks { void onConnect(BLEServer* pServer) { digitalWrite(2, HIGH); // 连接时点亮LED } void onDisconnect(BLEServer* pServer) { digitalWrite(2, LOW); // 断开时熄灭LED pServer-startAdvertising(); // 重新开始广播 } }; // 在setup()中添加 pServer-setCallbacks(new MyServerCallbacks());这个例子展示了几个关键点使用板载LED作为连接状态指示灯设备断开后自动重新广播回调机制让代码更模块化6. 调试与问题排查当BLE项目不按预期工作时可以按照以下步骤排查检查设备是否可见确保ESP32正在广播手机蓝牙已开启且兼容BLE验证服务UUID确认手机APP中显示的服务UUID与代码一致注意大小写和连字符格式特征属性匹配尝试读取的特征必须具有READ属性尝试写入的特征必须具有WRITE属性常见错误及解决方案错误现象可能原因解决方法无法发现设备未启动广播调用startAdvertising()连接立即断开电源不稳定检查USB连接或使用外部电源特征操作失败属性不匹配检查特征创建时的PROPERTY参数BLE开发中最有用的调试工具是串口输出。在关键节点添加Serial.println()语句可以清晰了解程序执行流程Serial.begin(115200); Serial.println(BLE设备初始化完成);第一次成功让手机APP读取到ESP32发送的温度数据时那种成就感就像解开了魔法谜题。BLE看似复杂但一旦理解了服务和特征的组织方式剩下的就是按部就班的实现了。

相关文章:

别再傻傻分不清!用ESP32和Arduino IDE实战,5分钟搞懂BLE服务与特征值

ESP32与BLE实战:用Arduino IDE五分钟掌握服务与特征值 刚拿到ESP32开发板时,我被BLE文档里那些Service、Characteristic、UUID之类的术语绕得头晕。直到有一次,我试着用手机APP控制板载LED,才发现这些概念其实就像超市的货架系统—…...

AGI发明人署名权正在消失:当LLM贡献度超65%,谁才是法律意义上的“发明人”?——国家知识产权局内部研讨纪要节选(限2024Q3前获取)

第一章:AGI的知识产权与专利分析 2026奇点智能技术大会(https://ml-summit.org) 通用人工智能(AGI)的研发正加速进入全球知识产权博弈的核心地带。与传统AI不同,AGI系统涉及跨模态认知架构、自主目标建模、元学习推理引擎等高度…...

程序员面试:OpenClaw生成面试题、模拟面试,高效备战面试

程序员面试:OpenClaw生成面试题、模拟面试,高效备战面试引言在当今竞争激烈的科技行业中,程序员面试已成为求职过程中的关键环节。无论是应届毕业生还是资深开发者,面对算法题、系统设计题和行为问题,都可能感到压力重…...

别再只用yum了!CentOS 7下编译安装OpenSSH 8.2p1的完整避坑指南(附zlib/OpenSSL依赖处理)

别再只用yum了!CentOS 7下编译安装OpenSSH 8.2p1的完整避坑指南(附zlib/OpenSSL依赖处理) 在CentOS 7的生产环境中,系统自带的OpenSSH版本往往无法满足最新的安全需求。虽然yum提供了便捷的升级方式,但官方仓库的更新滞…...

HR必备:OpenClaw批量筛选简历、发送面试通知,优化招聘流程

OpenClaw:重塑高效招聘,批量筛选简历与智能发送面试通知的实践指南引言:数字化时代招聘的挑战与机遇在当今竞争激烈的人才市场中,招聘已成为企业发展的核心驱动力之一。人力资源部门(HR)肩负着寻找、吸引、…...

告别‘True’焦虑:TensorFlow-GPU安装后,用这5个测试方法彻底验证你的CUDA环境是否真的能用

深度验证TensorFlow-GPU环境:超越is_gpu_available()的5种实战诊断方案 当你看到tf.test.is_gpu_available()返回True时,是否曾暗自怀疑这个结果的可信度?许多开发者发现,即便终端显示GPU已启用,模型训练速度却未见提升…...

错过这轮AGI城市升级窗口期,你的城市将掉队至少7.2年——基于世界银行2023-2030跨区域效能衰减模型

第一章:AGI驱动的城市系统范式迁移 2026奇点智能技术大会(https://ml-summit.org) 传统城市操作系统依赖于预设规则、静态模型与人工干预的闭环控制逻辑,而AGI的深度认知能力、跨域泛化推理与实时因果建模,正从根本上重构城市系统的运行底层…...

手把手教你为嵌入式设备编写一个简单的电池驱动(基于Linux Power Supply框架)

手把手教你为嵌入式设备编写一个简单的电池驱动(基于Linux Power Supply框架) 当你拿到一款新的嵌入式设备,尤其是带有电池的便携式产品时,如何快速为其开发一个可靠的电池状态监控驱动?Linux内核提供的Power Supply子…...

OpenUserJS.org 快速上手指南:3大挑战与实用解决方案

OpenUserJS.org 快速上手指南:3大挑战与实用解决方案 【免费下载链接】OpenUserJS.org The home of FOSS user scripts. 项目地址: https://gitcode.com/gh_mirrors/op/OpenUserJS.org OpenUserJS.org 是一个开源的用户脚本托管平台,专为开发者提…...

从零到一:在NVIDIA Omniverse中构建你的首个USD机器人场景

1. 认识NVIDIA Omniverse与USD格式 第一次打开NVIDIA Omniverse时,我被它的界面震撼到了——这哪里是开发工具,分明是未来世界的入口啊!作为一个在机器人仿真领域摸爬滚打多年的老手,我必须说Omniverse彻底改变了我们构建3D场景的…...

芯片后端设计入门:搞懂LEF和DEF文件,别再让工具报PHYS-*错误了

芯片后端设计实战:LEF与DEF文件深度解析与排错指南 第一次打开EDA工具准备大展拳脚时,屏幕上突然跳出的"PHYS-4"错误提示就像一盆冷水浇下来——这种体验恐怕每个芯片后端工程师都记忆犹新。LEF和DEF文件作为物理设计流程中的"交通规则&q…...

鸣潮玩家必看:ok-ww如何用3个步骤彻底解放你的游戏时间

鸣潮玩家必看:ok-ww如何用3个步骤彻底解放你的游戏时间 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 你是否曾经计算…...

今天不看SITS2026这页PPT,明年招标书里将彻底消失“传统机器人”术语

第一章:SITS2026演讲:AGI与机器人结合 2026奇点智能技术大会(https://ml-summit.org) 核心范式转变 传统机器人系统依赖预编程行为树与模块化感知-决策-执行链路,而SITS2026展示的AGI驱动架构将大语言模型(LLM)与具身…...

托利多BCOM条码秤核心功能配置与实战调优指南

1. 网络配置:让条码秤稳定联网的实战技巧 第一次接触托利多BCOM条码秤时,最让我头疼的就是网络配置问题。记得有次在超市部署新秤,明明按照手册操作却始终连不上系统,后来才发现是子网掩码设置出了问题。下面这些实战经验&#xf…...

AGI能否逆转2℃升温路径?——2026奇点大会现场演示“气候-能源-政策”三重耦合仿真系统,结果震惊IPCC代表

第一章:AGI能否逆转2℃升温路径?——2026奇点大会现场演示“气候-能源-政策”三重耦合仿真系统,结果震惊IPCC代表 2026奇点智能技术大会(https://ml-summit.org) 在新加坡滨海湾金沙会议中心主会场,DeepClimate AGI平台首次实时…...

从投稿到接收:一份给Applied Soft Computing作者的完整Latex排版与提交保姆级教程

从投稿到接收:一份给Applied Soft Computing作者的完整LaTeX排版与提交保姆级教程 当你完成了一篇高质量的研究论文,准备向Applied Soft Computing投稿时,如何确保你的稿件在技术格式上完全符合期刊要求?这篇文章将带你走过从下载…...

军事AI伦理失守代价全测算,单次越界决策可能导致$2.8B国际追责与《日内瓦公约》升级修订,你准备好了吗?

第一章:AGI与军事应用的伦理边界 2026奇点智能技术大会(https://ml-summit.org) 通用人工智能(AGI)在军事系统中的深度集成正以前所未有的速度推进,但其自主决策能力与杀伤链闭环化趋势,已实质性挑战传统战争法与人类…...

3步掌握FanControl:实现Windows风扇精准控制的完整指南

3步掌握FanControl:实现Windows风扇精准控制的完整指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

AGI不是功能叠加,而是认知重编译:2026奇点大会发布的《产品智能成熟度评估矩阵v3.1》深度拆解

第一章:AGI不是功能叠加,而是认知重编译:2026奇点大会发布的《产品智能成熟度评估矩阵v3.1》深度拆解 2026奇点智能技术大会(https://ml-summit.org) 《产品智能成熟度评估矩阵v3.1》(简称PIMM v3.1)彻底摒弃了以“能…...

从VMAF到GAN:手把手教你搭建视频质量评估体系(附FFmpeg实战代码)

从VMAF到GAN:构建下一代视频质量评估体系的工程实践 视频质量评估一直是算法工程师面临的核心挑战。当用户抱怨"视频模糊"时,我们究竟该如何量化这种主观体验?传统PSNR指标与肉眼感知的差距可能高达30%,而VMAF的引入虽然…...

AGI系统性偏差检测实战指南(工业级质量门禁清单V2.3)

第一章:AGI系统性偏差检测的理论基石与工业级质量门禁演进 2026奇点智能技术大会(https://ml-summit.org) AGI系统性偏差并非孤立的模型输出异常,而是多层级认知架构中语义表征、推理路径与价值对齐机制在训练数据分布偏移、目标函数隐式假设及部署环境…...

AGI驱动的智能电网落地实战:7个已验证的能源调度模型,2025Q4起全面商用倒计时

第一章:2026奇点智能技术大会:AGI与能源管理 2026奇点智能技术大会(https://ml-summit.org) AGI驱动的实时能源调度范式 本届大会首次公开展示了基于通用人工智能架构的分布式能源协同调度系统(AEGIS)。该系统不再依赖预设规则或…...

深入解析Vivado AXI Quad SPI IP核:从寄存器配置到实战时序

1. AXI Quad SPI IP核基础入门 第一次接触Vivado中的AXI Quad SPI IP核时,我也被它复杂的寄存器配置搞得一头雾水。这个IP核本质上是一个通过AXI总线控制的SPI控制器,可以灵活配置为标准SPI、双线SPI或四线SPI模式。在实际项目中,我发现它特别…...

你的J-Link-OB驱动装对了吗?从驱动安装到MDK5/Keil配置的完整避坑流程

J-Link-OB驱动安装与MDK5配置全流程避坑指南 最近在调试STM32项目时,发现不少开发者卡在了J-Link-OB驱动安装和MDK5配置这个看似简单却暗藏玄机的环节。我自己也曾经因为一个驱动签名问题折腾了大半天,今天就把这些实战经验整理成完整的避坑手册。 1. 驱…...

专业PCB逆向分析利器:OpenBoardView深度实战指南

专业PCB逆向分析利器:OpenBoardView深度实战指南 【免费下载链接】OpenBoardView View .brd files 项目地址: https://gitcode.com/gh_mirrors/op/OpenBoardView OpenBoardView是一款专业的开源PCB文件查看器,专注于.brd电路板文件的逆向分析和可…...

TLK2711芯片的8B/10B编码与Comma发送详解:从原理到FPGA代码实现(附Verilog示例)

TLK2711芯片的8B/10B编码与Comma发送全解析:从原理到FPGA实现 高速串行通信领域,TLK2711作为TI的明星产品,其稳定性和性能一直备受工程师关注。但真正让这颗芯片发挥极致性能的关键,往往隐藏在那些看似简单的协议细节中——比如8B…...

WebPlotDigitizer完全指南:如何从图表图片中快速提取数值数据

WebPlotDigitizer完全指南:如何从图表图片中快速提取数值数据 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾经面…...

环晶芯获数千万元天使轮融资,无损回收载板技术打破先进封装成本困局

【导语:环晶芯科技近期完成数千万元天使轮融资,该公司是国内首家提出临时键合载板无损回收复用方案的企业,其技术可降低先进封装辅料成本,市场前景广阔。】先进封装载板回收难题待解在先进封装中,为加工超薄晶圆或器件…...

从《未来编年史》到现实:聊聊火星移民、世界政府与‘灵性科技’的百年预言靠谱吗?

火星移民、全球治理与意识科技:未来预言的现实可行性拆解 当SpaceX的星舰原型机在得克萨斯州的试验场轰然升空时,埃隆马斯克那句"让人类成为多行星物种"的宣言再次引发热议。与此同时,Neuralink的脑机接口技术已在人体试验中取得进…...

开源多波束声呐数据集:从原始回波到AI识别的关键一步

1. 为什么原始声呐数据对AI研究如此重要? 我第一次接触水下目标识别项目时,发现一个奇怪现象:明明声呐设备采集的是原始回波数据,但几乎所有开源数据集提供的都是经过厂商软件处理后的扇形图像。这就像厨师做菜时,只能…...