兩個(gè)設(shè)備是一個(gè)涉及三個(gè)漸進(jìn)狀態(tài)的多步驟過(guò)程:
1。查詢(xún)– 如果兩個(gè)藍(lán)牙設(shè)備彼此之間完全不了解,則其中一個(gè)必須運(yùn)行查詢(xún)以嘗試發(fā)現(xiàn)另一個(gè)。一臺(tái)設(shè)備發(fā)出查詢(xún)請(qǐng)求,任何偵聽(tīng)此請(qǐng)求的設(shè)備都將以其地址以及可能的名稱(chēng)和其他信息作為響應(yīng)。
2。分頁(yè)(連接) –分頁(yè)是在兩個(gè)藍(lán)牙設(shè)備之間建立連接的過(guò)程。在啟動(dòng)此連接之前,每個(gè)設(shè)備都需要知道另一個(gè)設(shè)備的地址(在查詢(xún)過(guò)程中找到)。
3。連接– 設(shè)備完成尋呼過(guò)程后,將進(jìn)入連接狀態(tài)。連接后,設(shè)備可以處于主動(dòng)參與狀態(tài),也可以進(jìn)入低功耗睡眠模式。
活動(dòng)模式 –這是常規(guī)連接模式,其中設(shè)備正在主動(dòng)發(fā)送或接收數(shù)據(jù)。
嗅探模式 e –這是一種省電模式,設(shè)備不活躍。它會(huì)進(jìn)入睡眠狀態(tài),并且僅按設(shè)定的時(shí)間間隔(例如每100毫秒)監(jiān)聽(tīng)一次傳輸。
保持模式 –保持模式是一種臨時(shí)的省電模式,在該模式下,設(shè)備將休眠一段定義的時(shí)間,然后在間隔時(shí)間過(guò)后返回活動(dòng)模式。主機(jī)可以命令從機(jī)保持。
停車(chē)模式 –停車(chē)是最深的睡眠模式。主機(jī)可以命令從機(jī)“停放”,直到從機(jī)通知主機(jī)喚醒后,該從機(jī)將變?yōu)榉腔顒?dòng)狀態(tài)。
綁定和配對(duì):
當(dāng)兩個(gè)藍(lán)牙設(shè)備彼此共享特殊的親和力時(shí),可以將它們綁定在一起。綁定的設(shè)備只要距離足夠近,就會(huì)自動(dòng)建立連接。例如,當(dāng)我開(kāi)車(chē)時(shí),口袋里的電話(huà)會(huì)立即連接到汽車(chē)的藍(lán)牙系統(tǒng),因?yàn)樗鼈児蚕硪粋€(gè)紐帶。不需要UI交互!
通過(guò)一次性的配對(duì)過(guò)程創(chuàng)建綁定。設(shè)備配對(duì)時(shí),它們共享其地址,名稱(chēng)和配置文件,通常將它們存儲(chǔ)在內(nèi)存中。對(duì)方還共享一個(gè)公用密鑰,這使他們將來(lái)在任何時(shí)候在一起時(shí)都能綁定。
配對(duì)通常需要一個(gè)身份驗(yàn)證過(guò)程,用戶(hù)必須驗(yàn)證設(shè)備之間的連接。身份驗(yàn)證過(guò)程的流程各不相同,通常取決于一個(gè)設(shè)備或另一個(gè)設(shè)備的接口功能。有時(shí)配對(duì)是一個(gè)簡(jiǎn)單的“ Just Works”操作,只需單擊一下按鈕即可配對(duì)(這對(duì)于沒(méi)有UI的設(shè)備(如耳機(jī))很常見(jiàn))。其他時(shí)間配對(duì)涉及匹配的6位數(shù)字代碼。較舊的舊版(v2.0和更早版本)的配對(duì)過(guò)程涉及在每個(gè)設(shè)備上輸入公共PIN碼。 PIN碼的長(zhǎng)度和復(fù)雜度范圍從四個(gè)數(shù)字(例如“ 0000”或“ 1234”)到一個(gè)16個(gè)字符的字母數(shù)字字符串。
主控,從屬和Piconets:
藍(lán)牙網(wǎng)絡(luò)(通常稱(chēng)為微微網(wǎng))使用主/從模型來(lái)控制設(shè)備何時(shí)何地可以發(fā)送數(shù)據(jù)。在此模型中,單個(gè)主設(shè)備最多可以連接七個(gè)不同的從設(shè)備。微微網(wǎng)中的任何從屬設(shè)備只能連接到一個(gè)主機(jī)。
主機(jī)協(xié)調(diào)整個(gè)微網(wǎng)中的通信。它可以將數(shù)據(jù)發(fā)送到其任何從屬,也可以從它們請(qǐng)求數(shù)據(jù)。從站僅允許與其主機(jī)進(jìn)行發(fā)送和接收。他們無(wú)法與微微網(wǎng)中的其他奴隸交談。
范圍:
范圍是特定于應(yīng)用程序的,盡管最低范圍是核心規(guī)范沒(méi)有限制,制造商可以調(diào)整其實(shí)現(xiàn)以支持其啟用的用例。
范圍可能會(huì)根據(jù)實(shí)現(xiàn)中使用的無(wú)線電類(lèi)別而有所不同:
3類(lèi)無(wú)線電設(shè)備–射程可達(dá)1米或3英尺
2類(lèi)無(wú)線電設(shè)備–最常見(jiàn)于移動(dòng)設(shè)備中–射程可達(dá)10米或33英尺
主要在工業(yè)用例中使用的1類(lèi)無(wú)線電設(shè)備的射程為100米或300英尺
步驟2:藍(lán)牙通信續(xù)。..


