Visuelt programmering til Sonoff Basic

Visuelt programmering til Sonoff Basic
En artikel om, hvordan man kan omdanne en billig kinesisk enhed til en programmerbar logisk controller. En sådan enhed kan bruges både til hjemmeautomatisering og som praktiske opgaver i skolens IT-undervisning.
For reference, som standard fungerer Sonoff Basic-programmet med en mobilapp via en kinesisk cloud-service; efter den foreslåede modificering vil al videre interaktion med denne enhed være mulig i din browser.

Afsnit I. Tilslutning af Sonoff til MGT24-tjenesten

Trin 1. Oprettelse af kontrolpanel

Registrer dig på siden mgt24 (hvis du ikke allerede er registreret) og log ind med din konto.
Log indVisuelt programmering til Sonoff Basic

For at oprette et kontrolpanel til den nye enhed skal du klikke på knappen „+“.
Eksempel på oprettelse af panelVisuelt programmering til Sonoff Basic

Når panelet er oprettet, vil det vises i din liste over paneler.

Under fanen „Installation“, i det oprettede panel, find felterne „Enheds-ID“ og „Autorisationsnøgle“, da disse oplysninger senere vil være nødvendige, når du konfigurerer Sonoff-enheden.
Eksempel på fanenVisuelt programmering til Sonoff Basic

Trin 2. Genopgradering af enheden

Ved hjælp af værktøjet XTCOM_UTIL overfør firmwaren PLK Sonoff Basic til enheden; du får brug for en USB-TTL-konverter. Her instruktion og er en video-guide.

Trin 3. Konfiguration af enheden

Tænd for enheden, når lysdioden lyser, skal du trykke på knappen og holde den nede, indtil lysdioden begynder at blinke jævnt.
På dette tidspunkt vises et nyt wi-fi-netværk med navnet „PLC Sonoff Basic“, tilslut din computer til dette netværk.
Afsnit af lysdiodernes indikation

Lysdiodeindikation
Enhedens status

periodisk dobbeltblink
ingen forbindelse til routeren

lyser konstant
forbindelse til routeren er etableret

periodisk jævnt blink
wi-fi adgangspunkt-tilstand

slukket
ingen strøm

Åbn din internetbrowser og indtast teksten „192.168.4.1“ i adressefeltet for at gå til indstillingssiden for netværksparametre på enheden.

Udfyld felterne som volgt:

  • „Netværksnavn“ og „Adgangskode“ (for at forbinde enheden til din hjemme wi-fi-router).
  • „Enheds-ID“ og „Autorisationsnøgle“ (til autorisering af enheden på MGT24-tjenesten).

Eksempel på konfiguration af enhedens netværksparametreVisuelt programmering til Sonoff Basic

Gem indstillingerne og genstart enheden.
Her er en video-guide.

Trin 4. Tilslutning af sensorer (valgfrit)

Den nuværende firmware understøtter op til fire temperaturfølere ds18b20. Her er en video-guide er monteringen af sensorerne. Det ser ud til, at dette trin vil blive det mest udfordrende, da det kræver håndværksmæssige evner og en loddekolbe.

Afsnit II. Visuel programmering

Trin 1. Oprettelse af scripts

I programmeringsmiljøet bruges Blockly, som er let at lære, så du behøver ikke være programmør for at oprette enkle scripts.

Jeg har tilføjet specialiserede blokke til at læse og skrive enhedens parametre. Adgang til enhver parameter sker via navn. For parametre fra fjernbetjente enheder bruges sammensatte navne: «parameter@enhed».
Rullemenu for parametreVisuelt programmering til Sonoff Basic

Eksempel på et script til cyklisk tænding og slukning af en belastning (1 Hz):
Visuelt programmering til Sonoff Basic

Eksempel på et script, der synkroniserer arbejdet mellem to separate enheder. Specificationen: relæet på målenheden gentager arbejdet fra relæet på den fjernbetjente enhed.
Visuelt programmering til Sonoff Basic

