Programmazione visiva per Sonoff Basic

Programmazione visiva per Sonoff Basic
Articolo su come trasformare un dispositivo cinese economico in un controllore logico programmabile. Tale dispositivo troverà applicazione sia nell'automazione domestica che come attività pratiche per l'informatica scolastica.
Per riferimento, di default il programma Sonoff Basic funziona con un'app mobile tramite un servizio cloud cinese; dopo la modifica proposta, tutte le ulteriori interazioni con questo dispositivo saranno possibili tramite browser.

Sezione I. Collegamento di Sonoff al servizio MGT24

Passo 1. Creazione del pannello di controllo

Registrati sul sito mgt24 (se non sei ancora registrato) e accedi con il tuo account.
Accesso al sistemaProgrammazione visiva per Sonoff Basic

Per creare un pannello di controllo per un nuovo dispositivo, clicca sul pulsante «+».
Esempio di creazione del pannelloProgrammazione visiva per Sonoff Basic

Una volta creato, il pannello apparirà nell'elenco dei tuoi pannelli.

Nella scheda «Installazione» del pannello creato, trova i campi «ID dispositivo» e «Chiave di autorizzazione»; queste informazioni saranno necessarie per configurare il dispositivo Sonoff.
Esempio di schedaProgrammazione visiva per Sonoff Basic

Passo 2. Flashing del dispositivo

Utilizza l'utility XTCOM_UTIL per caricare il firmware PLC Sonoff Basic sul dispositivo; per farlo avrai bisogno di un convertitore USB-TTL. Qui istruzioni e videoistruzioni.

Passo 3. Configurazione del dispositivo

Collega il dispositivo all'alimentazione; una volta accesa la luce LED, premi e tieni premuto il pulsante finché il LED non inizia a lampeggiare uniformemente e periodicamente.
A questo punto apparirà una nuova rete wi-fi chiamata «PLC Sonoff Basic», collegati a questa rete con il tuo computer.
Decodifica dell'indicazione LED

Indicazione LED
Stato del dispositivo

lampeggiamento doppio periodico
nessuna connessione al router

luminosità continua
connessione al router stabilita

lampeggiamento uniforme e periodico
modalità punto di accesso wi-fi

spento
senza alimentazione

Apri il browser internet e inserisci nella barra degli indirizzi il testo «192.168.4.1»; vai alla pagina delle impostazioni dei parametri di rete del dispositivo.

