使用flutter控制蓝牙通讯_创建Flutter app使用蓝牙控制Arduino关联电器

背景知识视频教程

面向初学者的Flutter App开发​viadean.comFlutter:入门 - 国外课栈​viadean.com通过构建实际应用程序来掌握Arduino - 国外课栈​viadean.com

用移动设备远程控制任何电气设备总是很酷,甚至不需要靠近移动设备。

我们将看到如何使用IoT给普通的交流电源插头,插座或开关增添魔力。 这将使我们能够借助具有蓝牙功能的应用程序(当然是使用Flutter构建的)借助移动设备来控制房屋中的任何电气设备。

本文将介绍很多内容:

将蓝牙集成到Flutter应用程序中(用于与IoT设备通信)

将各种模块连接到Arduino(蓝牙模块和5V继电器)

设置Arduino(发送和接收信号)

集成蓝牙

最终的应用程序用户界面如下所示:

对于这个项目,我们将使用一个名为flutter_bluetooth_serial的插件。还有一个很棒的插件,用于将Flutter_blue集成到Flutter应用程序中的蓝牙。

但是对于该项目,我使用的是flutter_bluetooth_serial插件,因为它具有更多功能,并且在与其他设备通信时可以更好地控制蓝牙连接。

该插件的缺点是,到目前为止,它仅支持Android。

将插件添加到您的pubspec.yaml文件中:

dependencies:

flutter_bluetooth_serial: ^0.2.2

定义基本结构

删除整个Flutter Demo Counter应用程序代码后,创建一个新的Flutter应用程序并将以下内容添加到main.dart文件中。

>

这是启动我们的项目的基本结构。我们必须为蓝牙应用程序类使用StatefulWidget,因为我们需要在应用程序的生命周期内多次更改状态。

启用蓝牙和检索设备

现在我们已经有了应用程序的基本结构,我们可以集中精力启用用户设备的蓝牙连接并检索配对的设备。

初始化一些需要的变量(稍后,在构建应用程序时,我们将根据需要添加更多的类成员变量):

>

首先,在initState()内部,我们必须获取当前的蓝牙状态。根据状态,请求用户授予蓝牙权限,以在未打开蓝牙的情况下在其设备上启用蓝牙。

>

现在,我们必须定义两个函数:

enableBluetooth()用于从用户获取蓝牙权限。

getPairedDevices()用于检索配对的设备列表。

启用蓝牙的功能实现:

>

检索蓝牙设备列表的功能实现:

>

为了避免任何内存泄漏,我们将定义dispose()方法以确保关闭连接并释放资源。

// Define a member variable to track

// when the disconnection is in progress

bool isDisconnecting = false;

@override

void dispose() {

if (isConnected) {

isDisconnecting = true;

connection.dispose();

connection = null;

}

super.dispose();

}

启用蓝牙的用户界面

因此,我们拥有与设备建立正确的蓝牙连接所需的所有方法,现在我们必须将它们映射到某些UI小部件。

首先,我们将添加一个Switch小部件,它只能在两种模式之间进行切换。

该组件的代码如下:

>

在此,开关将根据是否启用/禁用蓝牙连接在开/关之间切换。 不管是否通过切换启用或禁用了蓝牙,都会调用getPairedDevices()方法以刷新设备列表(即,如果启用了蓝牙,则将更新设备列表;如果禁用了蓝牙,则列表内容将 设为空)。

配对设备的用户界面列表

我们将使用DropdownButton小部件来显示已配对设备的列表。

// Inside _BluetoothAppState class

// Define this member variable for storing

// each device from the dropdown items

BluetoothDevice _device;

DropdownButton(

items: _getDeviceItems(),

onChanged: (value) =>

setState(() => _device = value),

value: _devicesList.isNotEmpty ? _device : null,

),

定义用于将设备名称存储在列表中的方法_getDeviceItems()。当列表中没有要存储的设备时,唯一写有“ NONE”的文本被存储。

// Inside _BluetoothAppState class

List> _getDeviceItems() {

List> items = [];

if (_devicesList.isEmpty) {

items.add(DropdownMenuItem(

child: Text('NONE'),

));

} else {

_devicesList.forEach((device) {

items.add(DropdownMenuItem(

child: Text(device.name),

value: device,

));

});

}

return items;

}

蓝牙连接到设备

与设备断开连接

连接/断开按钮的用户界面

将消息发送到蓝牙设备

蓝牙发送消息的用户界面

将各种模块连接到Arduino

设置Arduino

源代码创建Flutter app使用蓝牙控制Arduino关联电器​viadean.com

你可能感兴趣的:(使用flutter控制蓝牙通讯)