Flutter 中的低功耗蓝牙概述

news2024/9/21 19:55:39

随着智能设备数量的增加,控制这些设备的需求也在增加。对于多种使用情况,期望设备在需要进行控制的同时连接到互联网会受到很大限制,因此是不可行的。在这些情况下,使用低功耗蓝牙(也称为 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 应用程序有所帮助。蓝牙低功耗技术成本低、易于部署,而且可与基于互联网的应用程序连接,对延长消费电子产品的电池寿命有积极影响,因此绝对值得使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2113780.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[yolov5] --- yolov5入门实战「土堆视频」

1 项目介绍及环境配置 下载yolov5 tags 5.0源码,https://github.com/ultralytics/yolov5/tree/v5.0,解压 Pycharm 中创建conda虚拟环境 激活conda虚拟环境 根据作者提供的requirements.txt文件,pip install -r requirements.txt 如果作者没有…

【Spring Boot】 SpringBoot自动装配-Condition

目录 一、前言二、 定义2.1 Conditional2.2 Condition2.2.1 ConditionContext 三、 使用说明3.1 创建项目3.1.1 导入依赖3.1.2 添加配置信息3.1.3 创建User类3.1.4 创建条件实现类3.1.5 修改启动类 3.2 测试3.2.1 当user.enablefalse3.2.2 当user.enabletrue 3.3 小结 四、改进…

如何实现加密功能

文章目录 1. 概念介绍2. 方法与功能2.1 基本用法2.2 加密算法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FlutterCacheManager组件"相关的内容,本章回中将介绍一个加密工具包.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 加密主要…

基于YOLO8的图片实例分割系统

文章目录 在线体验快速开始一、项目介绍篇1.1 YOLO81.2 ultralytics1.3 模块介绍1.3.1 scan_task1.3.2 scan_taskflow.py1.3.3 segment_app.py 二、核心代码介绍篇2.1 segment_app.py2.2 scan_taskflow.py 三、结语 代码资源:计算机视觉领域YOLO8技术的图片实例分割…

0x05 tomcat AJP文件包含漏洞(CVE-2020-1938)复现(脚本最终没有验证成功)

参考: 13-3 tomcat AJP文件包含漏洞(CVE-2020-1938)_omcat ajp文件包含漏洞 payload-CSDN博客 一、fofa 搜索使用该服务器的网站 网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全态势感知 - F…

linux编译器——gcc/g++

1.gcc linux上先要安装, sudo yum install gcc gcc --version 可以查看当前的版本 ,我们默认安装的是4.8.5的版本,比较低, gcc test.c -stdc99 可以使他支持更高版本的c标准 -o 可以殖指明生成文件的名字,可以自己…

什么是Web服务器集群?

Web服务器集群是指将多台服务器组成一个集群,通过负载均衡将客户端请求分发到这些服务器上进行处理,从而提高网站的性能和可用性。每台服务器都运行着相同的应用程序和数据,并且能够相互通信和协调工作。 1.为什么需要Web服务器集群 随着互联…

0基础学习爬虫系列:网页内容爬取

1.背景 今天我们来实现,监控网站最新数据爬虫。 在信息爆炸的年代,能够有一个爬虫帮你,将你感兴趣的最新消息推送给你,能够帮你节约非常多时间,同时确保不会miss重要信息。 爬虫应用场景: 应用场景主要功…

Transformer从零详细解读

Transformer从零详细解读 一、从全局角度概况Transformer ​ 我们把TRM想象为一个黑盒,我们的任务是一个翻译任务,那么我们的输入是中文的“我爱你”,输入经过TRM得到的结果为英文的“I LOVE YOU” ​ 接下来我们对TRM进行细化,…

【Linux】萌新看过来!一篇文章带你走进Linux世界

🚀个人主页:奋斗的小羊 🚀所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言💥1、初识Linux💥1.1 什么是操作系统?💥1.2 各种操作…

分享一个基于微信小程序的医院挂号就诊一体化平台uniapp医院辅助挂号应用小程序设计(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

SpringBoot学习(9)(springboot自动配置原理)(源码分析、面试题)

目录 一、引言 二、为啥学习自动配置原理? 三、自动配置 (1)基本概述 (2)学习回顾 四、自动配置——源码分析 (1)回顾学习 (2)回到源码学习 (1)注…

文件系统 文件描述符fd 重定向原理 缓冲区

文章目录 基础的文件操作文件的系统调用接口位图向文件中写入标记位选项总结&#xff1a;open的返回值文件描述符fdfd012与硬件的关系read && stat 重定向dup2 缓冲区的理解经典的例子 基础的文件操作 引子&#xff1a; #include <stdio.h>int main() {FILE* f…

[Linux]:环境变量与进程地址空间

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 环境变量 1.1 概念 **环境变量(environment variables)**一般是指在操作…

在Unity环境中使用UTF-8编码

为什么要讨论这个问题 为了避免乱码和更好的跨平台 我刚开始开发时是使用VS开发,Unity自身默认使用UTF-8 without BOM格式,但是在Unity中创建一个脚本,使用VS打开,VS自身默认使用GB2312(它应该是对应了你电脑的window版本默认选取了国标编码,或者是因为一些其他的原因)读取脚本…

自己部门日均1000+告警?如何减少90%无效告警?

目录标题 一、告警的类别1.技术告警1.1基础设施告警1.2基本服务告警 2.业务告警3.监控大盘告警 二、为何需要告警治理&#xff1f;三、治理迫在眉睫1.1告警治理策略1.2核心监控告警点1.3避免告警反模式1.4告警规约制定1.5自动化处理 一、告警的类别 一般的告警分为以下几点&am…

ISP面试准备2

系列文章目录 文章目录 系列文章目录前言一.如何评价图像质量&#xff1f;二.引起图像噪声的原因三. ISP3.1 ISP Pipeline主要模块3.1.1坏点校正&#xff08;Defect Pixel Correction, DPC&#xff09;3.1.2黑电平校正&#xff08;Black Level Correction, BLC&#xff09;3.1.…

面试官:synchronized的锁升级过程是怎样的?

大家好&#xff0c;我是大明哥&#xff0c;一个专注「死磕 Java」系列创作的硬核程序员。 回答 在 JDK 1.6之前&#xff0c;synchronized 是一个重量级、效率比较低下的锁&#xff0c;但是在JDK 1.6后&#xff0c;JVM 为了提高锁的获取与释放效&#xff0c;,对 synchronized 进…

基于JSP的实验室管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 Spring Boot框架 工具&#xff1a;IDEA/Eclipse、Navicat、Tomcat 系统展示 首页 用户个…

自然语言处理系列六十二》神经网络算法》MLP多层感知机算法

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列六十二神经网络算法》MLP多层感知机算法CNN卷积…