設(shè)備使用情況
(幾乎)單獨(dú)的無(wú)線連接–需要外部應(yīng)用程序來(lái)驅(qū)動(dòng)服務(wù)
設(shè)備通信
客戶(hù)端/服務(wù)器(主/從)conf iguration
設(shè)備本質(zhì)上是相等的
應(yīng)用程序確定身份
[[客戶(hù)端應(yīng)用程序] 《=》 [HC05]] 《==== =============》 [[BT設(shè)備] 《=》 [服務(wù)器應(yīng)用程序]]
軟件/接口堆棧
[藍(lán)牙主機(jī)] -------------------?[藍(lán)牙主機(jī)]
^ –主機(jī)控制器接口驅(qū)動(dòng)程序
|| –物理總線驅(qū)動(dòng)程序
v
[物理總線] ----------------------?[物理總線]
^ –物理總線固件
||
v
[藍(lán)牙硬件] ---------- ---?[藍(lán)牙硬件]
–主機(jī)控制器接口固件
–基帶控制器
連接到設(shè)備
?主機(jī)控制器接口–允許與藍(lán)牙硬件進(jìn)行控制交互
?傳輸層–主機(jī)與藍(lán)牙硬件之間的物理連接
1。主機(jī)控制器接口
?用于訪問(wèn)藍(lán)牙硬件功能的統(tǒng)一接口
?包含用于硬件的命令集
?包含對(duì)可能事件的處理
?包含對(duì)錯(cuò)誤代碼的訪問(wèn)
2。傳輸選項(xiàng)
?標(biāo)準(zhǔn)描述了三種基本的傳輸格式– USB傳輸
?通用異步接收器/發(fā)送器
?串行接口–可以設(shè)置為RS232設(shè)置
步驟3:藍(lán)牙網(wǎng)絡(luò)
藍(lán)牙網(wǎng)絡(luò):
?由最多7個(gè)活動(dòng)藍(lán)牙組成的Piconet 設(shè)備
–主/從配置
–可以將其他從設(shè)備置于“停放”狀態(tài)設(shè)備不活動(dòng)但保持同步
–由主機(jī)控制的連接,同步,停放/活動(dòng)
–以微微網(wǎng)連接的所有設(shè)備共享時(shí)序和頻率
?由兩個(gè)或多個(gè)Piconets組成的分散網(wǎng)
–每個(gè)微微網(wǎng)只能有一個(gè)主設(shè)備,但一個(gè)微微網(wǎng)中的主設(shè)備可以作為奴隸來(lái)參與不同的微微網(wǎng)中。
–從站被時(shí)分多路復(fù)用成一個(gè)以上的微微網(wǎng)
–未同步時(shí)間或頻率的Piconets
建立連接
?藍(lán)牙單元發(fā)送查詢(xún)消息以查找其他藍(lán)牙單元。
主/從Piconet
?一個(gè)單元成為主機(jī),其他單元成為從機(jī)
?主/從關(guān)系建立時(shí)序
?一個(gè)從機(jī)可以成為另一個(gè)Piconet中的主機(jī)。這會(huì)將兩個(gè)Piconets連接到一個(gè)散布網(wǎng)中。
藍(lán)牙Pico/散布網(wǎng)
?一個(gè)微微網(wǎng)中的主機(jī)可以是另一個(gè)微網(wǎng)中的從機(jī)
?尋址將微微網(wǎng)中的活動(dòng)設(shè)備數(shù)限制為7
?無(wú)限數(shù)量的停放設(shè)備與微微網(wǎng)保持同步,但未處于活動(dòng)狀態(tài)。
頻譜
藍(lán)牙技術(shù)使用標(biāo)稱(chēng)速率為1600跳/秒的擴(kuò)頻跳變?nèi)p工信號(hào),在2.4至2.485 GHZ的無(wú)執(zhí)照工業(yè),科學(xué)和醫(yī)學(xué)(ISM)頻段中運(yùn)行。
步驟4:藍(lán)牙層和協(xié)議棧


