ESP32 藍牙耳機

第11章 ESP32 藍牙耳機html

 

概述api

    本文爲ESP32 學習,藍牙耳機,更多學習目錄請查閱ESP32學習目錄
app

11.1 基本概念

    須要知道幾個概念,A2DP(Advance Audio Distribution Profile)藍牙立體聲音頻傳輸規範,AVRCP(Audio Video Remote Control Profile)音頻/視頻遠程控制配置文件,具體請參考維基百科。框架

    暫時只是簡單的理解,後續更新...ide

11.2 功能分析

    目前ESP32支持藍牙功能有...函數

11.3 代碼分析

    針對於用戶主要有以下幾個文件須要仔細分析學習

"bt.h"
"bt_app_core.c.h"
"bt_app_av.c.h"
"esp_bt_main.c.h"
"esp_bt_device.c.h"
"esp_gap_bt_api.c.h"
"esp_a2dp_api.c.h"
"esp_avrc_api.c.h"
main.c.hspa

11.3.1調用關係:orm

    暫時麼有能力徹底搞懂每一個函數調用關係。視頻

11.3.2使用方法:

A.初始化全部必要模塊(參考ESP32_DEMO),鏈接部分ESP32本身的協議棧負責(經過log觀察部分處理邏輯)
(感受像是 bt_app_core 系統框架,那麼handler和device在哪裏?)
init
{
nvs_flash_init();// 存儲哪些數據呢?
esp_bt_controller_init();
esp_bt_controller_enable();
esp_bluedroid_init();
esp_bluedroid_enable();
}
task_start
{
bt_app_task_start_up();

// 經過回調,調用下device name ,connection and profile.
bt_app_work_dispatch(bt_av_hdl_stack_evt, BT_APP_EVT_STACK_UP, NULL, 0, NULL);
}
bluetooth device name, connection mode and profile set up
{
esp_bt_dev_set_device_name(dev_name);

/* initialize A2DP sink */
esp_a2d_register_callback(&bt_app_a2d_cb);
esp_a2d_register_data_callback(bt_app_a2d_data_cb);
esp_a2d_sink_init();

/* initialize AVRCP controller */
esp_avrc_ct_init();
esp_avrc_ct_register_callback(bt_app_rc_ct_cb);

/* set discoverable and connectable mode, wait to be connected */
esp_bt_gap_set_scan_mode(ESP_BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE);
}

B.對接收到的數據進行處理(接收的數據暫時人爲都是音頻的數據,直接將數據播放就能夠了)
在bt_app_av.c文件中回調bt_app_a2d_data_cb處理接收到的音頻,若是加上播放驅動,在這裏加入就能夠了。

C.接收手機發送過來的音樂、和控制手機上一首(下一首、暫停、播放、中止)經過調用 esp_avrc_api.c.h 中的esp_avrc_ct_send_passthrough_cmd(...)(裏面有req_id每次都須要改變,CMD根據須要來發送,按鍵部分還沒肯定)