为esp32天线获取信号量(蓝牙/ wifi双模)

Dim*_*red 7 freertos esp32

我正在尝试构建一个esp32应用程序,同时启用了蓝牙和wifi。

蓝牙与a2dp配置文件一起使用,其中esp是接收器。收到数据后,应通过UDP套接字发布该数据,以广播到网络。

问题是天线。bt和wifi都在共享它。a2dp流似乎永久获取天线并很少释放它(〜2个包/分钟,我有〜3000个包/分钟)。

所以我的问题是:是否可以获取某种信号量以完全控制天线?这样我的套接字就能将数据发送到网络吗?

我将我的esp32与freeRTOS一起使用。freeRTOS库是用C编写的,但是我正在尝试将所有内容都包装在C ++中。我仍然认为此问题与C库有关,因此我将其标记为C。

我欢迎任何建议如何建立它。提前致谢。

更新

我正在使用release/v3.3官方esp-idf回购。

我有:CONFIG_SW_COEXIST_ENABLE=yCONFIG_SW_COEXIST_PREFERENCE_WIFI=y

CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE在配置中找不到。

提到的配置不起作用。

我尝试阅读该帖子,但在我的lib中找不到任何“ scan_window”或“ scan_interval”。据记载,它在某处,gap_api但找不到。

这是我的代码+配置:https : //github.com/Dimfred/esp32_bt_streamer

套接字客户端任务(应广播a2dp_msg)从此处开始:https : //github.com/Dimfred/esp32_bt_streamer/blob/master/main/app/event_handler.cpp#L22

从工作站/访问点/蓝牙/ a2dp弹出的所有事件都捕获在event_handler.hpp / cpp中

Sto*_*ogy 3

正如您所看到的,蓝牙比 WIFI 具有更高的优先级。

查看CONFIG_SW_COEXIST_ENABLE并确保它已启用。您还需要将CONFIG_SW_COEXIST_PREFERENCE配置为 WIFI。请参阅该页面,了解您可以根据您的应用程序更新的其他标志。

如果您想让硬件负责处理共存设备(BL 和 WIFI),您可以禁用CONFIG_SW_COEXIST_ENABLE并减少扫描窗口并增加 BL 的扫描间隔,为 WIFI 留出时间来访问天线。请参阅这篇文章了解更多详细信息。

回答有关可能的信号量/互斥体的原始问题。我怀疑是否有一个可供您使用,并且我会保留处理访问天线的共存模块的 API(软件)。但您始终可以检查设置后代码正在执行的操作CONFIG_SW_COEXIST_ENABLE(该标志已重命名为CONFIG_ESP32_WIFI_SW_COEXIST_ENABLE)。请参阅https://github.com/espressif/esp-idf/blob/81ca1c01395f604972fbf141cfbe49764a746023/components/esp_wifi/src/phy_init.c