Programmazione visiva per Sonoff Basic

Programmazione visiva per Sonoff Basic
Un articolo su come creare un controller logico programmabile da un dispositivo cinese economico. Un dispositivo del genere troverà il suo utilizzo sia nella domotica che come lezioni pratiche nell'informatica scolastica.
Per riferimento, per impostazione predefinita il programma Sonoff Basic funziona con un'applicazione mobile tramite un servizio cloud cinese; dopo la modifica proposta, tutte le ulteriori interazioni con questo dispositivo saranno possibili nel browser.

Sezione I. Connessione di Sonoff al servizio MGT24

Passaggio 1: crea un pannello di controllo

Registrati sul sito mgt24 (se non sei già registrato) e accedi utilizzando il tuo account.
Accesso utentiProgrammazione visiva per Sonoff Basic

Per creare un pannello di controllo per un nuovo dispositivo, fare clic sul pulsante “+”.
Esempio di creazione di un pannelloProgrammazione visiva per Sonoff Basic

Una volta creato il pannello, verrà visualizzato nell'elenco dei pannelli.

Nella scheda “Configurazione” del pannello creato, trova i campi “ID dispositivo” e “Chiave di autorizzazione”; in futuro, queste informazioni saranno richieste durante la configurazione del dispositivo Sonoff.
Esempio di schedaProgrammazione visiva per Sonoff Basic

Passaggio 2. Aggiorna il dispositivo

Utilizzando l'utilità XTCOM_UTIL scaricare il firmware PLC Sonoff Basic al dispositivo, per questo avrai bisogno di un convertitore USB-TTL. Qui istruzione и istruzioni video.

Passaggio 3. Configurazione del dispositivo

Alimentare il dispositivo, dopo che il LED si è acceso, premere il pulsante e tenerlo premuto finché il LED non inizia a lampeggiare periodicamente in modo uniforme.
In questo momento apparirà una nuova rete Wi-Fi chiamata “PLC Sonoff Basic”, collega il tuo computer a questa rete.
Spiegazione dell'indicazione LED

Indicazione LED
Stato del dispositivo

doppio lampeggio periodico
nessuna connessione al router

brilla continuamente
connessione stabilita con il router

lampeggiamento periodico uniforme
modalità punto di accesso Wi-Fi

estinto
Nessuna alimentazione

Apri un browser Internet e inserisci il testo “192.168.4.1” nella barra degli indirizzi, vai alla pagina delle impostazioni delle impostazioni di rete del dispositivo.

Compila i campi come segue:

  • “Nome rete” e “Password” (per collegare il dispositivo al router wi-fi di casa).
  • “ID Dispositivo” e “Chiave di autorizzazione” (per autorizzare il dispositivo sul servizio MGT24).

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

Salva le impostazioni e riavvia il dispositivo.
Qui istruzioni video.

Passaggio 4. Collegamento dei sensori (opzionale)

Il firmware attuale supporta fino a quattro sensori di temperatura ds18b20. Qui istruzioni video per l'installazione dei sensori. A quanto pare, questo passaggio sarà il più difficile, poiché richiederà bracci dritti e un saldatore.

Sezione II. Programmazione visiva

Passaggio 1: crea script

Utilizzato come ambiente di programmazione Blockley, l'ambiente è facile da apprendere, quindi non è necessario essere un programmatore per creare semplici script.

Ho aggiunto blocchi specializzati per la scrittura e la lettura dei parametri del dispositivo. Si accede a qualsiasi parametro per nome. Per i parametri dei dispositivi remoti vengono utilizzati nomi composti: “parametro@dispositivo”.
Elenco a discesa delle opzioniProgrammazione visiva per Sonoff Basic

Scenario esemplificativo per accensione e spegnimento ciclico del carico (1Hz):
Programmazione visiva per Sonoff Basic

Un esempio di script che sincronizza il funzionamento di due dispositivi separati. Vale a dire, il relè del dispositivo di destinazione ripete il funzionamento del relè del dispositivo remoto.
Programmazione visiva per Sonoff Basic

Scenario per termostato (senza isteresi):
Programmazione visiva per Sonoff Basic

Per creare script più complessi, puoi utilizzare variabili, cicli, funzioni (con argomenti) e altri costrutti. Non descriverò tutto questo nel dettaglio qui, ce n’è già parecchio in rete. materiale didattico su Blockly.

Passaggio 2: ordine degli script

Lo script viene eseguito continuamente e non appena raggiunge la fine ricomincia. In questo caso ci sono due blocchi che possono mettere temporaneamente in pausa lo script, “delay” e “pause”.
Il blocco "delay" viene utilizzato per ritardi di millisecondi o microsecondi. Questo blocco mantiene rigorosamente l'intervallo di tempo, bloccando il funzionamento dell'intero dispositivo.
Il blocco "pausa" viene utilizzato per ritardi di secondo (o meno) e non blocca l'esecuzione di altri processi nel dispositivo.
Se lo script stesso contiene un ciclo infinito, il cui corpo non contiene "pausa", l'interprete avvia autonomamente una breve pausa.
Se lo stack di memoria allocato è esaurito, l'interprete smetterà di eseguire uno script così assetato di energia (fai attenzione alle funzioni ricorsive).

Passaggio 3: debug degli script

Per eseguire il debug di uno script già caricato nel dispositivo è possibile eseguire passo dopo passo un Trace del programma. Ciò può essere estremamente utile quando il comportamento dello script risulta essere diverso da quello previsto dall'autore. In questo caso, la traccia consente all'autore di trovare rapidamente l'origine del problema e correggere l'errore nello script.

Scenario per il calcolo fattoriale in modalità debug:
Programmazione visiva per Sonoff Basic

Lo strumento di debug è molto semplice ed è composto da tre pulsanti principali: “start”, “un passo avanti” e “stop” (non dimentichiamoci anche delle modalità di debug “invio” ed “uscita”). Oltre al tracciamento passo passo, è possibile impostare un punto di interruzione su qualsiasi blocco (facendo clic sul blocco).
Per visualizzare i valori correnti dei parametri (sensori, relè) nel monitor, utilizzare il blocco "stampa".
Qui video panoramica sull'utilizzo del debugger.

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

Affinché gli script funzionino sul dispositivo di destinazione, sono stati sviluppati un interprete di bytecode e un assemblatore con 38 istruzioni. Il codice sorgente di Blockly ha un generatore di codice specializzato integrato che converte i blocchi visivi in ​​istruzioni di assemblaggio. Successivamente questo programma assembler viene convertito in bytecode e trasferito al dispositivo per l'esecuzione.
L'architettura di questa macchina virtuale è abbastanza semplice e non ha particolare senso descriverla; su Internet troverai molti articoli sulla progettazione delle macchine virtuali più semplici.
Di solito alloco 1000 byte per lo stack della mia macchina virtuale, che è abbastanza da risparmiare. Naturalmente, le ricorsioni profonde possono esaurire qualsiasi stack, ma è improbabile che abbiano un utilizzo pratico.

Il bytecode risultante è abbastanza compatto. Ad esempio, il bytecode per calcolare lo stesso fattoriale è di soli 49 byte. Questa è la sua forma visiva:
Programmazione visiva per Sonoff Basic

E questo è il suo 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 dell'assemblaggio non ha alcun valore pratico, la scheda "javascrit", al contrario, dà un aspetto più familiare rispetto ai blocchi visivi:

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

window.alert(factorial(10));

Per quanto riguarda le prestazioni. Quando ho eseguito lo script flasher più semplice, ho ottenuto un'onda quadra da 47 kHz sullo schermo dell'oscilloscopio (a una velocità di clock del processore di 80 MHz).
Programmazione visiva per Sonoff BasicProgrammazione visiva per Sonoff Basic
Penso che questo sia un buon risultato, almeno questa velocità è quasi dieci volte più veloce di quella prendere и Espruino.

La parte finale

Riassumendo, dirò che l'uso degli script ci consente non solo di programmare la logica di funzionamento di un dispositivo separato, ma consente anche di collegare più dispositivi in ​​un unico meccanismo, dove alcuni dispositivi influenzano il comportamento di altri.
Noto inoltre che il metodo scelto per archiviare gli script (direttamente nei dispositivi stessi e non sul server) semplifica il passaggio dei dispositivi già funzionanti su un altro server, ad esempio su un Raspberry domestico, qui istruzione.

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

Fonte: habr.com

Aggiungi un commento