Flutter智能设备配网插件esp_touch_flutter_plugin的使用

esp_touch_flutter_plugin #

客户端(移动)Android Flutter实现的ESP-Touch协议

开始使用 #

此项目是Flutter的一个起点 插件包, 这是一种包含Android和/或iOS平台特定实现代码的专业化包。

有关如何开始使用Flutter的帮助,请查看我们的 在线文档,其中提供了教程、示例、移动开发指南以及完整的API参考。

example/lib/main.dart

import 'package:esp_touch_flutter_plugin/esp_touch_flutter_plugin.dart';
import 'package:esp_touch_flutter_plugin/esp_touch_result.dart';
import 'package:flutter/material.dart';

void main() { runApp(const MyApp()); }

class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key);

@override State<MyApp> createState() => _MyAppState(); }

class _MyAppState extends State<MyApp> { String _state = “停止”; int _count = 0; List<EspTouchResult> _results = [];

@override void initState() { super.initState(); // 监听发送过程中的事件 EspTouchFlutterPlugin.onSending.listen((EspTouchResult espTouchResult) { _results.add(espTouchResult); setState(() { _count = _count + 1; _results = _results; }); }); // 监听发送完成后的事件 EspTouchFlutterPlugin.onSendFinished .listen((List<EspTouchResult> espTouchResults) { setState(() { _count = espTouchResults.length; _results = espTouchResults; }); }); }

@override Widget build(BuildContext context) { // 构建设备连接信息列表 List<Row> listText = _results .map((e) => Row( children: [Text(“地址: ${e.address} BSSID: ${e.bssid}”)], )) .toList(); return MaterialApp( home: Scaffold( floatingActionButton: FloatingActionButton( child: const Icon(Icons.send), onPressed: () async { // 发送密码到ESP设备 String? message = await EspTouchFlutterPlugin.send(“928078ok”, count: 1); setState(() { _state = message ?? “未知状态”; }); }), appBar: AppBar( title: const Text(‘插件示例应用’), actions: [ IconButton( onPressed: () async { // 停止发送密码 bool isStoped = await EspTouchFlutterPlugin.cancel(); setState(() { _state = isStoped ? “停止” : ‘’; }); }, icon: const Icon(Icons.stop)) ], ), body: Column( children: [ Row( children: [ Text(“状态: $_state”), ], ), Row( children: [ Text(“已连接ESP设备数量: $_count”), ], ), Row( children: [ Column( children: listText, ) ], ) // ListView( // children: listTitle, // ) ], ), ), ); } }

```

完整示例代码

在上述代码中,我们展示了如何使用esp_touch_flutter_plugin插件进行ESP设备的配网。以下是关键部分的注释:

  1. 导入必要的库

    import 'package:esp_touch_flutter_plugin/esp_touch_flutter_plugin.dart';
    import 'package:esp_touch_flutter_plugin/esp_touch_result.dart';
    import 'package:flutter/material.dart';
    
  2. 定义主应用类

    class MyApp extends StatefulWidget {
      const MyApp({Key? key}) : super(key: key);
    
      [@override](/user/override)
      State&lt;MyApp&gt; createState() =&gt; _MyAppState();
    }
    
  3. 初始化状态并监听事件

    class _MyAppState extends State&lt;MyApp&gt; {
      String _state = "停止";
      int _count = 0;
      List&lt;EspTouchResult&gt; _results = [];
    
      [@override](/user/override)
      void initState() {
        super.initState();
        // 监听发送过程中的事件
        EspTouchFlutterPlugin.onSending.listen((EspTouchResult espTouchResult) {
          _results.add(espTouchResult);
          setState(() {
            _count = _count + 1;
            _results = _results;
          });
        });
        // 监听发送完成后的事件
        EspTouchFlutterPlugin.onSendFinished
            .listen((List&lt;EspTouchResult&gt; espTouchResults) {
          setState(() {
            _count = espTouchResults.length;
            _results = espTouchResults;
          });
        });
      }
    
  4. 构建UI

    [@override](/user/override)
    Widget build(BuildContext context) {
      // 构建设备连接信息列表
      List&lt;Row&gt; listText = _results
          .map((e) =&gt; Row(
                children: [Text("地址: ${e.address} BSSID: ${e.bssid}")],
              ))
          .toList();
      return MaterialApp(
        home: Scaffold(
          floatingActionButton: FloatingActionButton(
              child: const Icon(Icons.send),
              onPressed: () async {
                // 发送密码到ESP设备
                String? message =
                    await EspTouchFlutterPlugin.send("928078ok", count: 1);
                setState(() {
                  _state = message ?? "未知状态";
                });
              }),
          appBar: AppBar(
            title: const Text('插件示例应用'),
            actions: [
              IconButton(
                  onPressed: () async {
                    // 停止发送密码
                    bool isStoped = await EspTouchFlutterPlugin.cancel();
                    setState(() {
                      _state = isStoped ? "停止" : '';
                    });
                  },
                  icon: const Icon(Icons.stop))
            ],
          ),
          body: Column(
            children: [
              Row(
                children: [
                  Text("状态: $_state"),
                ],
              ),
              Row(
                children: [
                  Text("已连接ESP设备数量: $_count"),
                ],
              ),
              Row(
                children: [
                  Column(
                    children: listText,
                  )
                ],
              )
              // ListView(
              //   children: listTitle,
              // )
            ],
          ),
        ),
      );
    }
    

更多关于Flutter智能设备配网插件esp_touch_flutter_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter智能设备配网插件esp_touch_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


esp_touch_flutter_plugin 是一个用于在 Flutter 应用中实现智能设备配网的插件,主要用于支持 ESP-Touch 协议。ESP-Touch 是一种由乐鑫(Espressif)开发的智能配网协议,常用于 ESP8266、ESP32 等 Wi-Fi 模块的设备配网。

以下是如何在 Flutter 项目中使用 esp_touch_flutter_plugin 的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 esp_touch_flutter_plugin 依赖:

dependencies:
  flutter:
    sdk: flutter
  esp_touch_flutter_plugin: ^0.0.1  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:esp_touch_flutter_plugin/esp_touch_flutter_plugin.dart';

3. 初始化插件

在使用插件之前,通常需要初始化它。你可以在 initState 方法中进行初始化:

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  EspTouchFlutterPlugin _espTouchPlugin;

  @override
  void initState() {
    super.initState();
    _espTouchPlugin = EspTouchFlutterPlugin();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('ESP-Touch Demo'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: _startEspTouch,
            child: Text('Start ESP-Touch'),
          ),
        ),
      ),
    );
  }

  void _startEspTouch() async {
    // 这里调用配网方法
  }
}

4. 启动配网

_startEspTouch 方法中,你可以调用插件的配网方法。通常需要提供 Wi-Fi 的 SSID 和密码:

void _startEspTouch() async {
  try {
    String ssid = 'Your_WiFi_SSID';
    String password = 'Your_WiFi_Password';

    List<EspTouchResult> results = await _espTouchPlugin.start(ssid, password);

    if (results.isNotEmpty) {
      // 配网成功,处理返回的设备信息
      for (EspTouchResult result in results) {
        print('Device IP: ${result.ip}, BSSID: ${result.bssid}');
      }
    } else {
      // 配网失败
      print('No devices found');
    }
  } catch (e) {
    // 处理异常
    print('Error: $e');
  }
}

5. 处理配网结果

配网成功后,start 方法会返回一个 EspTouchResult 列表,其中包含配网成功的设备信息,如 IP 地址和 BSSID。

6. 停止配网

如果需要手动停止配网,可以调用 stop 方法:

void _stopEspTouch() async {
  await _espTouchPlugin.stop();
}

7. 处理权限

在某些 Android 设备上,可能需要在 AndroidManifest.xml 中添加以下权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

8. 处理 iOS 权限

在 iOS 上,可能需要在 Info.plist 中添加以下权限:

<key>NSLocationWhenInUseUsageDescription</key>
<string>We need your location to scan for Wi-Fi networks</string>
回到顶部