使用flutter控制蓝牙通讯_使用Flutter控制蓝牙通讯
背景知識視頻教程
Dart和Flutter:完整的開發(fā)人員指南 - 國外課棧?viadean.comFlutter使用Firestore構(gòu)建復(fù)雜的Android和ios應(yīng)用 - 國外課棧?viadean.comFlutter的實際項目 - 國外課棧?viadean.com
您想使用藍牙玩物聯(lián)網(wǎng)設(shè)備,但不能在其中放置任何軟件嗎? 在這里,我們將了解如何使用電話應(yīng)用程序通過藍牙與IoT設(shè)備進行通信。 是使用Android還是iOS? 都可以! 我們將使用Flutter作為移動應(yīng)用程序的開發(fā)框架。 我們將編寫一個nRF連接燈,以便在設(shè)備上進行掃描,連接,讀取和寫入操作。
添加依賴項
>...
更改用于Android的minSdkVersion
Android {
defaultConfig {
minSdkVersion: 19
添加藍牙權(quán)限
我們需要添加使用藍牙和訪問位置的權(quán)限:
Android
在AndroidManifest.xml中添加:
>...
iOS
在Info.plist中添加:
>...
開始
現(xiàn)在是我們的main.dart:
import 'package:flutter/material.dart';
>...
我們將可以通過使用_MyHomePageState小部件內(nèi)的widget.flutterBlue屬性來訪問它。
掃描藍牙設(shè)備
現(xiàn)在開始掃描藍牙設(shè)備,并將其顯示在ListView中。
首先,我們在MyHomePage類中添加一個包含設(shè)備的列表:
>...
并在_MyHomePage類中編寫一個方法,該方法將有助于在列表中填充該方法:
>...
現(xiàn)在,通過在_MyHomePage的initState方法內(nèi)開始掃描來填充它:
注意:開始掃描時,您只會列出尚未連接的設(shè)備。因此,我們還將通過訪問FlutterBlue實例的connectedDevices屬性將已連接的設(shè)備添加到列表中。
>...
現(xiàn)在,我們的列表將填充FlutterBlue通過掃描找到的設(shè)備。
現(xiàn)在,以deviceList作為內(nèi)容構(gòu)建ListView:
>...
將此listView分配為我們主要支架的主體:
>...
現(xiàn)在我們應(yīng)該有附近的支持藍牙的設(shè)備列表。接下來,我們將連接到其中一個,并顯示其具有的服務(wù)和特征。
連接到設(shè)備并顯示具有特征的服務(wù)
出于可讀性考慮,我們將不會創(chuàng)建新視圖來連接到設(shè)備,而是會修改MyHomePage的當(dāng)前內(nèi)容,以使其取決于我們是否已連接。 為此,我們首先要添加一個函數(shù),該函數(shù)將返回正確的視圖以顯示。
因此,讓我們在_MyHomePageState中添加一個表示要連接的設(shè)備的狀態(tài)及其公開的服務(wù)列表:
>...
函數(shù):
>...
_buildConnectDeviceView方法目前尚不做很多事情:
>...
現(xiàn)在,我們的構(gòu)建方法將返回此_buildView:
>...
最后,我們可以在FlatButton的onPressed方法中添加一些邏輯,在該方法中我們將停止FlutterBlue的掃描,連接到該設(shè)備并將該設(shè)備設(shè)置為先前創(chuàng)建的狀態(tài)_connectedDevice并獲取該設(shè)備的服務(wù)并顯示列表。
>...
更改_buildConnectDeviceView如下:
>...
顯示特性
現(xiàn)在,我們有可供使用的服務(wù)列表。我們將顯示每個服務(wù)的特征,并根據(jù)我們是否可以讀取,寫入或通知此功能來添加按鈕。
我們新的_buildConnectDeviceView看起來像這樣:
>...
然后添加一個計算按鈕的函數(shù):
>...
現(xiàn)在的結(jié)果:
讀取,寫入和接收來自特征的通知
最后一步是在讀取,寫入和通知按鈕上添加邏輯。
我們將首先添加一個Map以按特征存儲我們的值,以便能夠顯示它們。
在MyHomePage類中,添加以下內(nèi)容:
>...
然后在_buildConnectDeviceView方法中添加一個新行以顯示我們的值:
>...
讀取
首先讓我們在讀取按鈕的onPressed方法中添加邏輯:
>...
在這里,我們首先聽取特征變化并將其新值存儲在我們先前創(chuàng)建的Map中。然后它將更新我們的視圖并顯示更新的值。
寫入
為了將數(shù)據(jù)發(fā)送到設(shè)備,我們將在對話框內(nèi)創(chuàng)建一個TextField字段,將控制器鏈接到該字段并發(fā)送其內(nèi)容。
因此,讓我們向_MyHomePageState添加一個控制器:
>...
并使用寫入按鈕的onPressed方法內(nèi)部的邏輯創(chuàng)建我們的對話框:
>...
因此,我們只需將傳遞給我們的輸入值調(diào)用特征的write函數(shù),然后使用dart:convert將其轉(zhuǎn)換為字節(jié)數(shù)組
通知
通知只是在每次處理通知的特征值更新時執(zhí)行的回調(diào):
>...
現(xiàn)在,每次此特征的值發(fā)生變化時,我們都會得到通知,這也將更新我們UI中的值。
現(xiàn)在,我們有了一個完整的應(yīng)用程序,可以掃描藍牙設(shè)備,連接到它們,顯示它們的服務(wù),讀取它們的值,更新它們并收到有關(guān)更改的通知。
完整源碼
使用Flutter控制藍牙通訊 - 國外課棧?viadean.com
總結(jié)
以上是生活随笔為你收集整理的使用flutter控制蓝牙通讯_使用Flutter控制蓝牙通讯的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派2B使用360随身WiFi2代连接
- 下一篇: repo命令无法从gooole的网站下载