Controle seu Arduino com Python Puro

O guia completo e interativo para pyfirmata2. A ponte mais simples entre scripts Python e o protocolo Firmata, com suporte a callbacks assíncronos e amostragem precisa.

Comunicação
Serial

Protocolo Firmata Padrão

Modo de Leitura
Assíncrono

Callbacks automáticos

Suporte
Total

Digital, Analógico, PWM, Servo, I2C

Setup
< 2 min

Autodetecção de portas

Fluxo de Instalação

Para usar o pyfirmata2, você precisa preparar tanto o seu computador (Python) quanto o microcontrolador (Arduino). Siga este fluxo lógico:

1

No Arduino

O Arduino precisa entender os comandos que o Python enviará.

  1. Abra a Arduino IDE.
  2. Vá em File > Examples > Firmata.
  3. Selecione StandardFirmata.
  4. Faça o Upload para sua placa.
2

No Computador

Instale a biblioteca Python.

pip install pyfirmata2

Certifique-se de ter o Python 3.x instalado.

3

Conexão Básica

Script mínimo para teste.

import pyfirmata2

# Autodetect
board = pyfirmata2.Arduino.AUTODETECT

print("Conectado!")
board.digital[13].write(1)

Explorador de Pinos Interativo

Clique em qualquer pino no "Arduino" abaixo para ver como acessá-lo e controlá-lo usando pyfirmata2. Descubra a sintaxe para leitura digital, escrita analógica (PWM) e muito mais.

13
12
~11
~10
~9
8
7
~6
~5
4
~3
2
TX
RX
ATMEGA328P
5V
GND
A0
A1
A2
A3
A4
A5

Clique em um pino para ver o código

Monitoramento de Dados: Callbacks vs. Polling

A grande força do pyfirmata2 é a capacidade de definir uma taxa de amostragem e usar callbacks. Isso evita que seu programa Python trave esperando dados.

Abaixo, simulamos a leitura de um sensor analógico. Experimente alterar a taxa de amostragem para ver como a fluidez e a quantidade de dados mudam.

100 ms

Menor = Mais dados, mais CPU.

Código Python Equivalente:

# Configura o pino A0 com callback
def meu_callback(valor):
    print("Dado recebido:", valor)

board.analog[0].register_callback(meu_callback)
board.samplingOn(100) # intervalo em ms
board.analog[0].enable_reporting()
                        

O que está acontecendo?
O Arduino envia dados a cada 100 ms. O pyfirmata2 recebe esses pacotes em background e chama sua função automaticamente. Isso permite que seu script faça outras coisas (como atualizar uma interface gráfica) sem travar.

Referência Rápida da API

Método / Propriedade Descrição Exemplo
Arduino.AUTODETECT Constante para encontrar a porta USB automaticamente. Arduino(Arduino.AUTODETECT)
board.digital[x].write(v) Escreve 0 ou 1 em um pino digital. board.digital[13].write(1)
board.digital[x].mode = PWM Habilita PWM (saída analógica simulada) no pino. board.digital[11].mode = PWM
register_callback(func) Define a função a ser chamada quando novos dados chegarem. pin.register_callback(my_func)
enable_reporting() Inicia o fluxo de dados de um pino de entrada. pin.enable_reporting()
board.samplingOn(ms) Define o intervalo de amostragem em milissegundos. board.samplingOn(50)
board.exit() Fecha a conexão serial corretamente. board.exit()