上一篇文章講了,如何快遞搭建一個藍牙串口透傳應用。其實本質上來講,快速搭建應用只是一個入門級的演示,千萬不要以為自己搞了一個藍牙透傳應用就算是玩轉藍牙了。
第一、沒有涉及到藍牙的具體協議規范。
第二、只是創建了一個Arduino提供的一個示例。
所以這一篇還是進行一下示例代碼的源碼分析,分析代碼可能是我最大的樂趣了,好戲即將上演……
首先Arduino提供的代碼,是只有一個INO文件的工程,雖然他只有一個文件,但是我我覺得還是應該把他理解為一個工程文件。
打開這個工程文件,最重要的就是開頭的一段注釋了,搞軟件一定要在意代碼中的注釋,雖然我們自己做的注釋可能不咋地,但是這些大廠出的注釋是很重要的:
==== 建立一個藍牙服務的流程 ====
這里大體講一下藍牙相關的內容,有助于大家理解我們的藍牙應用的搭建,從上面的注釋來看:
1. 我們首先創建的就是一個藍牙的服務器、其實藍牙應用是一種C/S的架構,有服務器自然有客戶端,是服務器還是客戶端,主要看我們的設備是獲取服務,還是提供服務。
2. 我們創建的是一個BLE服務器,那什么是BLE,就是我們經常說的低功耗藍牙,現在應該是應用范圍較廣的。除了BLE以外,還有我們的經典藍牙模式BT(題外話。。。)。
3. 創建服務器以后,需要在我們的服務器上創建一個服務或者多個服務。
4. 真正提供服務的內容是依靠特征字來實現的,同時也可以給特征字添加描述。
5. 在注釋6能看到一個叫做啟動廣播的操作,其實我們的藍牙正在開啟以后有兩種狀態,一種是連接態,一種是非連接態,為了建立連接,服務器就需要啟動廣播,讓客戶端發現自己,進而進行連接。
藍牙部分的相關知識及操作流程介紹結束,下面我們來真正的去分析一下原廠提供的代碼:
==== 軟件流程分析 ====
注:原廠給的demo都是以面向對象的設計思想進行編寫的(也就是C++語言)。
1. 藍牙功能相關頭文件包含:
2.創建應用涉及到的對象以及全局變量:
3. 定義藍牙應用相關的UUID,uuid一般是128bit,可以看作是一個區分不同服務以及特征字符的唯一ID,深入學習你會發現UUID還是很復雜的,有一點他是收費的。
4. 定義回調函數,以對象的形式(如果用C語言編寫的話,代碼就會變得好理解的多):
5.在setup函數中,對串口以及藍牙功能進行配置:
5.在loop()函數中執行藍牙數據發送和接收操作:
==== 總結篇 ====
1. Arduino中用到了很多C++的知識,其實用C++編程在這種應用場景下,要比C更加的合適,因為他并不是要求你從零開始編寫類,以及創建對象,而是在別人現有的基礎上進行局部調整,所謂的多態及虛函數的應用。
2. Arduino開發環境中使用的所有的函數例如串口初始化函數,并不是只針對ESP32模組的特殊函數,而是針對所有Arduino支持的開發板的API函數。
3.針對大部分需要藍牙透傳應用的場景,通過修改這個demo例程也基本可以滿足需求了,但是藍牙功能可并不像我們想象的那樣簡單,感興趣的筒子們可以看看我之前更新的文章,或者從網上找點資料,系統的學習一下。