Quando não funciona
Os quinze sintomas de hardware, cada um com a causa que quase sempre é.
Depurar hardware é diferente de depurar software: a maioria dos sintomas não dá erro. Esta é a lista, na ordem em que os problemas aparecem.
A placa não aparece#
| Sintoma | Quase sempre é |
|---|---|
iot portas não mostra nada | o cabo é só de energia — é a causa nº 1, e não parece |
| some e volta sozinha | cabo ruim ou hub USB sem alimentação |
| aparece no Windows como "dispositivo desconhecido" | falta o driver CH340/CP2102 do clone |
| não aparece dentro do contêiner | falta --device=/dev/ttyACM0 no docker run |
A porta abre e nada chega#
| Sintoma | Quase sempre é |
|---|---|
conectar dá prazo esgotado | o StandardFirmata não está gravado |
| texto ilegível no monitor | a velocidade não é a do Serial.begin() do sketch |
| "permissão negada" ou "porta ocupada" | o monitor serial da IDE está aberto — duas coisas não abrem a mesma porta |
| no Linux, permissão negada sempre | o usuário não está no grupo dialout: sudo usermod -aG dialout $USER |
| as primeiras linhas são lixo | abrir a porta reinicia a placa; espere ~2 s e limpar() |
Responde, mas errado#
| Sintoma | Quase sempre é |
|---|---|
| analógico sempre 0 | faltou relatar_analogico(canal) — é o erro nº 1 do Firmata |
| analógico sempre 1023 | o pino está solto: uma entrada sem nada ligada flutua |
| o botão "não pega" | amostragem alta demais, ou falta o pull-up |
| temperatura absurda (−273, 500) | termistor no fim da escala: fio solto ou curto |
| o valor treme muito | ruído do ADC — média móvel resolve |
Age, mas errado#
| Sintoma | Quase sempre é |
|---|---|
| o relé liga quando devia desligar | módulo de relé com lógica invertida (ativo em LOW) |
| o LED acende no talo com PWM baixo | o pino está em saida, não em pwm |
| o servo treme numa ponta | os microssegundos de fim de curso — configurar_servo |
| a placa reinicia quando o motor para | falta o diodo de roda-livre; o pico indutivo derruba a alimentação |
| o pino parou de funcionar | corrente: um pino entrega ~20 mA, e motor/fita de LED precisam de driver |
O diagnóstico, em ordem#
bash
$ dataforge iot doctor --porta=/dev/cu.usbmodem1101Ele confere, nesta ordem: a porta existe → a porta abre → alguém responde Firmata → o arduino-cli está instalado. A ordem é a das causas, e a primeira falha é a que interessa — as de baixo são consequência.
Quando o problema não é o seu código#
dataforge
adopt Arcane.IoT as IoT
// a prova mais barata: o caminho inteiro, contra um simulador
placa := IoT.conectar_simulada("uno")
placa.modo(13, "saida")
placa.escrever(13, yes)
assert placa.simulador.pino(13) is 1
placa.fechar()
out "o programa está certo — o que falta é do lado do fio"Rodar a mesma lógica contra o simulador separa as duas metades em segundos. Se ela funciona ali e não na placa, o problema é elétrico, é o sketch ou é a porta — e nenhuma releitura do código vai achá-lo.