Pular para o conteúdo principal

Flutter para reTerminal

pir

Introdução

Este wiki explica como criar sua própria interface de usuário usando Flutter. Flutter é um kit de desenvolvimento de software de interface de usuário de código aberto criado pelo Google. Ele é usado para desenvolver aplicativos multiplataforma para Android, iOS, Linux, Mac, Windows, Google Fuchsia e web a partir de uma única base de código. Isso significa que você pode usar uma linguagem de programação e uma base de código para criar aplicativos diferentes (para iOS, Android e mais).

Para desenvolver com Flutter, você precisa de uma linguagem de programação chamada Dart. Dart é uma linguagem de programação de código aberto, de uso geral, orientada a objetos, com sintaxe de estilo C desenvolvida pelo Google.

Aqui usaremos Flutter para desenvolver um aplicativo no PC e depois executar o aplicativo no reTerminal usando flutter-pi. flutter-pi é um incorporador leve do Flutter Engine para Raspberry Pi que roda sem X. Isso significa que você não precisa inicializar na área de trabalho do Raspberry Pi OS e carregar X11 e LXDE. Você só precisa inicializar na linha de comando e executar seu aplicativo.

Seguindo o guia abaixo, você conseguirá criar um aplicativo para controlar os pinos GPIO no reTerminal apenas clicando em botões no LCD. Então vamos começar!

Preparar Ambiente de Desenvolvimento

No reTerminal

Primeiro precisamos instalar o flutter-pi no reTerminal.

Clique aqui para acessar o repositório GitHub do flutter-pi

  • Passo 1. Faça login no reTerminal conforme explicado neste wiki e instale os binários do flutter engine no reTerminal
git clone --depth 1 https://github.com/ardera/flutter-engine-binaries-for-arm.git engine-binaries
cd engine-binaries
sudo ./install.sh
  • Passo 2. Instale cmake, bibliotecas gráficas, de sistema e fontes
sudo apt install cmake libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev ttf-mscorefonts-installer fontconfig libsystemd-dev libinput-dev libudev-dev  libxkbcommon-dev
  • Passo 3. Atualize as fontes do sistema
sudo fc-cache
  • Passo 4. Faça o clone do flutter-pi e entre no diretório clonado
git clone https://github.com/ardera/flutter-pi
cd flutter-pi
  • Passo 5. Compile o flutter-pi
mkdir build && cd build
cmake ..
make -j`nproc`
  • Passo 6. Instale o flutter-pi
sudo make install
  • Passo 7. Abra o raspi-config
sudo raspi-config
  • Passo 8. Altere para o modo console navegando até System Options > Boot / Auto Login e selecione Console ou Console (Autologin)

  • Passo 9. Habilite o driver gráfico V3D navegando até Advanced Options > GL Driver > GL (Fake KMS)

  • Passo 10. Configure a memória da GPU navegando até Performance Options -> GPU Memory e insira 64

  • Passo 11. Pressione ESC no teclado para sair da janela rasp-config

  • Passo 12. Dê ao reTerminal permissão para usar aceleração 3D. (NOTA: risco potencial de segurança. Se você não quiser fazer isso, inicie o flutter-pi usando sudo em vez disso.)

usermod -a -G render pi
  • Passo 13. Reinicie o reTerminal
sudo reboot

Agora terminamos de instalar as ferramentas necessárias no reTerminal

No PC Host

Em seguida, precisamos preparar nosso PC host para o desenvolvimento. Aqui iremos instalar o Flutter SDK, que contém os pacotes necessários para o desenvolvimento com Flutter, o Android Studio para edição de código e o Android Emulator para executar e testar os códigos.

  • Passo 1. Baixe e instale o Flutter SDK de acordo com o seu sistema operacional

  • Passo 2. Digite o seguinte em uma janela de terminal para verificar se o Flutter SDK foi instalado com sucesso

flutter --version

pir

  • Passo 3. Baixe e instale o Android Studio de acordo com o seu sistema operacional

  • Passo 4. Abra o Android Studio e navegue até Configure > Plugins

pir

  • Passo 5. Em Marketplace, digite flutter na caixa de pesquisa e clique em Install

pir

  • Passo 6. Clique em Install na janela de prompt para instalar também o plugin Dart

