背景知识视频教程

Dart和Flutter:完整的开发人员指南 - 国外课栈​viadean.comFlutter使用Firestore构建复杂的Android和ios应用 - 国外课栈​viadean.comFlutter的实际项目 - 国外课栈​viadean.com

您想使用蓝牙玩物联网设备,但不能在其中放置任何软件吗? 在这里,我们将了解如何使用电话应用程序通过蓝牙与IoT设备进行通信。 是使用Android还是iOS? 都可以! 我们将使用Flutter作为移动应用程序的开发框架。 我们将编写一个nRF连接灯,以便在设备上进行扫描,连接,读取和写入操作。

添加依赖项

>...

更改用于Android的minSdkVersion

Android {

defaultConfig {

minSdkVersion: 19

添加蓝牙权限

我们需要添加使用蓝牙和访问位置的权限:

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方法目前尚不做很多事情:

>...

现在,我们的构建方法将返回此_buildView:

>...

最后,我们可以在FlatButton的onPressed方法中添加一些逻辑,在该方法中我们将停止FlutterBlue的扫描,连接到该设备并将该设备设置为先前创建的状态_connectedDevice并获取该设备的服务并显示列表。

>...

更改_buildConnectDeviceView如下:

>...

显示特性

现在,我们有可供使用的服务列表。我们将显示每个服务的特征,并根据我们是否可以读取,写入或通知此功能来添加按钮。

我们新的_buildConnectDeviceView看起来像这样:

>...

然后添加一个计算按钮的函数:

>...

现在的结果:

读取,写入和接收来自特征的通知

最后一步是在读取,写入和通知按钮上添加逻辑。

我们将首先添加一个Map以按特征存储我们的值,以便能够显示它们。

在MyHomePage类中,添加以下内容:

>...

然后在_buildConnectDeviceView方法中添加一个新行以显示我们的值:

>...

读取

首先让我们在读取按钮的onPressed方法中添加逻辑:

>...

在这里,我们首先听取特征变化并将其新值存储在我们先前创建的Map中。然后它将更新我们的视图并显示更新的值。

写入

为了将数据发送到设备,我们将在对话框内创建一个TextField字段,将控制器链接到该字段并发送其内容。

因此,让我们向_MyHomePageState添加一个控制器:

>...

并使用写入按钮的onPressed方法内部的逻辑创建我们的对话框:

>...

因此,我们只需将传递给我们的输入值调用特征的write函数,然后使用dart:convert将其转换为字节数组

通知

通知只是在每次处理通知的特征值更新时执行的回调:

>...

现在,每次此特征的值发生变化时,我们都会得到通知,这也将更新我们UI中的值。

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

完整源码

使用Flutter控制蓝牙通讯 - 国外课栈​viadean.com

使用flutter控制蓝牙通讯_使用Flutter控制蓝牙通讯相关推荐

  1. 三菱fx2n做从站的modbus通讯_三菱PLC控制如何变频器?正解多种方法

    在工业自动化控制系统中,最为常见的是plc和变频器的组合应用,并且产生了多种多样的PLC控制变频器的方法,其中采用RS-485通讯方式实施控制的方案得到广泛的应用:因为它抗干扰能力强.传输速率高.传输 ...

  2. 三菱fx2n做从站的modbus通讯_三菱PLC控制变频器的方法

    前沿 变频器是一个执行机构,它的作用就是驱动三相异步电动机,一些高性能的变频器也可以驱动同步电机,甚至增加编码器反馈实现伺服功能.至于如何驱动,就靠PLC控制实现. 在工控行业中,PLC与变频器是最常 ...

  3. flutter图片聊天泡泡_基于 Flutter+Dart 聊天实例 | Flutter 仿微信界面聊天室

    1.项目介绍 Flutter是目前比较流行的跨平台开发技术,凭借其出色的性能获得很多前端技术爱好者的关注,比如阿里闲鱼,美团,腾讯等大公司都有投入相关案例生产使用. flutter_chatroom项 ...

  4. 10蓝牙模块 hm 电脑蓝牙 连接_树莓派与HM-10蓝牙模块搭建iBeacon | 学步园

    最近iBeacon很火,我也买了个树莓派搭建一个iBeacon玩玩. 首先,需要的设备有: 1. 树莓派及电源 2. 一个蓝牙模块(网上都是用蓝牙适配器,而我用的是HM-10的蓝牙模块). 3. 连接 ...

  5. python 蓝牙开发_基于python实现蓝牙通信代码实例

    这篇文章主要介绍了基于python实现蓝牙通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 安装和示例 linux下安装 sudo apt ...

  6. 三菱fx2n做从站的modbus通讯_触摸屏与施耐德PLC通讯说明

    MCGS Tpc屏与施耐德TM218 PLC通讯说明 一硬件连接 1.PLC通讯接口说明: 2.通讯电缆图: 二PLC设置 1. 配置端口:  双击串行线路-弹出右侧设置窗口-设置串口通讯参数 2.  ...

  7. 三菱PLC与第三方设备TCP通讯_三菱PLC与PC通讯之MX Component

    在视觉检测项目中经常用到PC与PLC的通讯,本文主要介绍三菱PLC与PC通讯. 自由协议串口通讯 前期项目中三菱PLC与PC通讯的方式采用串口通讯,并在网上查找到三菱的串口通讯协议,即按照固定格式发送 ...

  8. flutter json转对象_在 Flutter 使用 Redux 来共享状态和管理单一数据

    React 生态里广为人知的 Redux 状态管理,其实在 Flutter 中也能适用,它能很好的处理单一数据和状态共享,在一定程度上对于分割项目之间复杂的业务有一定的积极作用,可阅读可维护也能做的很 ...

  9. flutter引入高德地图_玩玩Flutter Web —— 实现高德地图插件

    Red Deer 1.啰嗦几句 去年写了一个功能简单的高德地图插件给flutter_deer使用,当时支持了Android与iOS两端.前一阵子有一个issue问是否会支持Flutter Web,当时 ...

  10. flutter 拖拽布局_使用Flutter模仿SOUL可任意拖动的悬浮按钮

    在Flutter中,我们可以两种方式实现小部件对拖动效果 GestureDetector() Draggable() GestureDetector 在开发过程中经常使用到GestureDetecto ...

最新文章

  1. 三、python中最基础的文件处理汇总
  2. 上传数据,直接分析,这才是真正的生物云
  3. python json解析列表显示_求教一下 python 读取 json 以后,输出的问题(unicode 和中文显示)...
  4. Android stado 运行项目,apk does not exist on disk.
  5. 自由群,外代数和泛包络代数
  6. android studio yasea,yasea: RTMP streaming client for Android.
  7. Python 模块学习
  8. android-support-v7-appcompat的配置使用
  9. Docker、CentOS 8遭弃用,GPT-3、M1芯片撼动技术圈,盘点2020影响开发者的十大事件!
  10. ustc FreeBSD / rust 镜像源
  11. android api文档中文版_干货分享 | Android 存储空间的最佳实践 (下)
  12. 漫话:如何给女朋友解释什么是撞库、脱库和洗库?
  13. V360i手机相关软件全面介绍(附下载)
  14. 文件关联修复工具(用文本文档保存后后缀修改为bat)
  15. 在godaddy上申请属于自己的域名
  16. Opengl+VS2019安装+(简单例子)+Opengl教程
  17. MichiGAN:Multi-Input-Conditioned Hair Image Generation for Portrait Editing---论文阅读笔记
  18. 【AI简报20210604期】意法半导体收购Cartesiam、10个顶级开源AI项目分享
  19. 网管型交换机与非网管型交换机的区别
  20. 半天速成Python超简网站

热门文章

  1. English语法_定语从句 - 小细节
  2. IoT 物联网设备OTA:升级包下载过程详解
  3. NR SRB and message transfer
  4. 浅谈“异常信息泄露(应用程序错误)”
  5. 网站死链接检测查询工具
  6. vue结合高德地图V2.0(JSAPI key搭配代理服务器并携带安全密钥转发)
  7. 什么是TPM设备管理系统?本文来告诉你
  8. 2019长安大学ACM校赛网络同步赛 B Trial of Devil (递归)
  9. java 不登录购物车_java-没有用户登录时存储购物车(playframework疑问)
  10. null 和 undefined 的区别