blemesh功耗

物联网0178

blemesh功耗,第1张

BLE Mesh功耗的测量原理是基于发射功率和接收功率的控制来推断功耗的。发射功率和接收功率由芯片的额定功率和PHY的调节因素(包括空气模式、数据速率和调制类型等)共同决定。实际上,BLE芯片本身是根据当前网络状态调节它们的发射功率和接收功率进而控制功耗的。

因此,测量BLE Mesh功耗的原理就是通过监测每个节点的发射功率和接收功率,以及它们之间的相关性来估计网络的总体效率。这种测量可以同时实现两个目标:一是确定网络功耗,二是识别异常情况。一旦发现了异常情况,可以根据功率数据确定具体原因并采取相应行动。

一、关于蓝牙40

蓝牙40标准包含两个蓝牙标准,准确的说,是一个双模的标准,它包含传统蓝牙部分(也有称之为经典蓝牙Classic Bluetooth)和低功耗蓝牙部分(Bluetooth Low Energy)。这两个部分适用于不同的应用或者应用条件。传统蓝牙是在之前的1012,20+EDR,21+EDR,30+EDR等基础上发展和完善起来的,低功耗蓝牙是Nokia的Wibree标准上发展起来的。

传统蓝牙可以用与数据量比较大的传输,如语音,音乐,较高数据量传输等,低功耗蓝牙这样应用于实时性要求比较高,但是数据速率比较低的产品,如遥控类的,如鼠标,键盘,遥控鼠标(Air Mouse),传感设备的数据发送,如心跳带,血压计,温度传感器等。传统蓝牙有3个功率级别,Class1,Class2,Class3,分别支持100m,10m,1m的传输距离,而低功耗蓝牙无功率级别,一般发送功率在7dBm,一般在空旷距离,达到20m应该是没有问题的。

所以蓝牙40是集成了传统蓝牙和低功耗蓝牙两个标准的,并不只是低功耗蓝牙。

蓝牙40是蓝牙30+HS规范的补充,专门面向对成本和功耗都有较高要求的无线方案,较30版本更省电、低成本和跨厂商互操作性、3毫秒低延迟、超长有效连接距离、AES-128加密等;蓝牙40可广泛用于卫生保健、体育健身、家庭娱乐、安全保障等诸多领域。通常用在蓝牙耳机、蓝牙音箱、计步器、心律监视器、智能仪表、传感器物联网等设备上,大大扩展蓝牙技术的应用范围。该技术拥有极低的运行和待机功耗,使用一粒纽扣电池甚至可连续工作数年之久。

蓝牙40支持两种部署方式:双模式和单模式。

双模式中低功耗蓝牙功能集成在现有的经典蓝牙控制器中,或再在现有经典蓝牙技术(21+EDR/30+HS)芯片上增加低功耗堆栈,整体架构基本不变,因此成本增加有限。单模式面向高度集成、紧凑的设备,使用一个轻量级连接层(Link Layer)提供超低功耗的待机模式操作、简单设备恢复和可靠的点对多点数据传输,还能让联网传感器在蓝牙传输中安排好低功耗蓝牙流量的次序,同时还有高级节能和安全加密连接。超低的峰值、平均和待机模式功耗。

♥速度:支持1Mbps数据传输率下的超短数据包,最少8个八组位,最多27个。所有连接都使用蓝牙21加入的减速呼吸模式(sniff subrating)来达到超低工作循环。

♥跳频:使用所有蓝牙规范版本通用的自适应跳频,最大程度地减少和其他24GHz ISM频段无线技术的串扰。

♥主控制:更加智能,可以休眠更长时间,只在需要执行动作的时候才唤醒。

♥延迟:最短可在3毫秒内完成连接设置并开始传输数据。

♥范围:提高调制指数,最大范围可超过100米(根据不同应用领域, 距离不同)。

♥健壮性:所有数据包都使用24-bitCRC校验,确保最大程度抵御干扰。

♥安全:使用AES-128 CCM加密算法进行数据包加密和认证。

♥拓扑:每个数据包的每次接收都使用32位寻址,理论上可连接数十亿设备;针对一对一连接优化,并支持星形拓扑的一对多连接;使用快速连接和断开,数据可以再网状拓扑内转移而无需维持复杂的网状网络。

二、关于蓝牙BLE

BLE是蓝牙低能耗的简称(Bluetooh Low Energy)。蓝牙低能耗(BLE)技术是低成本、短距离、可互操作的鲁棒性无线技术,工作在免许可的24GHz ISM射频频段。它从一开始就设计为超低功耗(ULP)无线技术。它利用许多智能手段最大限度地降低功耗。

蓝牙低能耗架构共有两种芯片构成:单模芯片和双模芯片。蓝牙单模芯片可以和其它单模芯片及双模芯片通信,此时后者需要使用自身架构中的蓝牙低能耗技术部分进行收发数据。双模芯片也能与标准蓝牙技术及使用传统蓝牙架构的其它双模芯片通信。

双模芯片可以在目前使用标准蓝牙芯片的任何场合使用。这样安装有双模芯片的手机、PC、个人导航设备(PND)或其它应用就可以和市场上已经在用的所有传统标准蓝牙设备以及所有未来的蓝牙低能耗设备通信。然而,由于这些设备要求执行标准蓝牙和蓝牙低能耗任务,因此双模芯片针对ULP操作的优化程度没有像单模芯片那么高。

单模芯片可以用单节钮扣电池(如3V、220mAh的CR2032)工作很长时间(几个月甚至几年)。相反,标准蓝牙技术(和蓝牙低能耗双模器件)通常要求使用至少两节AAA电池(电量是钮扣电池的10至12倍,可以容忍高得多的峰值电流),并且更多情况下最多只能工作几天或几周的时间(取决于具体应用)。注意,也有一些高度专业化的标准蓝牙设备,它们可以使用容量比AAA电池低的电池工作。

SKYLAB生产的蓝牙40模块就是低功耗的,而且是采用的nRF51822单模芯片,有兴趣可以去了解下!

万物互联的物联网时代的已经来临,ble蓝牙开发在其中扮演着举重若轻的角色。最近刚好闲一点,抽时间梳理下这块的知识点。

涉及ble蓝牙通讯的客户端(开启、扫描、连接、发送和接收数据、分包解包)和服务端(初始化广播数据、开始广播、配置Services、Server回调操作)整个环节以及一些常见的问题即踩过的一些坑。

比如

1、在Android不同版本或不同手机的适配问题,扫描不到蓝牙设备

2、如何避免ble蓝牙连接出现133错误?

3、单次写的数据大小有20字节限制,如何发送长数据

蓝牙有传统(经典)蓝牙和低功耗蓝牙BLE(Bluetooth Low Energy)之分,两者的开发的API不一样,本文主讲Ble蓝牙开发,传统蓝牙不展开,有需要的可以自行了解。

相对传统蓝牙,BLE低功耗蓝牙,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输。

客户端

服务端

Android43(API Level 18)开始引入BLE的核心功能并提供了相应的 API。应用程序通过这些 API 扫描蓝牙设备、查询 services、读写设备的 characteristics(属性特征)等操作。

BLE蓝牙协议是GATT协议, BLE相关类不多, 全都位于androidbluetooth包和androidbluetoothle包的几个类:

androidbluetooth

BluetoothGattService 包含多个Characteristic(属性特征值), 含有唯一的UUID作为标识

BluetoothGattCharacteristic 包含单个值和多个Descriptor, 含有唯一的UUID作为标识

BluetoothGattDescriptor 对Characteristic进行描述, 含有唯一的UUID作为标识

BluetoothGatt 客户端相关

BluetoothGattCallback 客户端连接回调

BluetoothGattServer 服务端相关

BluetoothGattServerCallback 服务端连接回调

androidbluetoothle

AdvertiseCallback 服务端的广播回调

AdvertiseData 服务端的广播数据

AdvertiseSettings 服务端的广播设置

BluetoothLeAdvertiser 服务端的广播

BluetoothLeScanner 客户端扫描相关(Android50新增)

ScanCallback 客户端扫描回调

ScanFilter 客户端扫描过滤

ScanRecord 客户端扫描结果的广播数据

ScanResult 客户端扫描结果

ScanSettings 客户端扫描设置

BLE设备分为两种设备: 客户端(也叫主机/中心设备/Central), 服务端(也叫从机/外围设备/peripheral)

客户端的核心类是 BluetoothGatt

服务端的核心类是 BluetoothGattServer 和 BluetoothLeAdvertiser

BLE数据的核心类是 BluetoothGattCharacteristic 和 BluetoothGattDescriptor

下面详细讲解下客户端和服务端的开发步骤流程

安卓手机涉及蓝牙权限问题,蓝牙开发需要在AndroidManifestxml文件中添加权限声明:

在搜索设备之前需要询问打开手机蓝牙:

注意: BLE设备地址是动态变化(每隔一段时间都会变化),而经典蓝牙设备是出厂就固定不变了!