Compila i campi come segue:

  • «Nome rete» e «Password» (per collegare il dispositivo al router wi-fi domestico).
  • «ID dispositivo» e «Chiave di autorizzazione» (per l'autenticazione del dispositivo presso il servizio MGT24).

Esempio di impostazione dei parametri di rete del dispositivoProgrammazione visiva per Sonoff Basic

Salva le impostazioni e riavvia il dispositivo.
Qui videoistruzioni.

Passo 4. Collegamento dei sensori (opzionale)

Il firmware attuale supporta fino a quattro sensori di temperatura ds18b20. Qui videoistruzioni sull'installazione dei sensori. A quanto pare, questo passaggio sarà il più difficile, poiché richiederà dalle tue mani abilità dirette e un saldatore.

Sezione II. Programmazione visiva

Passo 1. Creazione degli script

Come ambiente di programmazione viene utilizzato Blockly, l'ambiente è semplice da usare, quindi non è necessario essere un programmatore per creare semplici script.

Ho aggiunto blocchi specializzati per scrivere e leggere i parametri del dispositivo. L'accesso a qualsiasi parametro avviene per nome. Per i parametri dei dispositivi remoti si utilizzano nomi composti: «parametro@dispositivo».
Elenco a discesa dei parametriProgrammazione visiva per Sonoff Basic

Esempio di script per l'accensione e lo spegnimento ciclico di un carico (1Hz):
Programmazione visiva per Sonoff Basic

Esempio di script che sincronizza il funzionamento di due dispositivi separati. In particolare, il relè del dispositivo target replica il funzionamento del relè del dispositivo remoto.
Programmazione visiva per Sonoff Basic

Script per il termostato (senza isteresi):
Programmazione visiva per Sonoff Basic

Per creare script più complessi, è possibile utilizzare variabili, cicli, funzioni (con argomenti) e altre costrutti. Non elencherò tutto in dettaglio qui, poiché ci sono già molte risorse di formazione su Blockly.

Passo 2. Ordine di esecuzione degli script

Lo script opera in modalità continua e, una volta raggiunta la fine, si riavvia. Ci sono due blocchi che possono temporaneamente sospendere l'esecuzione dello script, «delay» e «pause».
Il blocco «delay» viene utilizzato per ritardi in millisecondi o microsecondi. Questo blocco mantiene rigorosamente l'intervallo di tempo bloccando l'operazione dell'intero dispositivo.
Il blocco «pause» viene utilizzato per ritardi in secondi (o meno) e non blocca l'esecuzione di altri processi nel dispositivo.
Se lo script contiene al suo interno un ciclo infinito senza un «pause», l'interprete inizia autonomamente una piccola pausa.
In caso di esaurimento dello stack di memoria allocato, l'interprete fermerà l'esecuzione di uno script così vorace (fai attenzione alle funzioni ricorsive).

Passo 3. Debugging degli script

Per il debug di uno script già caricato nel dispositivo, è possibile eseguire il tracciamento del programma passo dopo passo. Questo è estremamente utile quando il comportamento dello script risulta diverso da quello previsto dall'autore. In questo caso, il tracciamento permette all'autore di trovare rapidamente la fonte del problema e correggere l'errore nello script.

Script di calcolo del fattoriale in modalità debug:
Programmazione visiva per Sonoff Basic

Lo strumento di debug è molto semplice e consiste in tre principali pulsanti: «avvio», «passo avanti» e «ferma» (senza dimenticare «ingresso» e «uscita» dalla modalità di debug). Oltre al tracciamento passo-passo, è possibile impostare un punto di interruzione su qualsiasi blocco (cliccando con il mouse sul blocco).
Per visualizzare sul monitor i valori correnti dei parametri (sensori, relè) utilizzare il blocco «print».
Qui video di panoramica sull'uso del debugger.

Sezione per i curiosi. Ma cosa c'è sotto il cofano?

Per far funzionare gli script sul dispositivo di destinazione è stato sviluppato un interprete di bytecode e un assembler con 38 istruzioni. Nel codice sorgente di blockly è stato integrato un generatore di codice specializzato, che converte i blocchi visuali in istruzioni assembler. Successivamente, questo programma assembler viene trasformato in bytecode e inviato al dispositivo per l'esecuzione.
L'architettura di questa macchina virtuale è piuttosto semplice e non ha molto senso descriverla, in rete troverete molti articoli sul progetto delle macchine virtuali più semplici.
Per lo stack della mia macchina virtuale di solito riservo 1000 byte, che sono più che sufficienti. Certamente, chiamate ricorsive profonde possono esaurire qualsiasi stack, ma è poco probabile che trovino un'applicazione pratica.

Il bytecode finale risulta piuttosto compatto. Come esempio, il bytecode per il calcolo dello stesso fattoriale è di soli 49 byte. Questa è la sua forma di rappresentazione visiva:
Programmazione visiva per Sonoff Basic

E questa è la sua programma assembler:

shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret

Se la forma di rappresentazione assembler non ha alcun valore pratico, la scheda «javascript», al contrario, offre un aspetto più familiare rispetto ai blocchi visuali:

function factorial(num) {
  if (num > 1) {
    return num + factorial(num - 1);
  }
  return 1;
}

window.alert(factorial(10));

Per quanto riguarda le prestazioni. Eseguendo il più semplice degli scenari lampeggianti, sullo schermo dell'oscilloscopio ho ottenuto un meandro di 47kHz (con una frequenza di clock del processore di 80MHz).
Programmazione visiva per Sonoff BasicProgrammazione visiva per Sonoff Basic
Ritengo che sia un buon risultato, almeno questa velocità è quasi dieci volte più veloce di Lua e Espruino.

Parte conclusiva

In sintesi, posso dire che l'uso di scenari ci consente non solo di programmare la logica di funzionamento di un singolo dispositivo, ma offre anche la possibilità di collegare più dispositivi in un unico meccanismo, dove alcuni dispositivi influenzano il comportamento di altri.
Inoltre, segnalo che il metodo scelto per memorizzare gli scenari (direttamente nei dispositivi stessi, e non su un server), semplifica il passaggio di dispositivi già funzionanti a un altro server, ad esempio a un Raspberry domestico, qui istruzioni.

Questo è tutto, sarei felice di ricevere consigli e critiche costruttive.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster