2019年1月20日 星期日

DIY - ESP32:ESP32 藍牙(Bluetooth)A2DP Source 程式(七十六)

DIY - ESP32:ESP32 藍牙(Bluetooth)A2DP Source 程式(七十六):

這個程式是用作連接 A2DP(Advanced Audio Distribution Profile)設置裝置,ESP32 連接藍牙裝置後,便可以由 ESP32 開發板播放音樂,雖然音源由 ESP32 隨機產生,一定是噪聲,並非真正的音樂,接收後在幻響神州(i-MU)的羊眉吐氣藍牙音箱(I-Sheep Bluetooth Speaker),也會是噪聲,但祇要有聲音產生,便可以證明成功,這個範例程式是放在 esp_idf/examples/Bluetooth/ a2dp_source。

ESP32 藍牙(Bluetooth)A2DP Source 程式
操作系統:Windows 7 64-bit 版本
開發環境:ESP32 Windows Toolchain 20181001 版本
燒寫程式:FLASH_DOWNLOAD_TOOLS_v3.6.4
原程式版本:ESP32 ESP-IDF V3.3-beat1-136
原程式:esp_idf/examples/Bluetooth/ a2dp_source
程式:DIY-ESP32-100_04_BT_a2dp_source_i-sheep-20190106

ESP32 藍牙(Bluetooth)A2DP Source 掃描程式:
static void filter_inquiry_scan_result(esp_bt_gap_cb_param_t *param)
{
    char bda_str[18];
    uint32_t cod = 0;
    int32_t rssi = -129; // invalid value
    uint8_t *eir = NULL;
    esp_bt_gap_dev_prop_t *p;

    ESP_LOGI(BT_AV_TAG, "Scanned device: %s", bda2str(param->disc_res.bda, bda_str, 18));
    for (int i = 0; i < param->disc_res.num_prop; i++) {
        p = param->disc_res.prop + i;
        switch (p->type) {
        case ESP_BT_GAP_DEV_PROP_COD:
            cod = *(uint32_t *)(p->val);
            ESP_LOGI(BT_AV_TAG, "--Class of Device: 0x%x", cod);
            break;
        case ESP_BT_GAP_DEV_PROP_RSSI:
            rssi = *(int8_t *)(p->val);
            ESP_LOGI(BT_AV_TAG, "--RSSI: %d", rssi);
            break;
        case ESP_BT_GAP_DEV_PROP_EIR:
            eir = (uint8_t *)(p->val);
            break;
        case ESP_BT_GAP_DEV_PROP_BDNAME:
        default:
            break;
        }
    }

    // Search for device with MAJOR service class as "rendering" in COD
    if (!esp_bt_gap_is_valid_cod(cod) ||
            !(esp_bt_gap_get_cod_srvc(cod) & ESP_BT_COD_SRVC_RENDERING)) {
        return;
    }

    // Search for device named "i-sheep" in its extended inqury response
    if (eir) {
        get_name_from_eir(eir, s_peer_bdname, NULL);
        if (strcmp((char *)s_peer_bdname, "i-sheep") != 0) {   
            return;
        }

        ESP_LOGI(BT_AV_TAG, "Found a target device, address %s, name %s", bda_str, s_peer_bdname);
        s_a2d_state = APP_AV_STATE_DISCOVERED;
        memcpy(s_peer_bda, param->disc_res.bda, ESP_BD_ADDR_LEN);
        ESP_LOGI(BT_AV_TAG, "Cancel device discovery ...");
        esp_bt_gap_cancel_discovery();
    }
}


程式成功編譯,便將 bin 檔案燒錄到 ESP32 模組,完成後重置 ESP32 模組,開啓 ESPlorer ESPlorer v0.2.0-rc6 作串口輸出顯示。

ESP32 開發板藍牙掃描 i-sheep 音箱設備
ESP32 開發板開始播放音樂到 i-sheep 音箱設備
ESP32 Bluetooth 設備名稱:ESP_A2DP_SRC
Slave Bluetooth 設備名稱: i-sheep

2019年 1月 20日 天氣報告
氣溫:20.7@ 18:40
相對濕度:百分之 76%
天氣:大致多雲

沒有留言:

張貼留言