通过扫描BLE设备,根据设备名称区分出目标设备targetDevice,下一步实现与目标设备的连接,在连接设备之前要停止搜索蓝牙;停止搜索一般需要一定的时间来完成,最好调用停止搜索函数之后加以100ms的延时,保证系统能够完全停止搜索蓝牙设备。停止搜索之后启动连接过程;

BLE蓝牙的连接方法相对简单只需调用connectGatt方法;

参数说明

与设备建立连接之后与设备通信,整个通信过程都是在BluetoothGattCallback的异步回调函数中完成;

BluetoothGattCallback中主要回调函数如下:

上述几个回调函数是BLE开发中不可缺少的;

当调用targetdDeviceconnectGatt(context, false, gattCallback)后系统会主动发起与BLE蓝牙设备的连接,若成功连接到设备将回调onConnectionStateChange方法,其处理过程如下:

判断newState == BluetoothGattSTATE_CONNECTED表明此时已经成功连接到设备;

mBluetoothGattdiscoverServices();

扫描BLE设备服务是安卓系统中关于BLE蓝牙开发的重要一步,一般在设备连接成功后调用,扫描到设备服务后回调onServicesDiscovered()函数,函数原型如下:

BLE蓝牙开发主要有负责通信的BluetoothGattService完成的。当且称为通信服务。通信服务通过硬件工程师提供的UUID获取。获取方式如下:

具体操作方式如下:

开启监听,即建立与设备的通信的首发数据通道,BLE开发中只有当客户端成功开启监听后才能与服务端收发数据。开启监听的方式如下:

BLE单次写的数据量大小是有限制的, 通常是20字节 ,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。

监听成功后通过向 writeCharacteristic写入数据实现与服务端的通信。写入方式如下:

其中:value一般为Hex格式指令,其内容由设备通信的蓝牙通信协议规定;

若写入指令成功则回调BluetoothGattCallback中的onCharacteristicWrite()方法,说明将数据已经发送给下位机;

若发送的数据符合通信协议,则服务端会向客户端回复相应的数据。发送的数据通过回调onCharacteristicChanged()方法获取,其处理方式如下:

通过向服务端发送指令获取服务端的回复数据,即可完成与设备的通信过程;

当与设备完成通信之后之后一定要断开与设备的连接。调用以下方法断开与设备的连接:

源码上传在CSDN上了,有需要的可以借鉴。

=====> Android蓝牙Ble通讯Demo示例源码–扫描,连接,发送和接收数据,分包解包

BLE单次写的数据量大小是有限制的,通常是20字节,可以尝试通过requestMTU增大,但不保证能成功。分包写是一种解决方案,需要定义分包协议,假设每个包大小20字节,分两种包,数据包和非数据包。对于数据包,头两个字节表示包的序号,剩下的都填充数据。对于非数据包,主要是发送一些控制信息。

总体流程如下:

1、定义通讯协议,如下(这里只是个举例,可以根据项目需求扩展)

2、封装通用发送数据接口(拆包)

该接口根据会发送数据内容按最大字节数拆分(一般20字节)放入队列,拆分完后,依次从队列里取出发送

3、封装通用接收数据接口(组包)

该接口根据从接收的数据按协议里的定义解析数据长度判读是否完整包,不是的话把每条消息累加起来

4、解析完整的数据包,进行业务逻辑处理

5、协议还可以引入加密解密,需要注意的选算法参数的时候,加密后的长度最好跟原数据长度一致,这样不会影响拆包组包

一般都是Android版本适配以及不同ROM机型(小米/红米、华为/荣耀等)(EMUI、MIUI、ColorOS等)的权限问题

蓝牙开发中有很多问题,要静下心分析问题,肯定可以解决的,一起加油;

之前的涉及的物联网项目中使用的: BLE 低功耗蓝牙(蓝牙40), 支持android 43以上的手机

主从关系: BLE低功耗蓝牙只能做从端设备 ,一个蓝牙主端设备,可同时与7个蓝牙从端设备进行通讯

1)低功耗

低功耗的原理:

1\低功耗蓝牙仅使用了3个广播通道,传统蓝牙技术采用 16~32 个频道

2\每次广播开启时间也由传统的 225ms 减少到 06~12ms(毫秒)

2)传输距离极大提高

传统蓝牙传输距离为 2~10m,而蓝牙40的有效传输距离可达到 60~100m

3)安全性

使用AES-128 CCM加密算法进行数据包加密和认证。

更多BLE蓝牙的解析参考博客 : BLE40教程一 蓝牙协议连接过程与广播分析

添加权限

打开蓝牙

1先拿到BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(ContextBLUETOOTH_SERVICE);

2再拿到BluetoothAdapter bluetoothAdapter = bluetoothManagergetAdapter();

