Pular para o conteúdo

Firmata ou sketch: a conta

Onde a latência do cabo mata o projeto, e onde ela não importa — com números.

A pergunta não é qual é melhor: é onde o programa precisa rodar. E a resposta sai de uma conta, não de gosto.

A latência do cabo#

Cada ordem do Firmata é uma mensagem de 2 a 4 bytes atravessando a serial, e cada leitura é outra voltando. A 57600 baud, isso é sub-milissegundo no fio — mas o caminho inteiro (escrever, o USB agendar, a placa processar, responder, o driver entregar) fica na casa de 1 a 5 ms por ida e volta.

O projeto precisa deFirmataSketch
ler um sensor a cada segundo✓ perfeitoexagero
acender LED ao clicar num painelprecisaria de protocolo próprio
ler um encoder de motor✗ perde pulso✓ interrupção
PWM de áudio, LED endereçável (WS2812)✗ não dá
responder a um botão em < 1 ms
funcionar sem o computador ligado✗ por definição
rodar a bateria por meses✓ com deep sleep
prototipar, calibrar, explorar um sensor novo✓ sem comparação20 s por tentativa

O meio-termo que quase sempre é a resposta#

Prototipar com Firmata, e depois virar sketch. A calibração de um sensor leva dezenas de tentativas; fazer isso com ciclo de 20 s custa uma tarde, e com Firmata custa minutos. Quando as constantes estiverem certas, elas entram no .ino:

dataforge
adopt Arcane.IoT as IoT

// 1. descobrir a constante com Firmata, na bancada
placa := IoT.conectar_simulada("uno")
placa.modo(14, "analogico")
placa.relatar_analogico(0)
placa.simulador.definir_analogico(0, 512)
sleep(120)
limiar := placa.analogico(0)
placa.fechar()

// 2. gerar o sketch com ela dentro
codigo := IoT.sketch("sensor", {"canal": 0, "velocidade": 9600})
assert "A0" in codigo
out $"limiar calibrado: {limiar}"

E o terceiro caminho#

Um sketch que publica em MQTT não precisa do computador nem de um programa esperando na ponta: ele fala com o broker, e quem quiser escuta. É o desenho de quase toda automação doméstica que funciona, e o modelo wifi-mqtt já sai assim.