Flutter 中的低功耗蓝牙概述

2024-09-07 23:52

本文主要是介绍Flutter 中的低功耗蓝牙概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

随着智能设备数量的增加,控制这些设备的需求也在增加。对于多种使用情况,期望设备在需要进行控制的同时连接到互联网会受到很大限制,因此是不可行的。在这些情况下,使用低功耗蓝牙(也称为 Bluetooth LE 或 BLE)似乎是最佳选择,因为它功耗低,在我们的手机中无处不在,而且无需连接到更广泛的网络。因此,蓝牙应用程序的需求也在不断增长。

通过阅读本文,您将了解如何开始在 Flutter 中开发蓝牙低功耗应用程序。

低功耗蓝牙与蓝牙有何不同?

一般来说,蓝牙是一种跳频无线技术,可在 2.4 GHz 频段内传输数据包以互连附近的设备。低功耗蓝牙是蓝牙的一种变体,也在 2.4 GHz 频段运行,但与标准蓝牙不同的是,它的最高速度仅为 1 Mbps,功耗仅为 0.01 至 0.5 瓦。它是标准蓝牙速度的三分之一。因此,它的功耗要低得多。

为蓝牙低功耗选择库

在编写任何蓝牙相关代码之前,选择并了解底层库是必要的。

目前,pub 上存在三个乍一看可能很有前途的 BLE 库:flutter_blueflutter_ble_libflutter_reactive_ble

它们都具有几乎相同的功能集,但在实际可用性方面差异很大。

1.Flutter_blue

GitHub 上最近一次提交是 9 个月前(截至 2021 年 12 月),有 500 个开放问题和多个重大错误。该库似乎没有得到维护,因此选择该库将极大地阻碍您的应用程序的开发。

2.Flutter_BLE_lib

该库已基本完成,并具有可选的设备模拟器,这对测试有很大帮助。几乎所有功能都可以完美运行,但与所有软件一样,也存在一些小错误。遗憾的是,虽然该库仍在维护中,但其开发进展却非常缓慢,并且该库仍然不是空安全的。除非您确实需要在开发过程中进行全自动蓝牙测试,否则选择此库并不是最佳选择。

3.Flutter_reactive_BLE

这个库似乎是最好的选择,因为它支持其他库所做的一切,无需模拟器,并且得到积极维护。它在不久的将来被放弃的风险很低,因为它是由 Philips Hue 团队开发的。

了解低功耗蓝牙

现在我们已经选择了一个库,了解底层协议是必要的。 BLE 标准有详细记录,但也非常复杂。以下解释试图尽可能抽象地让您充分理解,以便能够与您的设备进行通信,而无需了解所有细节。

正确的 BLE 思维模型

在几乎所有情况下,您的手机都将充当 BLE 主设备,而您连接手机的外设将成为 BLE 从设备。一个主机可以连接多个外设,而外设只能连接一个主机。

连接 BLE

要使用外围设备执行任何操作,您必须首先连接到它。大多数时候,您需要开始扫描 BLE 设备,然后自动连接到按标准选择的设备,或者让用户连接到他们想要的设备。

当您扫描外围设备时,您将收到它们的 ID、名称以及它们提供的服务列表。

请注意,在连接过程中,您可以选择与设备协商 MTU,这会更改您可以发送和接收的数据的最大大小。

低功耗蓝牙和 GATT

低功耗蓝牙外设必须具有 GATT(通用属性配置文件)客户端,它定义了两个低功耗蓝牙设备来回传输数据并提供对服务和特性的访问的方式。

服务是一组特征,可通过 GUID 进行识别,而特征是我们作为应用程序开发人员将关心的节点。请注意,特征始终分组在服务中。

低功耗蓝牙的特性

特性是您读取、写入或监听(使用通知或指示)的对象。

它们可通过 GUID 进行识别,并始终拥有至少一个描述符。描述符用于存储有关特性的元数据。如果描述符中与 “读取 ”相对应的位被设置为 “1”,则该特性是可读的。写入“、”通知 "等也是如此。大多数库都会公开类似 characteristic.isReadable() 这样的方法,以抽象出使用描述符位域的必要性。

BLE 的写入和读取特性

如果某个特性可与响应一起写入(其中响应仅限于确认响应),则调用与 characteristic.writeWithResponse(value) 等价的操作将更改从属设备上的相应值,并给出成功状态。无响应读取和写入的操作类似。

聆听通知和指示

如果您需要对应用程序中的特征值变化做出反应,则需要使用与 characteristic.subscribe() 相同的方法订阅特征。这将告诉外设,它应该向您发送特征值变化的数据。

要对值变化做出反应,请监听相关的 dart:Stream

蓝牙低功耗提供了监听通知和指示的能力,其唯一区别在于通知未被确认,而指示则被确认。这些在特征描述符中也有相应的isNotABLE/isIndicatable标志。

与BLE通信

一旦你了解了可能的操作,你就可以做任何其他数据源所能做的事情,只不过你是在操作字节数据。您可能想编写一个存储库类,将字节数据转换为类型良好的数据模型,以便于使用。

低功耗蓝牙的常见故障模式

这些知识,再加上阅读您选择的库的文档,应该足以在完美的世界中与蓝牙低功耗外设进行所有通信。遗憾的是,错误时有发生,底层设备 BLE 模块可能无法像我们希望的那样顺利工作。一旦问题出现,应该从哪里开始寻找根源呢?

连接不稳定就是一个很好的开始。由于蓝牙低功耗天线的功率较低,因此连接很容易随时中断。在编写逻辑代码时,请记住任何一次 BLE 操作都很容易随时失败。

常见的原因可能是外设固件提供商之间的误解。使用单独的蓝牙低功耗应用程序来验证是否存在操作所需的所有标记,并检查所有 GUID 是否匹配。

库本身也可能是问题的根源。例如,flutter_BLE_lib 在快速并发写入时经常失败,并且过早地完成了未来负责连接设备的工作。在调试时,您可能需要在蓝牙操作前后增加一些延迟。

总结

希望本文能对您编写蓝牙低功耗 Flutter 应用程序有所帮助。蓝牙低功耗技术成本低、易于部署,而且可与基于互联网的应用程序连接,对延长消费电子产品的电池寿命有积极影响,因此绝对值得使用。

这篇关于Flutter 中的低功耗蓝牙概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146519

相关文章

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Java 多线程概述

多线程技术概述   1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间。线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换、并发执行,一个进程最少有一个线程,线程实际数是在进程基础之上的进一步划分,一个进程启动之后,进程之中的若干执行路径又可以划分成若干个线程 2.线程的调度 分时调度:所有线程轮流使用CPU的使用权,平均分配时间抢占式调度

Flutter Button使用

Material 组件库中有多种按钮组件如ElevatedButton、TextButton、OutlineButton等,它们的父类是于ButtonStyleButton。         基本的按钮特点:         1.按下时都会有“水波文动画”。         2.onPressed属性设置点击回调,如果不提供该回调则按钮会处于禁用状态,禁用状态不响应用户点击。

开放式耳机好用?平价开放式耳机推荐?四款开放式的蓝牙耳机推荐

开放式耳机好用吗?有平价些的开放式耳机推荐吗?那这两个问题的回答当然是肯定的。 首先开放式耳机好不好用取决于对耳机的需求,因为开放式耳机其实是比较适用于需要注意周围环境、需要‌长时间佩戴舒适以及需要频繁与人交流的场景中,在这些场景下使用开放式耳机的话就会比较有优势。就例如跑步骑行健身等运动的时候,能够兼得佩戴舒适度的同时,增加一定的安全性;还有在办公学习的时候,会很适合长时间佩戴,能够方便和

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通