在上一篇中,我們已教大家關於GPIO與I2C的應用-Qualcomm QCA4020 實例-1( I/O應用),這次進行進階教學,使用手機APP 藍牙來開啟QCA4020 CDB上的LED Lights,讓大家後續開發BLE應用,都可以快速上手。
1. 目的
瞭解BLE GATT Service以及Characteristic如何創建及應用,透過手機APP的BLE來控制QCA4020 CDB LED Lights。
首先我們需要知道這次使用的元件在QCA4020 CDB開發版上的相對位置(圖1)。
- GPIO Output是使用GPIO 20,由於我們會需要使用LED(Green)所以依(圖2)所示,需將J16的pin 11與pin12短路。
(圖1) |
(圖2) |
2. 實例功能說明
我們利用如何開發iOS Swift BLE通訊 (QCA402X BLE應用)這篇博文學習如何開發出BLE APP,這樣一來就可以利用手機APP上的LED On/Off來控制QCA4020 CDB上的GPIO 20 LED(Green) Lights。
a. APP按下On(圖3),LED(Green)點亮(圖5)。
b. APP按下Off(圖4),LED(Green)熄滅(圖6)。
(圖3) | (圖4) |
(圖5) | (圖6) |
3. 藍牙開發流程
QCA4020 CDB藍牙開發主要有以下幾個步驟:
3.1 藍牙初始化
3.2 註冊GATT Service & Characteristic
3.3 開啟Advertise
3.4 手機APP發送Characteristic Write、Read資料
3.4.1 Characteristic Write資料與LED控制
3.4.2 Characteristic Read LED Lights狀態資料
====================================================================================================
3.1 藍牙初始化
首先我們需要將藍牙協議開啟:利用QCA4020 CDB SDK裡面的Initialize Bluetooth副程式,把BLE Stack開啟(圖7)。
(圖7) |
3.2 註冊GATT Service & Characteristic
為了能夠讓手機APP可以發現BLE Service & Characteristic資訊,所以必須在QCA4020 CDB 的BLE註冊GATT Service & Characteristic。
註冊前需要先設定Service UUID以及Characteristic UUID(圖8),將Service設定為16 bit的UUID(圖9),再來設定Characteristic為Write、Read的類型(圖10),接下來把Characteristic設定為16bit UUID(圖11),然後將以上三步驟的資訊放進GATT服務屬性的結構(圖12),最後利用QCA4020 CDB SDK提供的”qapi_BLE_GATT_Register_Service”指令(圖13),把所需要的參數設定好即可成功註冊GATT Service & Characteristic。
(圖8) |
(圖9) |
(圖10) |
(圖11) |
(圖12) |
(圖13) |
3.3 開啟Advertise
GATT Service與Characteristic註冊完成後,記得將Advertise開啟(圖14),否則手機是掃描不到藍牙裝置。
(圖14) |
3.4 手機APP發送Characteristic Write、Read資料
當手機APP藍牙與QCA4020 CDB 藍牙連線成功後,QCA4020 CDB可以接收到手機APP發送Write或Read功能。
QCA4020 CDB收到GATT功能都會呼叫”GATT_ServerEventCallback_Lights_service” 副程式,我們可以利用QCA4020 CDB提供的兩個Case (圖15)來識別手機APP 發送的是”Write”還是”Read”功能。
(圖15) |
QCA4020 CDB是使用Attribute offset(圖16)來辨識手機APP發送的Write或Read功能是使用哪一個Characteristic,目前我們只有一個Characteristic所以只需要一個Attribute offset,如果Characteristic變多了,那就需要定義各自的Attribute offset。
(圖16) |
3.4.1 Characteristic Write資料與LED控制
機APP要控制QCA4020 CDB LED Lights狀態時,會發送BLE Characteristic Write功能給QCA4020 CDB,此時會呼叫”GATT_ServerEventCallback_Lights_service”副程式。
接著會進入”QAPI_BLE_ET_GATT_SERVER_WRITE_REQUEST_E”(圖17)Cass裡面,我們利用上一篇Qualcomm QCA4020 實例-1( I/O應用)所學到的方式來控制GPIO 20 LED(Green),即可達到BLE控制LED Lights(圖18)。
(圖17) |
(圖18) |
3.4.2 Characteristic Read LED Lights狀態資料
手機APP要讀取QCA4020 CDB LED Lights狀態時,會發送BLE Characteristic Read功能給QCA4020 CDB,此時會呼叫”GATT_ServerEventCallback_Lights_service”副程式。
然後會進入” QAPI_BLE_ET_GATT_SERVER_READ_REQUEST_E” Cass裡面,我們可以利用QCA4020 CDB內建的”qapi_BLE_GATT_Read_Response”指令 (圖19),將目前LED Lights的狀態資訊回傳給手機APP。
(圖19) |
結語:
看完這次的實例後,相信大家已經可以透過手機APP使用藍牙對QCA4020 CDB對連線以及發送指令,其他更多的BLE資訊,就等大家去探索了,如果在開發時遇到什麼問題,歡迎在下方”評論”提出你的疑問,我們可以一起來討論唷,喜歡我的帖子,請幫我按個”收藏”,我們下回見。
評論