第11章 ESP32 藍牙耳機html
概述api
本文爲ESP32 學習,藍牙耳機,更多學習目錄請查閱ESP32學習目錄。
app
須要知道幾個概念,A2DP(Advance Audio Distribution Profile)藍牙立體聲音頻傳輸規範,AVRCP(Audio Video Remote Control Profile)音頻/視頻遠程控制配置文件,具體請參考維基百科。框架
暫時只是簡單的理解,後續更新...ide
目前ESP32支持藍牙功能有...函數
針對於用戶主要有以下幾個文件須要仔細分析學習
"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根據須要來發送,按鍵部分還沒肯定)