標籤:sheet handler 用戶端 otto for splay evel idt function
一、BLE技術簡介 1、特性:
BLE裝置無法向下相容(無法與藍芽2.0\2.1\3.0通訊),僅能與BLE裝置通訊。從Curie datasheet獲知,curie的藍芽晶片型號為NRF5182
2、
BLE角色
在BLE協議中,有兩個角色:中心裝置(Central)和外圍裝置(Periphery)。
A、中心裝置可以掃描附近的外圍裝置,而外圍裝置可以發出廣播讓中心裝置掃描;
B、BLE串連中必須同時存在這兩種角色的裝置,同角色裝置間不能相連;
C、中心裝置可以同時串連多個外圍裝置,而外圍裝置同一時刻只能連結一個中心裝置;
D、現在的很多穿戴式裝置都是作為周邊(Periphery)存在,而手機作為中央(Central)存在。從常式看,Arduino 101/Genuino 101/intel Curie 只能作為 周邊(Periphery) 使用。也就是說,兩個101之間是不能直接連接的,但你可以把多個101串連到手機或者其他 中央(Central) 裝置。
3、GATT協議
當BLE串連建立後,兩個裝置間通訊將使用GATT協議進行。GATT協議中也有兩種角色——GATT服務端(server) & GATT用戶端(client)但是不管是Periphery還是Central都是可以實現 GATT server 和 GATT client去傳輸資料,但是無法同時都是。這兩種角色取決於BLE串連成功後,兩個裝置間通訊的方式。
4、標準藍芽和BLE比較
BLE技術在小資料低速率以及低功耗上進行的最佳化,並設計成可在紐扣電池驅動的裝置上使用。與標準的藍芽不同的是,標準藍芽基本上是基於非同步串列介面(UART)進行資料交換。
而BLE有下面兩種情況:
(1)當BLE裝置為外圍裝置時,此時BLE裝置就像小區公告欄,與之連結的電腦就是圍觀群眾,
(2)當BLE裝置為核心裝置時,與之相反。
二、UUID介紹 1、定義
UUID的含義是通用唯一識別碼 (Universally Unique Identifier),其目的是讓分布式系統中的所有元素都有唯一識別的資訊,每個人都可以建立與其他人不衝突的UUID,並且還要保證在同一時空中所有機器都是唯一的。
2、組成
(1) 當前的時間(如果現在產生一個UUID後,過幾秒又產生一個UUID,則第一個部分不同,其他相同。
(2)時鐘序列
(3)全域唯一的IEEE機器識別號,如果有網卡,從網卡擷取mac地址,沒有就從其他地方擷取。
在curie中,一個BLE外設在提供服務,進而提供特徵,也可以定製自己的特徵。標準服務是一個16位的UUID,而定製服務是一個128位的UUID,這個也取決於你使用的無線方式和韌體。
三、一些API 1、
BLEPeripheral 類庫成員函數
BLEPeripheral
功能:給BLE外圍裝置命名。
文法:BLEPeripheral yourBlePeripheralName
參數:無
傳回值:無
/*************************begin() ************************/// 功能:初始化BLE所有功能。// 文法:yourBlePeripheralName.begin()// 參數:無// 傳回值:初始化成功返回真,否則返回假。/***********************************************************/begin() /*************************end() ************************/// 功能:關閉所有BLE外設功能。// 文法:yourBlePeripheralName.end()// 參數:無// 傳回值:初始化成功返回真,否則返回假。/***********************************************************/ end()/*************************setAdvertisedServiceUuid() ************************/// 功能:設定廣播服務UUID。// 文法:yourBlePeripheralName.setAdvertisedServiceUuid(const char*advertisedServiceUuid)// 參數:advertisedServiceUuid: TBD// 傳回值:無。/************************************************************************************/ setAdvertisedServiceUuid() /*************************setLocalName()************************/// 功能:設定BLE外設的本地名。// 文法:yourBlePeripheralName.setLocalName(const char* localName)// 參數:localName: the name to be set// 傳回值:無。/*********************************************************************/ setLocalName()/*************************setDeviceName()************************/// 功能:設定BLE外設的裝置名稱。// 文法:yourBlePeripheralName.setLocalName(const char* deviceName)// 參數:localName: the name to be set// 傳回值:無。/*********************************************************************/ setDeviceName()/************************setAppearance()************************/// 功能:待定。// 文法:yourBlePeripheralName.setAppearance(unsigned int appearance)// 參數:appearance: 待定// 傳回值:無。/*********************************************************************/ setAppearance()/************************setEventHandler()************************/// 功能:設定回掉函數與觸發事件的關係。// 文法:yourBlePeripheralName.begin()//參數:event: the chosen matching event. It can assume one of the followingvalues:// BLEConnected// BLEDisconnected// BLEPeripheralEventLast// callback:the name of the function to call in case of match// 傳回值:無。/*********************************************************************/ setEventHandler()/************************addAttribute()***********************///功能:添加外圍裝置的屬性。//文法:yourBlePeripheralName.addAttribute(BLEAttribute attributeName)//參數:attributeName: 要添加的特徵或服務的名稱作為屬性// 傳回值:無。/****************************************************************/ addAttribute()/************************disconnect()***********************///功能:中斷連線。//文法:yourBlePeripheralName.disconnect()//參數:五//傳回值:true/false/****************************************************************/ disconnect();/************************central()***********************///功能:檢查中心串連是否工作。//文法:yourBlePeripheralName.central()//參數:五//傳回值:true/false/****************************************************************/ central()/************************connected()***********************///功能:檢查裝置是否串連。//文法:yourBlePeripheralName.connected()//參數:五//傳回值:true/false/****************************************************************/ connected()
2、BLEDescriptor 類庫成員函數
特徵值的描述以及定義
/************************BLEDescriptor()***********************///功能:描述特徵值的屬性。//文法:BLEDescriptor(const char* uuid, const unsigned charvalue[],unsigned char valueSize);// BLEDescriptor(constchar* uuid, const char* value); //參數: UUID: standard 16-bit characteristic UUID// properties: what remote clients will be able to getnotifications if this characteristic changes. It can // assume the followingvalues:BLERead// BLEWrite// BLENotify// uuid: UUID of descriptor// value: value data// valueLength: length of value data in bytes//傳回值:無/****************************************************************/ BLEDescriptor()
3、
BLECentral 類庫成員函數
BLECentral ()//功能:BLE中心裝置通常訪問外圍裝置的資料。//文法:BLECentral yourBleCentralName//參數:無//傳回值:無connected()//功能: 檢查裝置是否串連//文法:yourBleCentralName.connected()//參數:///傳回值:串連成功返回true,否則返回falseaddress()//功能:返回中心裝置的地址//文法:yourBleCentralName.address()//參數:無//傳回值:中心裝置地址disconnect()//功能:中斷連線//文法:yourBleCentralName.disconnect()//參數:如果成功則返回true,否則返回false//傳回值:無
4、
BLECharacteristic 類庫成員函數
BLECharacteristic//功能: 特徵包至少包含兩個屬性:一個特徵聲明,其中包含有關資料的中繼資料,和特徵值,其中包含資料本身//特徵: names// UUIDs// values// read/write/notifyproperty//下面提供眾多的建構函式,可以根據計劃使用這些特性。//文法:· BLEBoolCharacteristic yourCharacteristicName(UUID, properties, maxLen)· BLECharCharacteristic yourCharacteristicName(UUID, properties, maxLen)· BLEUnsignedCharCharacteristic yourCharacteristicName(UUID, properties, maxLen)· BLEShortCharacteristic yourCharacteristicName(UUID, properties, maxLen)· BLEUnsignedShortCharacteristic yourCharacteristicName(UUID, properties, maxLen)· BLEIntCharacteristic yourCharacteristicName(UUID, properties, maxLen)· BLEUnsignedIntCharacteristic yourCharacteristicName(UUID, properties, maxLen)· BLELongCharacteristic yourCharacteristicName(UUID, properties, maxLen)· BLEUnsignedLongCharacteristic yourCharacteristicName(UUID, properties, maxLen)· BLEFloatCharacteristic yourCharacteristicName(UUID, properties, maxLen)· BLEDoubleCharacteristic yourCharacteristicName(UUID, properties, maxLen)//參數://-UUID:標準的16bit的UUID//-Properties:如果特徵值改變,遠程用戶端就能得到通知。//可以採用以下值://BLERead//BLEWrite//BLENotify
5、
BLEService 類庫成員函數
BLEService
功能:可使用BLE服務建立由BLE裝置顯示的服務
文法:BLEService (const char* uuid)
參數:UUID(由BLE定義的標準16bit或128bit的)
傳回值:無
四、一個Demo1、下載一個App
nRF Master Control Panel (BLE) forAndroid and iOS
2、電路原理
將電位器中間的引腳串連到101的類比輸入I/O空A0上,使用Arduino 101的AD功能對電位器的電壓值採樣類比電池電壓的變化
3、Code思路
101嵌入了一個低功耗藍芽模組,因此它是足夠的板串連到電腦,並使用串列監視器讀取由草圖發送的訊息。電位計被串連到3.3V,GND和A0至類比電池的充電。這部分代碼實現了標準的BLE電池檢測功能
在setup()中,初始化13腳為輸出來驅動板載LED,blePeripheral用來初始化板子的外設,如果多個板子運行這個代碼,需要修改本地名,這樣兩者可以被區分,例如:
blePeripheral.setLocalName(“BatteryMonitorSketch”) 改為 blePeripheral.setLocalName(“BatteryMonitorSketch1”);
在主迴圈中,成功串連中心裝置後開啟LED,每200ms進行一次串連測試,如果是正常的,updateBatteryLevel被調用。當串連丟失,LED會被關閉
Arduino101學習筆記(十一)—— 藍芽BLE