藍(lán)牙標(biāo)準(zhǔn)具有許多協(xié)議,這些協(xié)議被組織到不同的層中。
藍(lán)牙的層結(jié)構(gòu)不遵循OS1模型,TCP/IP模型或任何其他已知模型
不同的層和藍(lán)牙協(xié)議體系結(jié)構(gòu):(圖1)
藍(lán)牙框架格式:
藍(lán)牙框架格式的各個(gè)字段為:
1。訪問(wèn)代碼:這是包含同步位的72位字段。它標(biāo)識(shí)母版。
2。標(biāo)頭::這是54位字段。它包含重復(fù)3次的18位模式。
標(biāo)頭字段包含以下子字段:
(i)地址:此3位字段最多可以定義七個(gè)從站(1至7)。如果地址為零,則用于從主節(jié)點(diǎn)到所有輔助節(jié)點(diǎn)的廣播通信。
(ii)類(lèi)型:此4位字段標(biāo)識(shí)來(lái)自上層的數(shù)據(jù)類(lèi)型。
(iii) F :此流位用于流控制。設(shè)置為1時(shí),表示設(shè)備無(wú)法接收更多幀。 (iv) A :該位用于確認(rèn)。
(v) S :該位包含用于檢測(cè)重傳的幀的序列號(hào)。當(dāng)使用停止和等待協(xié)議時(shí),一位就足夠了。
(vi)校驗(yàn)和:這8位字段包含用于檢測(cè)標(biāo)頭中錯(cuò)誤的校驗(yàn)和。
3。數(shù)據(jù):。此字段的長(zhǎng)度可以為0到2744位。它包含來(lái)自上層的數(shù)據(jù)或控制信息。
步驟5:藍(lán)牙基帶控制器

