Pular para o conteúdo

Sensores programáveis

Um sensor programável é um chip personalizado comum cujas leituras você controla a partir de um controle deslizante enquanto a simulação roda. Um sensor de CO2 cujo ppm você varre para testar um limite de alarme. Uma sonda de temperatura que você empurra acima de 85 °C para ver o que o firmware faz. Um sensor de luz que você diminui manualmente.

Nada no chip muda: é o mesmo componente WebAssembly descrito em Introdução. O que esta página adiciona é o fio que transporta um valor de controle deslizante para um chip que já está em execução, sem recompilar ou reiniciar nada.

Todo sensor programável é estas três peças e nada mais.

1. Um atributo armazena o valor ajustável.

S.ppm = vx_attr_register("ppm", 1000);

2. Uma entrada controls em chip.json coloca um controle deslizante na tela. Ela endereça o atributo pelo mesmo id:

"controls": [
{ "id": "ppm", "label": "CO2 (ppm)", "type": "range",
"min": 400, "max": 5000, "step": 10, "unit": "ppm" }
]

3. Seu código relê o atributo toda vez que precisar do valor:

double ppm = vx_attr_read(S.ppm); /* o valor do controle deslizante agora */

Pressione Run (Executar), clique no chip, e isto abre:

O painel de controle ao vivo de um chip sensor de CO2 em execução: um controle deslizante de 400 a 5000 ppm

Esse terceiro ponto é o que confunde as pessoas. Leia o atributo uma vez em chip_setup() e armazene-o em cache em uma variável, e o controle deslizante aparecerá, se moverá e não fará absolutamente nada. vx_attr_read é barato; chame-o dentro do seu callback de temporizador, do seu manipulador de leitura I2C, onde quer que o valor seja realmente necessário.

Vale a pena entender, porque os dois mecanismos de simulação usam rotas diferentes e os modos de falha diferem.

Etapa O que acontece
Você arrasta o controle deslizante O painel grava no registro de atualização do sensor, identificado por esta instância do chip
Mecanismo do navegador (AVR, RP2040, ESP32 no navegador) O valor é escrito diretamente no mapa de atributos que o WebAssembly em execução lê a cada vx_attr_read. Sem passagem de mensagens, sem reinicialização
ESP32 sob QEMU O chip vive em um worker, então o valor é encaminhado a ele como uma atualização de atributo e aplicado lá
A cada 250 ms de inatividade Os últimos valores são espelhados nas propriedades salvas do componente, para que a posição do controle deslizante sobreviva a um salvar e recarregar

Duas consequências que valem a pena conhecer:

  • Não há etapa de “aplicar”. A próxima chamada vx_attr_read retorna o novo valor. Se o seu chip só lê o atributo uma vez por segundo, é quanto tempo o controle deslizante leva para fazer algo visivelmente.
  • O painel é por instância. Duas cópias do mesmo chip em uma única tela têm controles deslizantes independentes, porque os controles são sintetizados a partir do manifesto de cada instância.

Padrões de tempo de design versus valores ao vivo

Seção intitulada “Padrões de tempo de design versus valores ao vivo”

São superfícies diferentes e as pessoas as confundem:

  • Parado: clique com o botão direito no chip para abrir o inspetor de peças. O que você define lá é o padrão salvo do atributo, o valor com o qual o chip inicia.
  • Em execução: clique no chip. O painel de controle deslizante abre. O que você define lá é o valor ao vivo, aplicado imediatamente.

Todo padrão tem um circuito executável na galeria. Pressione Run (Executar), depois clique no chip:

Exemplo O que ensina
Sensor de CO2 (controle deslizante ao vivo) A receita analógica: controle deslizante para tensão para analogRead
Sensor Ambiental I2C (controles deslizantes ao vivo) Dois controles deslizantes atrás de um mapa de registros em 0x44
Sensor de Movimento (botão de simulação) O controle button: gatilho momentâneo mais um controle deslizante de retenção
Luz Noturna (controle deslizante de lux log) scale: "log": cinco décadas de lux em um controle deslizante, lâmpada dispara abaixo de 50 lx
Termômetro SPI (controle deslizante ao vivo) Temporização de escravo SPI: trava na borda de descida do CS
Sensor de Ar UART (controle deslizante ao vivo) Sensor serial estilo push para SoftwareSerial