🥑使用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中的值。

现在,我们有了一个完整的应用程序,可以扫描蓝牙设备,连接到它们,显示它们的服务,读取它们的值,更新它们并收到有关更改的通知。

完整源码

🏈page指点迷津 | Brief

Last updated