ESP32-C6移植ESP32的BLE部分代码踩过的坑

目录

【menuconfig中开启 Bluetooth】

【menuconfig中开启 4.2和5.0 BLE协议栈】

【4.2 和 5.0 BLE协议栈区别概述】

【莫名其妙编译失败或运行出问题】


【menuconfig中开启 Bluetooth】

1. 使用BLE要在menuconfig中开启 Bluetooth ,默认是不开启的,不开启会导致编译时找不到蓝牙相关的头文件

【menuconfig中开启 4.2和5.0 BLE协议栈】

2. ESP32-C6 的 BLE 默认只在 menuconfig 勾选 Enable BLE 5.0 features,不勾选 Enable BLE 4.2 features,这样会导致部分 BLE 代码报错(尤其是调用了4.2 features的API时)

FAILED: main.elf
cmd.exe /C "cd . && D:\ESP32IDF\.espressif\tools\riscv32-esp-elf\esp-13.2.0_20230928\riscv32-esp-elf\bin\riscv32-esp-elf-g++.exe -march=rv32imac_zicsr_zifencei -nostartfiles -march=rv32imac_zicsr_zifencei --specs=nosys.specs    -Wl,--cref -Wl,--defsym=IDF_TARGET_ESP32C6=0 -Wl,--Map=D:/ESP32IDF/ZZQ_Project/sample_project/build/main.map -Wl,--no-warn-rwx-segments -fno-rtti -fno-lto -Wl,--gc-sections -Wl,--warn-common -T esp32c6.peripherals.ld -T esp32c6.rom.ld -T esp32c6.rom.api.ld -T esp32c6.rom.rvfp.ld -T esp32c6.rom.newlib.ld -T esp32c6.rom.version.ld -T esp32c6.rom.phy.ld -T esp32c6.rom.coexist.ld -T esp32c6.rom.net80211.ld -T esp32c6.rom.pp.ld -T esp32c6.rom.wdt.ld -T esp32c6.rom.systimer.ld -T esp32c6.rom.newlib-normal.ld -T esp32c6.rom.heap.ld -T memory.ld -T sections.ld @CMakeFiles\main.elf.rsp -o main.elf  && cd ."
D:/ESP32IDF/.espressif/tools/riscv32-esp-elf/esp-13.2.0_20230928/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/13.2.0/../../../../riscv32-esp-elf/bin/ld.exe: esp-idf/main/libmain.a(main.c.obj): in function `esp_gap_cb':
D:/ESP32IDF/ZZQ_Project/sample_project/main/main.c:77:(.text.esp_gap_cb+0x2c): undefined reference to `esp_ble_gap_start_scanning'
D:/ESP32IDF/.espressif/tools/riscv32-esp-elf/esp-13.2.0_20230928/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/13.2.0/../../../../riscv32-esp-elf/bin/ld.exe: esp-idf/main/libmain.a(main.c.obj): in function `app_main':
D:/ESP32IDF/ZZQ_Project/sample_project/main/main.c:173:(.text.app_main+0x12e): undefined reference to `esp_ble_gap_set_scan_params'
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

【解决方案】

        可以尝试先仅在ESP32-C6的menuconfig 勾选 Enable BLE 5.0 features,如果编译出现问题,可以尝试也勾选 Enable BLE 4.2 features

【4.2 和 5.0 BLE协议栈区别概述】

        官方很多BLE例程都是基于BLE4.2的,BLE5.0的例程是单独列出来的,但是数量不多

        

        BLE 5.0和BLE 4.2特性区别

比如BLE4.2 开启BLE扫描的API:esp_ble_gap_start_scanning

       BLE5.0 开启BLE扫描的API:esp_ble_gap_start_ext_scan

比如BLE4.2 BLE扫描完成的事件:ESP_GAP_SEARCH_INQ_CMPL_EVT

       BLE5.0 BLE扫描完成的事件:ESP_GAP_BLE_SCAN_TIMEOUT_EVT

比如BLE4.2 BLE扫描结果的事件:ESP_GAP_BLE_SCAN_RESULT_EVT

       BLE5.0 BLE扫描结果的事件:ESP_GAP_BLE_EXT_ADV_REPORT_EVT

注意:

不管是ble4.2还是5.0协议栈,在扫描结果事件中都有可以触发的子事件,

比如4.2的ESP_GAP_SEARCH_INQ_CMPL_EVT是在

                                                                     ESP_GAP_BLE_SCAN_RESULT_EVT中使用,

比如5.0的ESP_BLE_GAP_SET_EXT_ADV_PROP_LEGACY是在

                                                             ESP_GAP_BLE_EXT_ADV_REPORT_EVT中使用。

【已解决】ESP32-S3蓝牙扫描修改了蓝牙扫描参数为1s,但为什么触发不了ESP_GAP_BLE_SCAN_TIMEOUT_EVT事件 - ESP32 Forum

【莫名其妙编译失败或运行出问题】

        当莫名其妙出现问题,尤其是在重命名.c或.h文件名、升级同一功能的API(如用BLE5.0函数替换BLE4.2函数)之后,在检查无误后可尝试下面操作:

        删除构建目录(即build目录下全部内容),删除.vscode目录下的全部内容

        

        然后重新 <ctrl + shift + p> 重新添加VS Code配置文件夹,再重新编译

非常好的ESP32 BLE教程:https://zhuanlan.zhihu.com/p/540521585

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值