Visuelle programmering for Sonoff Basic

Visuelle programmering for Sonoff Basic
En artikkel om hvordan man kan lage en programmerbar logisk kontroller fra et billig kinesisk apparat. Denne enheten vil kunne brukes bÄde til hjemmeautomatisering og som praktiske oppgaver i skoleinformatikk.
For referanse, som standard fungerer Sonoff Basic-programmet med en mobilapplikasjon gjennom en kinesisk skylÞsning. Etter den foreslÄtte ombyggingen vil all videre interaksjon med denne enheten vÊre mulig i nettleseren.

Del I. Tilkobling av Sonoff til MGT24-tjenesten

Trinn 1. Opprettelse av kontrollpanelet

Registrer deg pÄ nettstedet mgt24 (hvis du ikke allerede er registrert) og logg inn pÄ din konto.
InnloggingVisuelle programmering for Sonoff Basic

For Ä opprette et kontrollpanel for den nye enheten, trykk pÄ knappen «+».
Eksempel pÄ oppretting av panelVisuelle programmering for Sonoff Basic

NÄr panelet er opprettet, vil det vises pÄ listen over dine paneler.

I fanen «Installasjon» for det opprettede panelet, finn feltene «Enhets-ID» og «AutentiseringsnÞkkel». Denne informasjonen vil bli nÞdvendig for fremtidig konfigurering av Sonoff-enheten.
Eksempel pÄ faneVisuelle programmering for Sonoff Basic

Trinn 2. Flashing av enheten

Bruk verktĂžyet XTCOM_UTIL last opp fastvaren PLC Sonoff Basic til enheten, for dette trenger du en USB-TTL-konverter. Her er en en guide og video veiledning.

Trinn 3. Konfigurering av enheten

Koble til strÞm til enheten, nÄr LED-lampen lyser, trykk pÄ knappen og hold den nede til LED-lampen begynner Ä blinke jevnt.
PÄ dette tidspunktet vil et nytt Wi-Fi-nettverk med navnet «PLC Sonoff Basic» vises, koble datamaskinen din til dette nettverket.
Dekoding av LED-indikasjonen

LED-indikasjon
Enhetens tilstand

periodisk dobbelt blink
ingen forbindelse til ruteren

lyser kontinuerlig
tilkobling til ruteren er etablert

periodisk jevnt blink
Wi-Fi-tilgangspunktmodus

slukket
ingen strĂžm

Åpne nettleseren og skriv inn teksten «192.168.4.1» i adressefeltet, gĂ„ til innstillingssiden for enhetens nettverksparametre.

Fyll ut feltene som fĂžlger:

  • «Nettverksnavn» og «Passord» (for Ă„ knytte enheten til det hjemlige Wi-Fi-ruteren).
  • «Enhets-ID» og «AutentiseringsnĂžkkel» (for autentisering av enheten pĂ„ MGT24-tjenesten).

Eksempel pÄ innstilling av nettverksparametre for enhetenVisuelle programmering for Sonoff Basic

Lagre innstillingene og start enheten pÄ nytt.
Her video veiledning.

Trinn 4. Tilkobling av sensorer (valgfritt)

Den nÄvÊrende fastvaren stÞtter opptil fire temperaturfÞlere ds18b20. Her video veiledning er montering av sensorene. Dette trinnet vil tilsynelatende vÊre det mest utfordrende, da det vil kreve gode ferdigheter og en loddebolt.

Del II. Visuell programmering

Trinn 1. Oppretting av scenarier

Vi bruker Blockly, som er en lettfattelig plattform, sÄ for Ä lage enkle scenarier trenger du ikke vÊre programmerer.

Jeg har lagt til spesialiserte blokker for Ä skrive og lese enhetsparametere. Tilgang til enhver parameter skjer via navn. For parametere fra eksterne enheter brukes sammensatte navn: «parameter@enhet».
Nedtrekkslisten over parametereVisuelle programmering for Sonoff Basic

Eksempel pÄ scenario for syklisk pÄ- og avstenging av belastning (1 Hz):
Visuelle programmering for Sonoff Basic

Eksempel pÄ scenario som synkroniserer arbeidet til to separate enheter. Det vil si at reléet pÄ mÄl-enheten gjentar arbeidet til reléet pÄ den eksterne enheten.
Visuelle programmering for Sonoff Basic

Scenario for termostat (uten hysterese):
Visuelle programmering for Sonoff Basic

For Ä lage mer komplekse scenarier kan du bruke variabler, lÞkker, funksjoner (med argumenter) og andre konstruksjoner. Jeg vil ikke gÄ inn pÄ detaljene her, det finnes allerede mye opplÊringsmateriale om Blockly.

Trinn 2. UtfĂžrelsesrekkefĂžlge for scenarier

Scenariet kjÞrer kontinuerlig, og sÄ snart det er ferdig, starter det pÄ nytt. Det er to blokker som midlertidig kan stoppe scenariet: «delay» og «pause».
Blokken «delay» brukes for millisekund- eller mikrosekundforsinkelser. Denne blokken holder strengt tidsintervallet, og blokkerer driften av hele enheten.
Blokken «pause» brukes for forsinkelser pÄ sekunder (eller mindre), og den blokkerer ikke kjÞringen av andre prosesser i enheten.
Hvis scenariet inneholder en uendelig lÞkke uten «pause», vil tolken selv initiere en liten pause.
Ved oppbruk av tilgjengelig minne vil tolken stoppe kjĂžringen av et slik ressurskrevende scenario (vĂŠr forsiktig med rekursive funksjoner).

Trinn 3. FeilsĂžking av scenarier

For debugging a script that has already been loaded onto the device, you can initiate step-by-step program tracing. This is extremely useful when the behavior of the script does not match the author's intent. 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:
Visuelle programmering for Sonoff Basic

The debugging tool is very simple and consists of three main buttons: 'start', 'step forward', and 'stop' (also don't forget about 'enter' and 'exit' debug mode). Besides step-by-step tracing, you can set a breakpoint on any block (by clicking with the mouse on the block).
To display the current values of parameters (sensors, relays) on the monitor, use the 'print' block.
Her overview video about using the debugger.

Section for the curious. So what's under the hood?

In order 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 assembly instructions. Subsequently, this assembly program is transformed into bytecode and sent to the device for execution.
The architecture of this virtual machine is quite simple, and there is little point in describing it; you will find many articles on the design of simple virtual machines online.
I usually 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 application.

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:
Visuelle programmering for Sonoff Basic

And here is its assembly 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 assembly 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 gjelder ytelsen. Ved Ä kjÞre et enkelt blinkeskript, fikk jeg en 47kHz rektangulÊr bÞlge pÄ oscilloskopet (med prosessorens klokkehastighet pÄ 80MHz).
Visuelle programmering for Sonoff BasicVisuelle programmering for Sonoff Basic
Jeg anser dette som et greit resultat, i det minste er denne hastigheten nesten ti ganger raskere enn Lua og Espruino.

Avsluttende del

For Ä oppsummere vil jeg si at bruken av skript ikke bare lar oss programmere logikken til en enkelt enhet, men ogsÄ gir mulighet til Ä koble flere enheter sammen i en enhetlig mekanisme, der enkelte enheter pÄvirker oppfÞrselen til andre.
Jeg vil ogsÄ pÄpeke at den valgte metoden for lagring av skript (direkte i enhetene selv, ikke pÄ serveren) forenkler overgangen av allerede fungerende enheter til en annen server, for eksempel til en hjemmelaget Raspberry, her en guide.

Det er alt, jeg ser frem til Ä hÞre rÄd og konstruktiv kritikk.

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster