Salta ai contenuti

Sensori programmabili

Un sensore programmabile è un normale chip personalizzato i cui valori vengono guidati da uno slider mentre la simulazione è in esecuzione. Un sensore di CO2 di cui vari i ppm per testare una soglia di allarme. Una sonda di temperatura che spingi oltre 85 °C per vedere cosa fa il firmware. Un sensore di luce che regoli a mano.

Nulla cambia nel chip: è lo stesso componente WebAssembly descritto in Per iniziare. Ciò che questa pagina aggiunge è il filo che porta il valore di uno slider in un chip già in esecuzione, senza ricompilare o riavviare nulla.

Ogni sensore programmabile è composto da queste tre parti e nient’altro.

1. Un attributo contiene il valore regolabile.

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

2. Una voce controls in chip.json mette uno slider sullo schermo. Fa riferimento all’attributo con lo stesso id:

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

3. Il tuo codice rilegge l’attributo ogni volta che gli serve il valore:

double ppm = vx_attr_read(S.ppm); /* il valore dello slider in questo momento */

Premi Run (Esegui), fai clic sul chip e si apre:

Il pannello di controllo live di un chip sensore di CO2 in esecuzione: uno slider da 400 a 5000 ppm

Il terzo punto è quello che mette in difficoltà le persone. Leggi l’attributo una volta in chip_setup() e mettilo in cache in una variabile, e lo slider apparirà, si muoverà e non farà assolutamente nulla. vx_attr_read è economico; chiamalo all’interno del tuo callback timer, del tuo gestore di lettura I2C, ovunque il valore sia realmente necessario.

Vale la pena capirlo, perché i due motori di simulazione seguono percorsi diversi e le modalità di errore differiscono.

Passaggio Cosa succede
Trascini lo slider Il pannello scrive nel registro di aggiornamento del sensore, con chiave basata su questa istanza del chip
Motore browser (AVR, RP2040, ESP32 nel browser) Il valore viene scritto direttamente nella mappa degli attributi che il WebAssembly in esecuzione legge a ogni vx_attr_read. Nessun passaggio di messaggi, nessun riavvio
ESP32 sotto QEMU Il chip vive in un worker, quindi il valore viene inoltrato ad esso come aggiornamento dell’attributo e applicato lì
Ogni 250 ms di inattività Gli ultimi valori vengono rispecchiati nelle proprietà salvate del componente, quindi la posizione dello slider sopravvive a un salvataggio e a un ricaricamento

Due conseguenze che vale la pena conoscere:

  • Non esiste un passaggio “Applica”. La successiva vx_attr_read restituisce il nuovo valore. Se il tuo chip legge l’attributo solo una volta al secondo, è questo il tempo che impiega lo slider a produrre un effetto visibile.
  • Il pannello è per istanza. Due copie dello stesso chip su una tela hanno slider indipendenti, perché i controlli sono sintetizzati dal manifest di ciascuna istanza.

Valori predefiniti in fase di progettazione rispetto a valori live

Sezione intitolata “Valori predefiniti in fase di progettazione rispetto a valori live”

Sono superfici diverse e le persone le confondono:

  • Fermo: fai clic con il pulsante destro sul chip per aprire l’ispettore dei componenti. Ciò che imposti lì è il valore predefinito salvato dell’attributo, il valore con cui il chip parte.
  • In esecuzione: fai clic sul chip. Si apre il pannello dello slider. Ciò che imposti lì è il valore live, applicato immediatamente.

Ogni pattern ha un circuito eseguibile nella galleria. Premi Run (Esegui), poi fai clic sul chip:

Esempio Cosa insegna
Sensore CO2 (slider live) La ricetta analogica: slider a tensione a analogRead
Sensore ambientale I2C (slider live) Due slider dietro una mappa di registri a 0x44
Sensore di movimento (pulsante simulato) Il controllo button: trigger momentaneo più uno slider di mantenimento
Luce notturna (slider lux logaritmico) scale: "log": cinque decadi di lux su un solo slider, la lampada scatta sotto i 50 lx
Termometro SPI (slider live) Temporizzazione slave SPI: latch sul fronte di discesa di CS
Sensore aria UART (slider live) Sensore seriale push-style in SoftwareSerial