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.
Protocolo Firmata Padrão
Callbacks automáticos
Digital, Analógico, PWM, Servo, I2C
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:
No Arduino
O Arduino precisa entender os comandos que o Python enviará.
- Abra a Arduino IDE.
- Vá em File > Examples > Firmata.
- Selecione StandardFirmata.
- Faça o Upload para sua placa.
No Computador
Instale a biblioteca Python.
pip install pyfirmata2
Certifique-se de ter o Python 3.x instalado.
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.
Clique em um pino para ver o código
Pino 13
Digital I/OO LED embutido da placa. Pode ser usado para saída digital.
board.digital[13].write(1)
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.
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() |