ESP32的wifi模块


蓝牙和WIFI是ESP32的核心功能,蓝牙和wifi的共存也是esp32的独门武功,但时候后续也会发现共存的时候会有很多问题。不管怎样,蓝牙和wifi在esp-idf中有很多的例子,大家都可以参考。本篇只做简单的流程介绍。

蓝牙a2dp sink的初始化

蓝⽛牙是⼀一种短距通信系统,其关键特性包括鲁棒性、低功耗、低成本等。蓝⽛系统分为两种不不同的技术:经典蓝牙 (Classic Bluetooth) 和蓝⽛牙低功耗 (Bluetooth Low Energy)。ESP32 支持双模蓝⽛,即同时⽀支持经典蓝⽛和蓝牙低功耗。

我们的项目蓝牙方面只是用了A2DP,基本上从esp-idf/examples/bluetooth/a2dp_sink的示例代码修改来的,大部分未做改动,

esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
if (esp_bt_controller_init(&bt_cfg) != ESP_OK) {
    ESP_LOGE(BT_AV_TAG, "%s initialize controller failed\n", __func__);
    return;
}
if (esp_bt_controller_enable(ESP_BT_MODE_BTDM) != ESP_OK) {
    ESP_LOGE(BT_AV_TAG, "%s enable controller failed\n", __func__);
    return;
}
if (esp_bluedroid_init() != ESP_OK) {
    ESP_LOGE(BT_AV_TAG, "%s initialize bluedroid failed\n", __func__);
    return;
}
if (esp_bluedroid_enable() != ESP_OK) {
    ESP_LOGE(BT_AV_TAG, "%s enable bluedroid failed\n", __func__);
    return;
}
/* create application task */
bt_app_task_start_up();

/* Bluetooth device name, connection mode and profile set up */
bt_app_work_dispatch(bt_av_hdl_stack_evt, BT_APP_EVT_STACK_UP, NULL, 0, NULL);

我们的设备类似蓝牙音箱的功能,在使用a2dp的过程中也是有很多bug的,比方说暂停后杂音、蓝牙声音卡顿、系统panic等,希望后续的esp-idf都已经解决了,如果遇到类似的问题,我们也可以在博客中讨论,在此就不一一赘述了。

Wifi的初始化

Wifi的初始化比较简单,所调用的API如下,后续的Wifi状态就是用回调处理的。
esp-idf示例:

esp-idf/examples/wifi/simple_wifi

void initialise_wifi()
{
    tcpip_adapter_init();
    global_wifi_event_group = xEventGroupCreate();
    ESP_ERROR_CHECK( esp_event_loop_init(event_handler, NULL) );

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();

    ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
    ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_STA) );
    ESP_ERROR_CHECK( esp_wifi_start() );
    status.wifi_init_done = true;
}

ESP32所支持的Wifi的模式还是很丰富的:
Station模式、AP模式、Station和AP共存模式、混杂模式(用于监听Wifi包)、

WIFI的配置

IOT设备通常没有界面交互,所以当他作为station的时候,都面临一个问题,Wifi所连接的AP的ssid和密码如何配置呢?
ESP已经贴心的为我们想到了,并且提供了集中方式:

SmartConfig

SmartConfig 需要手机上一个APP来配合,手机APP来广播AP的SSID和PASSWORD,ESP32来监听空口上传输特定的包,并且从这些包中解析出SSID和PASSWORD。
上层的逻辑大致如此,底层的协议没有细看,应该是采用了802.11的某些机制来扩展的。
我们项目的配置用的是SmartConfig,目前来看效果还不错,成功率很高。

ESP NOW

ESP NOW是乐鑫自己定义的无连接的WIFI通讯协议,数据被封装在vendor-specific的的帧来传输。详细了解的话可以看文档。

自定义方案

如果支持蓝牙的话,也可以通过蓝牙来配置WIFI;
也可以设备默认为AP模式,客户端连上后配置WIFI之后切换成STATION模式;
这两种方案都需要较多的开发。

原创文章 27 获赞 56 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_46233323/article/details/105714647