pir

  • Passo 7. Clique em Restart IDE para reiniciar a IDE com os plugins instalados

pir

  • Passo 8. Quando a IDE abrir novamente, navegue até Configure > AVD Manager

pir

  • Passo 9. Clique em Create Virtual Device

pir

  • Passo 10. Clique em New Hardware Profile

pir

  • Passo 11. Configure as definições da seguinte forma

    • Device Name: reTerminal

    • Device Type: Phone/ Tablet

    • Screen:

      • Screen size: 5inch
      • Resolution: 1280 x 720
    • Memory: RAM: 2048MB

    • Input: [✓] Has Hardware Buttons (Back/Home/Menu)

    • Supported device states: [✓] Landscape

pir

  • Passo 12. Clique em Finish e depois clique em Next

  • Passo 13. Selecione a imagem Android mais recente e clique em Next

pir

  • Passo 14. Em Emulated Performance, selecione Hardware - GLES 2.0 para desempenho acelerado

pir

  • Passo 15. Finalmente clique em Finish

Agora concluímos com sucesso a preparação do ambiente de desenvolvimento

Aplicativo Flutter de Lâmpada Inteligente

Conexões de Hardware

Conectaremos um LED ao GPIO 24 do reTerminal para fins de teste. Depois você pode adicionar um relé e controlar eletrodomésticos usando o GPIO!

pir

Nota: É necessário um resistor entre o pino GPIO e o LED, caso contrário o LED queimará.

Criar e Inicializar o Aplicativo

  • Passo 1. Abra o Android Studio e clique em Create New Flutter Project

pir

  • Passo 2. O caminho do Flutter SDK será configurado automaticamente

pir

Nota: Se o caminho do Flutter SDK não estiver listado nesta janela, você pode apontar manualmente para o local do Flutter SDK

  • Passo 3. Preencha os detalhes do projeto conforme indicado e clique em Finish

pir

Agora seu projeto de exemplo será aberto com main.dart

Criar o main.dart (aplicativo principal)

Usaremos o arquivo main.dart dentro da pasta lib para criar o aplicativo Flutter

Abra o arquivo main.dart e copie os códigos a seguir

//library imports
import 'package:flutter/material.dart';
import 'package:flutter_gpiod/flutter_gpiod.dart';

//entry point for the app
void main() {
runApp(MyApp());
}

// This is the main application widget.
class MyApp extends StatelessWidget {
// Function for GPIO control
void ledState(state) {
// Retrieve the list of GPIO chips.
final chips = FlutterGpiod.instance.chips;

// Retrieve the line with index 24 of the first chip.
// This is BCM pin 24 for the Raspberry Pi.
final chip = chips.singleWhere(
(chip) => chip.label == 'pinctrl-bcm2711',
orElse: () =>
chips.singleWhere((chip) => chip.label == 'pinctrl-bcm2835'),
);

final line2 = chip.lines[24];

// Request BCM 24 as output.
line2.requestOutput(consumer: "flutter_gpiod test", initialValue: false);
line2.setValue(state);
line2.release();
}

@override
Widget build(BuildContext context) {
// MaterialApp widget
return MaterialApp(
// Hide the debug banner at the top right corner
debugShowCheckedModeBanner: false,
// Scaffold widget
home: Scaffold(
// background color of the app.
// Here after you type "Colors.", Android Studio will recommend the available colors.
// Also you can hover the mouse over to check the different color variations assigned
// by numbers enclosed by [ ].
backgroundColor: Colors.grey[700],
// AppBar widget
appBar: AppBar(
// background color of the appbar
backgroundColor: Colors.black,
// center align text inside appbar widget
title: Center(
child: Text(
'LIVING ROOM',
),
),
),
body: Center(
// Row widge
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
// ON Button function
ElevatedButton(
child: Text('ON'),
onPressed: () {
print('ON');
ledState(true);
},
// ON Button styling
style: ElevatedButton.styleFrom(
primary: Colors.orange[700],
padding: EdgeInsets.symmetric(horizontal: 30, vertical: 10),
textStyle:
TextStyle(fontSize: 40, fontWeight: FontWeight.normal)),
),
// Google Material Icon of a Light Bulb
Icon(
Icons.lightbulb_outline,
color: Colors.white,
size: 200,
),
// OFF Button function
ElevatedButton(
child: Text('OFF'),
onPressed: () {
print('OFF');
ledState(false);
},
// OFF Button styling
style: ElevatedButton.styleFrom(
primary: Colors.orange[300],
padding: EdgeInsets.symmetric(horizontal: 30, vertical: 10),
textStyle:
TextStyle(fontSize: 40, fontWeight: FontWeight.normal)),
),
],
),
),
),
);
}
}

