我正在尝试构建一个esp32应用程序,在该应用程序中我同时启用了蓝牙和wifi。
蓝牙与a2dp配置文件一起使用,其中esp是接收器。接收到数据后,应通过UDP套接字发布该数据,以广播到网络。
问题是天线。 bt和wifi都在共享它。 a2dp流似乎永久获取天线并很少释放它(〜2个包/分钟,我有〜3000个包/分钟)。
所以我的问题是:是否可以获取某种信号量以完全控制天线?这样我的套接字就能将数据发送到网络了吗?
我将我的esp32与freeRTOS一起使用。 freeRTOS库是用C编写的,但是我正在尝试将所有内容都包装在C++中。我仍然认为此问题与C库有关,因此我将其标记为C。
我愿意就如何构建它提出任何建议。提前致谢。
UPDATE :
我正在使用官方release/v3.3
存储库中的esp-idf
。
我有:CONFIG_SW_COEXIST_ENABLE=y
和CONFIG_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中
最佳答案
如您所见,蓝牙在WIFI上具有更高的优先级。
查看CONFIG_SW_COEXIST_ENABLE并确保已启用它。您还需要将CONFIG_SW_COEXIST_PREFERENCE配置为WIFI。请参阅该页面,以获得可以根据您的应用程序进行更新的其他标志。
如果要保留负责处理共存设备(BL和WIFI)的硬件,则可以禁用CONFIG_SW_COEXIST_ENABLE
并减小扫描窗口并增加BL的扫描间隔,以留出时间让WIFI可以访问天线。有关更多详细信息,请参见此post。
回答关于可能的信号量/互斥量的原始问题。我怀疑是否有一个可供您使用的可访问性,而我将让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
关于freertos - 为esp32天线获取信号量(蓝牙/wifi双模),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55865909/