基帶控制器:
?基帶:基帶協(xié)議和低級(jí)鏈接例程
?鏈接管理器:用于設(shè)置和鏈接控制的鏈接層消息
?跳頻時(shí)分雙工頻道
基于625毫秒時(shí)隙(1600跳/秒)的頻道220 PLL穩(wěn)定丟失的時(shí)隙的毫秒數(shù)
?藍(lán)牙同時(shí)使用電路和分組交換通道,支持:
–最多3個(gè)同時(shí)64 kbps同步語(yǔ)音通道
–同步語(yǔ)音和異步數(shù)據(jù)通道
–異步數(shù)據(jù)通道:
-/-721/57.6 kbps非對(duì)稱(chēng)
-/-對(duì)稱(chēng)432.6 kbps
訪問(wèn)代碼:
?信道訪問(wèn)代碼(CAC):標(biāo)識(shí)微微網(wǎng),這代碼與所有交易一起使用在微微網(wǎng)上交換的信息
?設(shè)備訪問(wèn)代碼(DAC):用于發(fā)信號(hào),例如尋呼和對(duì)尋呼的響應(yīng)
?查詢(xún)?cè)L問(wèn)代碼(IAC):
–所有藍(lán)牙設(shè)備通用的通用查詢(xún)?cè)L問(wèn)代碼(GIAC)
–專(zhuān)用查詢(xún)一類(lèi)藍(lán)牙設(shè)備共有的訪問(wèn)代碼(DIAC)
–查詢(xún)過(guò)程“查找”范圍內(nèi)的BT設(shè)備
步驟6:Atmega32 MCU的編碼
我們可以向android智能手機(jī)或PC發(fā)送數(shù)據(jù)或從其接收數(shù)據(jù):---
Ex;
/*This function is used to initialize the USART at a given UBRR value */
void BlueInit(uint16_t ubrr_value)
{
//Set Baud rate UBRRL = ubrr_value;
UBRRH = (ubrr_value》》8);
/* We Set Frame Format as
》》 Asynchronous mode
》》 No Parity
》》 1 StopBit
》》 char size 8 */
UCSRC=(1《
//Enable The RX receiver and TX transmitter
UCSRB=(1《
}
2. /* function used to read data from USART line. It waits till any data is available */
char BlueRdChar()
{
while(?。║CSRA & (1《
UCSRA |= (1 《《 RXC);
//Return received data
return UDR;
}
3. /* function writes the character in ‘data’ into USART and then transmits it to PC via TX line */
void BlueWrChar(char data)
{
while(!(UCSRA & (1《
UDR=data;
}
/*###############main Function########################################*/
#include “l(fā)cd_io.h”
#include “util/delay.h”
/* Extern declarations, prototypes etc. 。.. */
void BlueInit();
char BlueRdChar();
void BlueWrChar(char);
void Waiting(int);
#define F_CPU 16000000UL
#define USART_BAUDRATE 11500UL //9600UL
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
int main()
{
char data;
int i;
/*First Initialize the USART with baud rate = 9600bps
for Baud rate = 9600bps
UBRR value = 103
*/
BlueInit(103); //UBRR = 103
//Initialize LCD module
lcd_init();
lcd_clrscr();
lcd_gotoxy(0,0);
lcd_puts(“BLUETOOTH MODULE:”);
Waiting(5);
lcd_clrscr();
//Loop forever
while(1)
{
lcd_clrscr();
lcd_puts(“Receiving Data.?!保?
for (i=0;i《=15;i++)
{
data=BlueRdChar();
BlueWrChar(data);
lcd_gotoxy(i,1);
lcd_puti(data,0);
}
Waiting(2);
}
return 0;
}
第7步:Android藍(lán)牙傳輸代碼
藍(lán)牙是一種發(fā)送或發(fā)送電子郵件的方式在兩個(gè)不同的設(shè)備之間接收數(shù)據(jù)。 Android平臺(tái)包括對(duì)藍(lán)牙框架的支持,該藍(lán)牙框架允許設(shè)備與其他藍(lán)牙設(shè)備無(wú)線交換數(shù)據(jù)。
Android提供了藍(lán)牙API來(lái)執(zhí)行以下不同操作:-
掃描用于其他藍(lán)牙設(shè)備
獲取已配對(duì)設(shè)備的列表
通過(guò)服務(wù)發(fā)現(xiàn)連接到其他設(shè)備
Android提供了BluetoothAdapter類(lèi)來(lái)與藍(lán)牙通信。通過(guò)調(diào)用靜態(tài)方法getDefaultAdapter()
private BluetoothAdapter BA;
BA = BluetoothAdapter.getDefaultAdapter();
創(chuàng)建此調(diào)用的對(duì)象。為了啟用設(shè)備的藍(lán)牙,請(qǐng)使用以下藍(lán)牙常量ACTION_REQUEST_ENABLE調(diào)用該意圖。
Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(turnOn, 0);
提供了支持其他任務(wù)的API的其他常量:-
ACTION_REQUEST_DISCOVERABLE
This constant is used for turn on discovering of bluetooth.
ACTION_STATE_CHANGED
This constant will notify that Bluetooth state has been changed.
ACTION_FOUND
This constant is used for receiving information about each device that is discovered.
啟用藍(lán)牙后,您可以通過(guò)調(diào)用getBondedDevices()獲得配對(duì)設(shè)備的列表。 ) 方法。它會(huì)返回一組藍(lán)牙設(shè)備。..
private SetpairedDevices;
pairedDevices = BA.getBondedDevices();
藍(lán)牙:
Android平臺(tái)支持藍(lán)牙連接,該藍(lán)牙連接允許與其他藍(lán)牙設(shè)備。該應(yīng)用程序框架通過(guò)連接到其他藍(lán)牙設(shè)備的Android藍(lán)牙API提供對(duì)藍(lán)牙功能的訪問(wèn)。
藍(lán)牙API 類(lèi) Android藍(lán)牙程序包:-
BluetoothAdapter:-- Represents the local Bluetooth adapter (Bluetooth radio)。
BluetoothDevice:-- Represents a remote Bluetooth device, query information such as its name, address, class, and bonding state.
BluetoothSocket:-- Represents the interface for a Bluetooth socket (similar to a TCP Socket)。
BluetoothServerSocket:-- Represents an open server socket that listens for incoming requests (similar to a TCP ServerSocket)。
BluetoothClass:--Describes the general characteristics and capabilities of a Bluetooth device.
責(zé)任編輯:wv
-
機(jī)器人
+關(guān)注
關(guān)注
213文章
30328瀏覽量
218491 -
Android
+關(guān)注
關(guān)注
12文章
3980瀏覽量
132729 -
藍(lán)牙
+關(guān)注
關(guān)注
117文章
6175瀏覽量
176876
發(fā)布評(píng)論請(qǐng)先 登錄

使用ANDROID SMART PHONE的藍(lán)牙可控機(jī)器人的制作
評(píng)論