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