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

ESP32C3中BLE开发问题汇总

ESP32C3中BLE开发问题汇总

乐鑫ESP模组开发环境搭建推荐视频:

https://www.bilibili.com/video/BV1114y1r7du/?vd_source=f30ed458197c93804045527a0032d6d4

乐鑫官网ESP-IDF编程指南

https://docs.espressif.com/projects/esp-idf/zh_CN/release-v5.4/esp32c3/get-started/index.html

本人使用的开发模组是ESP32C3(小米IOT模组)

请添加图片描述

该模组Flash烧录方式使用ESP-IDF的Flash Device命令,并长按上图中的GPIO9按钮,再短按CHIP_EN按钮,松开GPIO9按钮便可以进行烧写工作;具体的开发流程可以通过上述视频中学习。

项目背景

本项目是通过乐鑫BLE模组与APP通信,底层使用SPI与FPGA控制板进行通信;达到APP发送指令可以控制FPGA的效果。

请添加图片描述

APP-BLE问题汇总

1、APP->BLE,BLE固件报BT_GATT: GATTS_SendRsp conn_id: 3 waiting for op_code = 00错误
1.1、问题背景

在魔改gatt_server_service_table项目中,gatts_profile_event_handler函数用来处理各种GATT事件;其中在处理ESP_GATTS_READ_EVT读事件时,调用esp_ble_gatts_send_response向APP端发送APP需要获取的数据。然而APP端一直没有获取到数据,使用串口打印BLE日志输出显示BT_GATT: GATTS_SendRsp conn_id: 3 waiting for op_code = 00错误。

1.2、问题分析

首先,阅读ESP-IDF源码发现,该错误只有一处再gatt_api.c文件中

请添加图片描述

主要原因是tcb中的trans_id与esp_ble_gatts_send_response传入的trans_id不一致导致数据无法发送给APP。

1.3、解决方案

esp32问题贴:https://esp32.com/viewtopic.php?f=13&t=18763

将我们的table声明ESP_GATT_AUTO_RSP 改为 ESP_GATT_RSP_BY_APP 由APP控制response响应,问题解决。

2、APP->BLE,在APP-BLE之间传输(R/W)大量数据(>23Bytes)APP一般表现为读写操作,BLE固件显示BT_GATT: attribute value too long, to be truncated to 22。
2.1、问题背景

在解决完上述response问题后,传输小批量数据(<22Bytes)完全没有问题;当我们开始传输大量数据时(100Bytes)便出现上述错误。

2.2、问题分析

我使用的APP时安卓的BLE调试助手,一直报上述的问题;为了交叉验证,我是用IOS的LightBlue进行调试发现可以单次传输(R/W)400Bytes的数据;问题应该出现在APP端了,但是该问题是由于BLE固件导致的,上面我们解决response时将ESP_GATT_AUTO_RSP 改为 ESP_GATT_RSP_BY_APP,就是将RSP的能力交由给APP端来控制了。

2.3、解决方案

修改APP端开源代码,将buffer的限制从23调整为512可以解决问题;或使用IOS端的LightBlue APP进行调试工作。

BLE-SPI问题汇总

魔改ESP-IDF的hd_eeprom demo代码,通过使用SPI总线实现BLE->FPGA(/MCU/其他设备)。

1、SPI-Bus声明
1.1、问题背景

将乐鑫的ESP32C3模组与我们FPGA产品使用SPI总线连接起来。魔改hd_eeprom工程代码,在spi_bus_initialize函数需要传入一个host_id用来指定SPI外设总线。

1.2、问题分析

请添加图片描述

在初始化时,使用SPI1_HOST进行初始化BUS操作,从spi_types.h文件中的spi_host_device_t(上图)可知SPI1已经被ESP32内部使用了。

1.3、解决方案

使用SPI2_HOST作为我们的SPI外设BUS,问题可解。

http://www.xdnf.cn/news/12203.html

相关文章:

  • 数字图像处理第二次实验
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(32):そうやすいにくいすぎ(過ぎ)
  • 链表相关知识
  • 一键切换不同状态,3D数字孪生场景搭建更便捷!
  • 【iOS】cache_t分析
  • Qt 按钮类控件(Push Button 与 Radio Button)(1)
  • COMSOL学习笔记-静电场仿真
  • 可视化图解算法48:有效括号序列
  • DFORMER: RETHINKING RGBD REPRESENTATION LEARNING FOR SEMANTIC SEGMENTATION 论文浅析
  • 电厂数字孪生:智能优化助力碳中和
  • 【定昌linux开发板】设置用户密码过期时间
  • eNSP实现WDS手拉手业务
  • 如何做好一份技术文档?(上篇)
  • Spring AI(11)——SSE传输的MCP服务端
  • Spring Plugin框架应用实践:医院多租户客户端动态路由方案解析
  • App使用webview套壳引入h5(二)—— app内访问h5,顶部被手机顶部菜单遮挡问题,保留顶部安全距离
  • 两个错误教训记录--java变量作用域问题导致变量值异常
  • calico/node is not ready: BIRD is not ready: BGP not established with xxx
  • sumatraPDF设置深色界面
  • ArcGIS Maps SDK for JavaScript:使用图层过滤器只显示FeatureLayer的部分要素
  • LG P9990 [Ynoi Easy Round 2023] TEST_90 Solution
  • 风机下引线断点检测算法实现
  • 免费wordpress模板下载
  • Astro深度解析:颠覆传统的前端架构革命,打造极致性能的现代Web应用
  • KMP 算法中 next 数组的构建函数 get_next
  • linux-------------------------进程间通信(上)
  • QMetaObject::invokeMethod调用失败
  • 摄像机ISP处理流程
  • 【面经分享】京东
  • springboot实现查询学生