Script til termostaten (uden hysterese):
Visuelt programmering til Sonoff Basic

For at oprette mere komplekse scripts kan man bruge variable, loops, funktioner (med argumenter) og andre strukturer. Jeg vil ikke gå i detaljer her, der findes allerede en del læringsmateriale om Blockly.

Trin 2. Udførelsesrækkefølge for scripts

Scriptet kører i kontinuerlig tilstand, og så snart det når sin afslutning, starter det forfra. Der er to blokke, der midlertidigt kan pause udførelsen af scriptet: «delay» og «pause».
Blokken «delay» bruges til millisekund- eller mikrosekundforsinkelser. Denne blok overholder strengt tidsintervallet og blokerer for hele enhedens drift.
Blokken «pause» bruges til sekundære (eller kortere) forsinkelser og blokerer ikke udførelsen af andre processer i enheden.
Hvis scriptet har en uendelig løkke uden «pause», starter fortolkeren automatisk en lille pause.
Ved udtömning af den tildelte hukommelsesstak stopper fortolkeren udførelsen af et sådant ressourcekrævende script (vær forsigtig med rekursive funktioner).

Trin 3. Fejlfinding af scripts

For debugging a script already loaded onto the device, you can run a step-by-step program trace. This is extremely useful when the script's behavior does not align with the author's intentions. In this case, tracing allows the author to quickly identify the source of the problem and correct the error in the script.

Factorial calculation script in debug mode:
Visuelt programmering til Sonoff Basic

The debugging tool is quite simple and consists of three main buttons: 'start', 'step forward', and 'stop' (let's not forget about 'enter' and 'exit' from debug mode). In addition to step-by-step tracing, you can set a breakpoint on any block (by clicking on the block).
To display the current parameter values (sensors, relays) on the monitor, use the 'print' block.
Her overview video on using the debugger.

A section for the curious. What happens under the hood?

For the scripts to work on the target device, a bytecode interpreter and an assembler with 38 instructions were developed. A specialized code generator was integrated into the blockly source code, which converts visual blocks into assembler instructions. Later, this assembler program is transformed into bytecode and sent to the device for execution.
The architecture of this virtual machine is quite simple, and there is not much point in describing it; you will find many articles on designing basic virtual machines online.
I typically allocate 1000 bytes for the stack of my virtual machine; this is more than enough. Of course, deep recursions can exhaust any stack, but they are unlikely to find practical applications.

The resulting bytecode is quite compact. For example, the bytecode for calculating the same factorial consists of only 49 bytes. Here is its visual representation:
Visuelt programmering til Sonoff Basic

And here is its assembler program:

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

If the assembler representation has no practical value, the 'javascript' tab, on the other hand, provides a more familiar view than visual blocks:

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

window.alert(factorial(10));

Når det kommer til ydeevne. Da jeg kørte et simpelt blinkescript, fik jeg en 47 kHz firkantbølge på oscilloskopet (ved en CPU-taktfrekvens på 80 MHz).
Visuelt programmering til Sonoff BasicVisuelt programmering til Sonoff Basic
Jeg betragter det som et godt resultat, i det mindste er denne hastighed næsten ti gange hurtigere end Lua og Espruino.

Afsluttende del

Sammenfattende kan jeg sige, at brugen af scripts ikke kun giver os mulighed for at programmere logikken for en enkelt enhed, men også forbinder flere enheder til et samlet system, hvor nogle enheders adfærd påvirker andre.
Jeg vil også bemærke, at den valgte metode til opbevaring af scripts (direkte i enhederne og ikke på serveren) gør det nemmere at skifte allerede fungerende enheder til en anden server, for eksempel til en hjemmelavet Raspberry Pi, som her. instruktion.

Det var alt, jeg vil gerne høre råd og konstruktiv kritik.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster