ESP32那些事兒(六):功能開發之藍牙及WiFi功能


藍牙和WIFI是ESP32的核心功能,藍牙和wifi的共存也是esp32的獨門武功,但時候后續也會發現共存的時候會有很多問題。不管怎樣,藍牙和wifi在esp-idf中有很多的例子,大家都可以參考。本篇只做簡單的流程介紹。

    
    1、藍牙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都已經解決了,如果遇到類似的問題,我們也可以在博客中討論,在此就不一一贅述了。
 
2、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包)、
 
    3、WIFI的配置
    IOT設備通常沒有界面交互,所以當他作為station的時候,都面臨一個問題,Wifi所連接的AP的ssid和密碼如何配置呢?
    ESP已經貼心的為我們想到了,並且提供了集中方式:
 
    1)、SmartConfig
    SmartConfig 需要手機上一個APP來配合,手機APP來廣播AP的SSID和PASSWORD,ESP32來監聽空口上傳輸特定的包,並且從這些包中解析出SSID和PASSWORD。
    上層的邏輯大致如此,底層的協議沒有細看,應該是采用了802.11的某些機制來擴展的。
    我們項目的配置用的是SmartConfig,目前來看效果還不錯,成功率很高。
 
    2)、ESP NOW
    ESP NOW是樂鑫自己定義的無連接的WIFI通訊協議,數據被封裝在vendor-specific的的幀來傳輸。詳細了解的話可以看文檔。

 

 
    3)、自定義方案
    如果支持藍牙的話,也可以通過藍牙來配置WIFI;
    也可以設備默認為AP模式,客戶端連上后配置WIFI之后切換成STATION模式;
    這兩種方案都需要較多的開發。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM