🥑使用Flutter控制蓝牙通讯
Flutter | 蓝牙
您想使用蓝牙玩物联网设备,但不能在其中放置任何软件吗? 在这里,我们将了解如何使用电话应用程序通过蓝牙与IoT设备进行通信。 是使用Android还是iOS? 都可以! 我们将使用Flutter作为移动应用程序的开发框架。 我们将编写一个nRF连接灯,以便在设备上进行扫描,连接,读取和写入操作。
添加依赖项
更改用于Android的minSdkVersion
添加蓝牙权限
我们需要添加使用蓝牙和访问位置的权限:
Android
在AndroidManifest.xml中添加:
iOS
在Info.plist中添加:
开始
现在是我们的main.dart:
import
'package:flutter/material.dart'; </>...
我们将可以通过使用_MyHomePageState小部件内的widget.flutterBlue属性来访问它。
扫描蓝牙设备
现在开始扫描蓝牙设备,并将其显示在ListView中。
首先,我们在MyHomePage类中添加一个包含设备的列表:
并在_MyHomePage类中编写一个方法,该方法将有助于在列表中填充该方法:
现在,通过在_MyHomePage的initState方法内开始扫描来填充它:
注意:开始扫描时,您只会列出尚未连接的设备。因此,我们还将通过访问FlutterBlue实例的connectedDevices属性将已连接的设备添加到列表中。
现在,我们的列表将填充FlutterBlue通过扫描找到的设备。
现在,以deviceList作为内容构建ListView:
将此listView分配为我们主要支架的主体:
现在我们应该有附近的支持蓝牙的设备列表。接下来,我们将连接到其中一个,并显示其具有的服务和特征。
连接到设备并显示具有特征的服务
出于可读性考虑,我们将不会创建新视图来连接到设备,而是会修改MyHomePage的当前内容,以使其取决于我们是否已连接。 为此,我们首先要添加一个函数,该函数将返回正确的视图以显示。
因此,让我们在_MyHomePageState中添加一个表示要连接的设备的状态及其公开的服务列表:
显示特性
现在,我们有可供使用的服务列表。我们将显示每个服务的特征,并根据我们是否可以读取,写入或通知此功能来添加按钮。
我们新的_buildConnectDeviceView看起来像这样:
读取,写入和接收来自特征的通知
最后一步是在读取,写入和通知按钮上添加逻辑。
我们将首先添加一个Map以按特征存储我们的值,以便能够显示它们。
在MyHomePage类中,添加以下内容:
读取
首先让我们在读取按钮的onPressed方法中添加逻辑:
写入
为了将数据发送到设备,我们将在对话框内创建一个TextField字段,将控制器链接到该字段并发送其内容。
因此,让我们向_MyHomePageState添加一个控制器:
通知
通知只是在每次处理通知的特征值更新时执行的回调:
现在,每次此特征的值发生变化时,我们都会得到通知,这也将更新我们UI中的值。
现在,我们有了一个完整的应用程序,可以扫描蓝牙设备,连接到它们,显示它们的服务,读取它们的值,更新它们并收到有关更改的通知。
完整源码
🏈指点迷津 | BriefLast updated