Widgets Flutter Utilizados

Os widgets do Flutter são construídos usando um framework moderno que se inspira no React. A ideia central é que você constrói sua interface de usuário a partir de widgets. Os widgets descrevem como a visualização deve parecer dada sua configuração e estado atuais.

StatelessWidget: Stateless widgets são úteis quando a parte da interface de usuário que você está descrevendo não depende de nada além das informações de configuração no próprio objeto e do BuildContext no qual o widget é inflado.

MaterialApp: O widget MaterialApp é um widget que encapsula vários widgets que são comumente necessários para aplicativos com Material Design.

Scaffold: Um widget Scaffold fornece uma estrutura que implementa o layout visual básico de Material Design do app Flutter. Ele fornece APIs para mostrar drawers, snack bars e bottom sheets

Appbar: Appbar é um widget que contém a barra de ferramentas em um aplicativo Flutter.

Row: O widget Row é usado para exibir seus filhos em um array horizontal. Usaremos os elementos de UI dentro deste widget

ElevatedButton: O widget ElevatedButton consiste em um botão que pode ser pressionado e reagir de forma correspondente

Ícones Google Material

Nós usamos um ícone de lightbuilb dentro do app a partir dos Google Material Icons. Para explorar mais Google Material Icons, siga este link, pesquise por um botão, escolha o botão e veja o código Flutter para o botão

pir

Instalar a Biblioteca GPIO

Em seguida, vamos prosseguir para instalar a biblioteca de controle GPIO em nosso aplicativo Flutter. Aqui usaremos uma biblioteca GPIO chamada flutter_gpiod

  • Passo 1. Para instalar a biblioteca GPIO, vá para o arquivo pubspec.yaml dentro do seu projeto Flutter e adicione o seguinte em dependencies:
dependencies:
flutter_gpiod: ^0.4.0-nullsafety
  • Passo 2. Salve o arquivo e clique em Pub get

pir

Testar o App

  • Passo 1. Abra o arquivo main.dart

  • Passo 2. clique no botão no device selected e selecione o dispositivo Android que criamos antes

pir

Agora você verá a seguinte saída

pir

  • Passo 3. Clique no play button para executar o aplicativo

pir

Agora você verá o seguinte aplicativo em execução no Emulador Android

pir

Criar o Aplicativo e Transferir para o reTerminal

Em seguida, vamos criar nosso aplicativo Flutter e transferi-lo para o reTerminal

  • Passo 1. Abra uma janela de terminal dentro do Android Studio navegando até View > Tool Windows > Terminal

  • Passo 2. Digite o seguinte para preparar a compilação

flutter clean
  • Passo 3. Compile o projeto
flutter build bundle
  • Passo 4. Ligue o reTerminal

Nota: Você notará que o reTerminal é inicializado em modo de linha de comando

  • Passo 5. Transfira o projeto compilado para o reTerminal
scp -r ./build/flutter_assets pi@<ip_address_of_reTerminal>:/home/pi/testapp

Iniciar o Aplicativo no reTerminal

  • Passo 1. Digite o seguinte na linha de comando do reTerminal
flutter-pi /home/pi/testapp

pir

Quando você pressionar os botões ON e OFF, você notará que o LED conectado ao GPIO 24 começará a reagir de acordo!

Você também pode estender isso adicionando um relé aos pinos GPIO e controlar eletrodomésticos e construir uma solução completa de casa inteligente no reTerminal!

Demo Bônus

Se você quiser experimentar uma demo mais interessante com Flutter, você pode conferir este repositório GitHub

pir

Recursos

Suporte Técnico & Discussão de Produto

Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes formas de suporte para garantir que sua experiência com nossos produtos seja o mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

Loading Comments...