Flutter与树莓派交互插件flutterpi_tool的使用

Flutter与树莓派交互插件flutterpi_tool的使用

flutterpi_tool 是一个用于简化 Flutter 应用在树莓派上开发和分发的工具。

新闻

  • flutterpi_tool 现在支持直接在设备上运行应用。
  • Windows 和 Linux armv7/arm64 现在支持运行 flutterpi_tool

安装

安装 flutterpi_tool 非常简单:

flutter pub global activate flutterpi_tool

flutterpi_tool 与官方的 Flutter 工具深度集成,因此在使用不兼容版本时可能会遇到错误。

如果遇到错误并退出,请确保你使用的是最新稳定的 Flutter SDK。如果你使用的是较旧的 Flutter SDK,可能需要添加显式的依赖约束以使用较旧版本的 flutterpi_tool。例如,对于 Flutter 3.19,你可以使用 flutterpi_tool 版本 0.3.x:

flutter pub global activate flutterpi_tool ^0.3.0

如果已经使用了最新的稳定 Flutter SDK,但命令仍然无法执行,请打开一个问题!

使用方法

$ flutterpi_tool --help
A tool to make development & distribution of flutter-pi apps easier.

Usage: flutterpi_tool <command> [arguments]

Global options:
-h, --help         Print this usage information.
-d, --device-id    Target device id or name (prefixes allowed).

Other options
    --verbose      Enable verbose logging.

Available commands:

Flutter-Pi Tool
  precache   Populate the flutterpi_tool's cache of binary artifacts.

Project
  build      Builds a flutter-pi asset bundle.
  run        Run your Flutter app on an attached device.

Tools & Devices
  devices    List & manage flutterpi_tool devices.

Run "flutterpi_tool help <command>" for more information about a command.

示例

1. 添加设备

$ flutterpi_tool devices add pi@pi5
Device "pi5" has been added successfully.

2. 添加设备,并指定显示尺寸和自定义设备名称

$ flutterpi_tool devices add pi@pi5 --display-size=285x190 --id=my-pi
Device "my-pi" has been added successfully.

3. 列出设备

$ flutterpi_tool devices
Found 1 wirelessly connected device:
  pi5 (mobile) • pi5 • linux-arm64 • Linux

If you expected another device to be detected, try increasing the time to wait
for connected devices by using the "flutterpi_tool devices list" command with
the "--device-timeout" flag.
...

4. 在远程设备上创建并运行应用

$ flutter create hello_world && cd hello_world

$ flutterpi_tool run -d pi5
Launching lib/main.dart on pi5 in debug mode...
Building Flutter-Pi bundle...
Installing app on device...
...

5. 以性能模式运行应用

$ flutterpi_tool run -d pi5 --profile

完整示例 DEMO

以下是一个完整的示例,演示如何在树莓派上创建和运行一个 Flutter 应用:

  1. 安装 flutterpi_tool
flutter pub global activate flutterpi_tool
  1. 添加设备
$ flutterpi_tool devices add pi@pi5
Device "pi5" has been added successfully.
  1. 创建 Flutter 应用
$ flutter create hello_world && cd hello_world
  1. 运行应用
$ flutterpi_tool run -d pi5
Launching lib/main.dart on pi5 in debug mode...
Building Flutter-Pi bundle...
Installing app on device...
...

更多关于Flutter与树莓派交互插件flutterpi_tool的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter与树莓派交互插件flutterpi_tool的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter应用中使用flutterpi_tool插件与树莓派进行交互的代码案例。flutterpi_tool插件允许Flutter应用通过WebSocket与树莓派进行通信,从而控制树莓派上的硬件或执行一些操作。

环境准备

  1. 树莓派端

    • 安装Flask或Django等Web框架来创建一个WebSocket服务器。
    • 安装RPi.GPIO库来控制GPIO引脚。
  2. Flutter端

    • 确保你的Flutter环境已经设置好。
    • 添加flutterpi_tool插件到你的pubspec.yaml文件中。

树莓派端代码示例(使用Flask和WebSocket)

首先,在树莓派上创建一个WebSocket服务器。以下是一个简单的Flask应用示例,它监听来自Flutter应用的WebSocket连接,并可以接收GPIO控制命令。

from flask import Flask, render_template
from flask_socketio import SocketIO, emit
import RPi.GPIO as GPIO
import time

app = Flask(__name__)
socketio = SocketIO(app)

# 设置GPIO模式
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)  # 假设使用GPIO 18

@app.route('/')
def index():
    return render_template('index.html')  # 可以是一个空的HTML页面,仅用于WebSocket连接测试

@socketio.on('connect')
def handle_connect():
    print("Client connected")

@socketio.on('disconnect')
def handle_disconnect():
    print("Client disconnected")

@socketio.on('gpio_control')
def handle_gpio_control(data):
    pin = data.get('pin')
    state = data.get('state')
    if pin == 18:
        GPIO.output(pin, GPIO.HIGH if state == 'on' else GPIO.LOW)
        emit('gpio_status', {'pin': pin, 'state': GPIO.input(pin)})

if __name__ == '__main__':
    socketio.run(app, host='0.0.0.0', port=5000)

Flutter端代码示例

接下来,在Flutter应用中添加flutterpi_tool插件,并使用它连接到树莓派的WebSocket服务器,发送GPIO控制命令。

# pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  flutterpi_tool: ^最新版本号  # 请替换为实际的最新版本号
// main.dart
import 'package:flutter/material.dart';
import 'package:flutterpi_tool/flutterpi_tool.dart';

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

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

class _MyAppState extends State<MyApp> {
  FlutterPiTool? _flutterPiTool;
  String _status = "Disconnected";

  @override
  void initState() {
    super.initState();
    _initFlutterPiTool();
  }

  void _initFlutterPiTool() {
    _flutterPiTool = FlutterPiTool(
      host: '树莓派的IP地址',  // 替换为树莓派的实际IP地址
      port: 5000,
    );

    _flutterPiTool!.connect().then((value) {
      setState(() {
        _status = "Connected";
      });
    }).catchError((error) {
      print("Connection error: $error");
      setState(() {
        _status = "Connection error";
      });
    });
  }

  void _controlGpio() {
    Map<String, dynamic> data = {'pin': 18, 'state': 'on'};
    _flutterPiTool!.send(data).then((response) {
      print("GPIO control response: $response");
    }).catchError((error) {
      print("GPIO control error: $error");
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter与树莓派交互'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Status: $_status'),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _controlGpio,
                child: Text('Turn GPIO 18 ON'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意事项

  1. IP地址:确保将FlutterPiToolhost参数设置为树莓派的实际IP地址。
  2. 依赖项:在树莓派上,确保安装了所有必要的Python依赖项,如flaskflask_socketio,以及RPi.GPIO
  3. 权限:树莓派上的GPIO操作通常需要root权限,确保你的WebSocket服务器有足够的权限来访问GPIO。

这个示例展示了如何通过WebSocket在Flutter应用和树莓派之间进行基本的通信和控制。根据你的实际需求,你可以扩展这个示例来实现更复杂的功能。

回到顶部