标签:sheet handler 客户端 otto for splay evel idt function
BLE设备无法向下兼容(无法与蓝牙2.0\2.1\3.0通信),仅能与BLE设备通信。从Curie datasheet获知,curie的蓝牙芯片型号为NRF5182
在BLE协议中,有两个角色:中心设备(Central)和外围设备(Periphery)。
A、中心设备可以扫描附近的外围设备,而外围设备可以发出广播让中心设备扫描;
B、BLE连接中必须同时存在这两种角色的设备,同角色设备间不能相连;
C、中心设备可以同时连接多个外围设备,而外围设备同一时刻只能链接一个中心设备;
D、现在的很多可穿戴设备都是作为周边(Periphery)存在,而手机作为中央(Central)存在。从例程看,Arduino 101/Genuino 101/intel Curie 只能作为 周边(Periphery) 使用。也就是说,两个101之间是不能直接连接的,但你可以把多个101连接到手机或者其他 中央(Central) 设备。
当BLE连接建立后,两个设备间通信将使用GATT协议进行。GATT协议中也有两种角色——GATT服务端(server) & GATT客户端(client)但是不管是Periphery还是Central都是可以实现 GATT server 和 GATT client去传输数据,但是无法同时都是。这两种角色取决于BLE连接成功后,两个设备间通信的方式。
BLE技术在小数据低速率以及低功耗上进行的优化,并设计成可在纽扣电池驱动的设备上使用。与标准的蓝牙不同的是,标准蓝牙基本上是基于异步串行接口(UART)进行数据交换。
而BLE有下面两种情况:
(1)当BLE设备为外围设备时,此时BLE设备就像小区公告栏,与之链接的电脑就是围观群众,
(2)当BLE设备为核心设备时,与之相反。
UUID的含义是通用唯一识别码 (Universally Unique Identifier),其目的是让分布式系统中的所有元素都有唯一识别的资讯,每个人都可以建立与其他人不冲突的UUID,并且还要保证在同一时空中所有机器都是唯一的。
(1) 当前的时间(如果现在生成一个UUID后,过几秒又生成一个UUID,则第一个部分不同,其他相同。
(2)时钟序列
(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡获取mac地址,没有就从其他地方获取。
在curie中,一个BLE外设在提供服务,进而提供特征,也可以定制自己的特征。标准服务是一个16位的UUID,而定制服务是一个128位的UUID,这个也取决于你使用的无线方式和固件。
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()
特征值的描述以及定义
/************************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()
BLECentral () //功能:BLE中心设备通常访问外围设备的数据。 //语法:BLECentral yourBleCentralName //参数:无 //返回值:无 connected() //功能: 检查设备是否连接 //语法:yourBleCentralName.connected() //参数:/ //返回值:连接成功返回true,否则返回false address() //功能:返回中心设备的地址 //语法:yourBleCentralName.address() //参数:无 //返回值:中心设备地址 disconnect() //功能:断开连接 //语法:yourBleCentralName.disconnect() //参数:如果成功则返回true,否则返回false //返回值:无
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
功能:可使用BLE服务创建由BLE设备显示的服务
语法:BLEService (const char* uuid)
参数:UUID(由BLE定义的标准16bit或128bit的)
返回值:无
nRF Master Control Panel (BLE) forAndroid and iOS
将电位器中间的引脚连接到101的模拟输入I/O空A0上,使用Arduino 101的AD功能对电位器的电压值采样模拟电池电压的变化
101嵌入了一个低功耗蓝牙模块,因此它是足够的板连接到计算机,并使用串行监视器读取由草图发送的消息。电位计被连接到3.3V,GND和A0至模拟电池的充电。这部分代码实现了标准的BLE电池检测功能
在setup()中,初始化13脚为输出来驱动板载LED,blePeripheral用来初始化板子的外设,如果多个板子运行这个代码,需要修改本地名,这样两者可以被区分,例如:
blePeripheral.setLocalName(“BatteryMonitorSketch”) 改为 blePeripheral.setLocalName(“BatteryMonitorSketch1”);
在主循环中,成功连接中心设备后打开LED,每200ms进行一次连接测试,如果是正常的,updateBatteryLevel被调用。当连接丢失,LED会被关闭
标签:sheet handler 客户端 otto for splay evel idt function
原文地址:http://www.cnblogs.com/BlueMountain-HaggenDazs/p/6056827.html