判断是否打开蓝牙

未打开弹出 系统弹框 ,除了 魅族手机 是打开系统设置

设备/手机都是蓝牙信号

在回调方法中:

一般在扫描的过程中,我们还会设置 设备过滤原则 (因为我只想要搜索到我们想要的设备,忽略无关设备)

如:从 scanRecord -- beacon -- beacontype == 0xFF代表Manufacture,通过与嵌入式软件定义 自己的 Manufacture值即可

用BluetoothDevice得到BluetoothGatt:

断连:

关键问题:连接后一般要做什么事

( 必须在刚连接成功后2秒内app写一个值给设备,否则会被设备断开连接)

主要是读写 characteristic

gattwirteCharacteristic(mCurrentcharacteristic);

gattreadCharacteristic(characteristic);

bluetoothGattsetCharacteristicNotification(data, true);

真实工作中使用的蓝牙库BlueToothKit请参考我的另一篇博客:

android蓝牙入门知识和优秀蓝牙第三方库BluetoothKit的使用

蓝牙5和WiFi其实都是比较适合物联网应用的,具体的看产品的应用场景、是否需要联网以及内置协议啥的是WiFi 更适合,还是蓝牙更适合。

需要联网,对传输距离有要求,传输数据偏大的,毫无疑问,WiFi 会更加适合;

不需要联网,只是要高速率的数据采集、传输及智能控制,则蓝牙50会更为适合,低功耗,工业级,高性能的50蓝牙模块SKB501就蛮适合的。

1 蓝牙与WIFI的区别一:

1、蓝牙在早期也称之为蓝芽,是一种新兴无线通讯技术是一个标准的无线通讯协议,基于低成本设备的收发器芯片,近距离传输、功耗低。被广泛应用于物联网智能家居系统、智能可穿戴设备。升润科技是专门针对低功耗蓝牙研发解决方案的企业。

2、Wi-Fi为IEEE定义的一个无线网络通信的工业标准,是一种无线网络他在局域网里面的范畴是指“无线相容性认证”其实是一种商业认证,同时也是一种无线联网技术。

蓝牙与WIFI的区别二:

1、蓝牙使用的是跳频扩谱方式,一般每秒钟跳变1650次,将835MHz的频带划分至79个频带信道,而每个时刻只占1MHz的带宽。调制方式是GFSK,经典蓝牙是可以同时进行数据和语音的无线通讯,而蓝牙传输带宽是1Mbps,他的通信距离一般都是10米,在2016年5月份推出的最新的版本Bluetooth50传输距离可以达到150米。蓝牙通讯主要用来连接一些外接电子设备,或者近距离数据传输。

2、WIFI所使用的连接协议是IEEE80211b局域网协议,WIFI的传输范围是120米,传输速度最大可以达到11Mbps,使用的是直序列扩频和QPSK或BPSK,上下带宽是22MHz。主要能提供无线上网的业务,所以WIFI经常出现在需要进行联网的智能设备上面。

蓝牙”是一种新型的无线通讯技术,它可以实现个人域网与移动设备之间进行短距离数据交换,蓝牙通讯技术事实上是一个全球性的标准,它打破了用有线电缆来连接各种数字设备的局限,蓝牙主要工作于24Hz的全球通用的IS频段,这就是蓝牙为什么是全球通用的无线通讯技术的标准。

蓝牙自40版本开始就分为“经典蓝牙”、“低功耗BLE蓝牙”与“高速蓝牙”,经典蓝牙包括旧有的传输协议支持视频、音频的传输。则低功耗(BLE)蓝牙是40版本的一个子集,相对于经典蓝牙有着全新的协议栈可以快速简单的进行连接,它主要是面对功耗需求极地、用小型的纽扣电池供电应用。所以低功耗蓝牙非常适用于物联网应用的需求。

什么是WIFI?

WIFI的全称是Wireless Fidelity,又称80211b标准,它的最大优点就是可以允许电子设备连接到局域网和高传输速度,通常使用的是24G UHF ISM视频频段,连接到网络一般都是有密码保护的,也很容易通过技术手段被破解。所以WIFI在安全性能方面还是需要继续完善,WIFI通讯技术实际上就是把有线的网络信号转变为无线信号,使用无线路由器提供信号技术支持从而实现手机、平板、电脑进行连接上网。

以上就是关于blemesh功耗全部的内容,包括:blemesh功耗、蓝牙4.0,蓝牙BLE模块,蓝牙4.0和蓝牙BLE的区别、Android-Ble蓝牙开发Demo示例–扫描,连接,发送和接收数据,分包解包(附源码)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!