第11章 ESP32 蓝牙耳机
概述
本文为ESP32 学习,蓝牙耳机,更多学习目录请查阅ESP32学习目录。
11.1 基本概念
需要知道几个概念,A2DP(Advance Audio Distribution Profile)蓝牙立体声音频传输规范,AVRCP(Audio Video Remote Control Profile)音频/视频远程控制配置文件,具体请参考维基百科。
暂时只是简单的理解,后续更新...
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.h
11.3.1调用关系:
暂时么有能力完全搞懂每个函数调用关系。
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根据需要来发送,按键部分还没确定)