zoukankan      html  css  js  c++  java
  • 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 ", __func__);
            return;
        }
        if (esp_bt_controller_enable(ESP_BT_MODE_BTDM) != ESP_OK) {
            ESP_LOGE(BT_AV_TAG, "%s enable controller failed ", __func__);
            return;
        }
        if (esp_bluedroid_init() != ESP_OK) {
            ESP_LOGE(BT_AV_TAG, "%s initialize bluedroid failed ", __func__);
            return;
        }
        if (esp_bluedroid_enable() != ESP_OK) {
            ESP_LOGE(BT_AV_TAG, "%s enable bluedroid failed ", __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模式;
        这两种方案都需要较多的开发。
  • 相关阅读:
    webApi2 结合uploadify 上传报错解决办法
    对特殊字符进行转移
    数据库事务MTDC出错解决办法
    查询数据所有的外键关系
    查询SQL阻塞语句
    Django介绍
    Docker简介
    Docker CE部署
    jQuery快速入门
    系统批量运维管理器paramiko详解
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/9409824.html
Copyright © 2011-2022 走看看