Visuell programmering for Sonoff Basic

Visuell programmering for Sonoff Basic
En artikkel om hvordan du lager en programmerbar logikkkontroller fra en billig kinesisk enhet. En slik enhet vil finne sin bruk både i hjemmeautomatisering og som praktiske klasser i skolens informatikk.
Som referanse fungerer Sonoff Basic-programmet som standard med en mobilapplikasjon gjennom en kinesisk skytjeneste; etter den foreslåtte endringen vil all ytterligere interaksjon med denne enheten være mulig i nettleseren.

Seksjon I. Koble Sonoff til MGT24-tjenesten

Trinn 1: Lag et kontrollpanel

Registrer deg på siden mgt24 (hvis ikke allerede registrert) og logg inn med kontoen din.
Logg InnVisuell programmering for Sonoff Basic

For å opprette et kontrollpanel for en ny enhet, klikk på "+"-knappen.
Eksempel på å lage et panelVisuell programmering for Sonoff Basic

Når panelet er opprettet, vil det vises i listen over paneler.

I «Oppsett»-fanen i det opprettede panelet finner du feltene «Enhets-ID» og «Autorisasjonsnøkkel»; i fremtiden vil denne informasjonen være nødvendig når du konfigurerer Sonoff-enheten.
Eksempel på faneVisuell programmering for Sonoff Basic

Trinn 2. Flash enheten på nytt

Bruke verktøyet XTCOM_UTIL last ned fastvaren PLC Sonoff Basic til enheten, for dette trenger du en USB-TTL-omformer. Her instruksjon и Videoinstruksjon.

Trinn 3. Enhetsoppsett

Sett strøm på enheten, etter at LED-en lyser, trykk på knappen og hold den inne til LED-en begynner å blinke jevnt med jevne mellomrom.
I dette øyeblikket vises et nytt wi-fi-nettverk kalt "PLC Sonoff Basic", koble datamaskinen til dette nettverket.
Forklaring av LED-indikasjon

LED indikasjon
Enhetsstatus

periodisk dobbel blinking
ingen tilkobling til ruteren

skinner kontinuerlig
forbindelse opprettet med ruteren

periodisk uniform blinking
Wi-Fi tilgangspunktmodus

slukket
Ingen strømforsyning

Åpne en nettleser og skriv inn teksten "192.168.4.1" i adressefeltet, gå til enhetens side for nettverksinnstillinger.

Fyll ut feltene som følger:

  • "Nettverksnavn" og "Passord" (for å koble enheten til Wi-Fi-ruteren hjemme).
  • "Enhets-ID" og "Autorisasjonsnøkkel" (for å autorisere enheten på MGT24-tjenesten).

Eksempel på innstilling av enhetens nettverksparametereVisuell programmering for Sonoff Basic

Lagre innstillingene og start enheten på nytt.
Her Videoinstruksjon.

Trinn 4. Koble til sensorer (valgfritt)

Den nåværende fastvaren støtter opptil fire ds18b20 temperatursensorer. Her Videoinstruksjon for montering av sensorer. Tilsynelatende vil dette trinnet være det vanskeligste, da det vil kreve rette armer og et loddejern.

Seksjon II. Visuell programmering

Trinn 1: Lag skript

Brukes som programmeringsmiljø Blockly, miljøet er enkelt å lære, så du trenger ikke å være programmerer for å lage enkle skript.

Jeg la til spesialiserte blokker for å skrive og lese enhetsparametere. Alle parametere åpnes med navn. For parametere for eksterne enheter brukes sammensatte navn: "parameter@enhet".
Rullegardinliste med alternativerVisuell programmering for Sonoff Basic

Eksempelscenario for syklisk på- og avkobling av lasten (1Hz):
Visuell programmering for Sonoff Basic

Et eksempel på et skript som synkroniserer driften av to separate enheter. Reléet til målenheten gjentar nemlig operasjonen til reléet til den eksterne enheten.
Visuell programmering for Sonoff Basic

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

For å lage mer komplekse skript kan du bruke variabler, løkker, funksjoner (med argumenter) og andre konstruksjoner. Jeg vil ikke beskrive alt dette i detalj her; det er allerede ganske mye på nettet. undervisningsmateriell om Blockly.

Trinn 2: Rekkefølge av skript

Skriptet kjører kontinuerlig, og så snart det når slutten starter det på nytt. I dette tilfellet er det to blokker som midlertidig kan sette skriptet på pause, "forsinkelse" og "pause".
"Delay"-blokken brukes for millisekunds- eller mikrosekundersforsinkelser. Denne blokken opprettholder strengt tidsintervallet, og blokkerer driften av hele enheten.
"Pause"-blokken brukes for andre (eller mindre) forsinkelser, og den blokkerer ikke kjøringen av andre prosesser i enheten.
Hvis selve skriptet inneholder en uendelig løkke, hvis brødtekst ikke inneholder "pause", starter tolken uavhengig en kort pause.
Hvis den tildelte minnestabelen er oppbrukt, vil tolken slutte å utføre et slikt kraftkrevende skript (vær forsiktig med rekursive funksjoner).

Trinn 3: Feilsøking av skript

For å feilsøke et skript som allerede er lastet inn i enheten, kan du kjøre en programsporing trinn for trinn. Dette kan være ekstremt nyttig når oppførselen til manuset viste seg å være annerledes enn det forfatteren hadde til hensikt. I dette tilfellet lar sporing forfatteren raskt finne kilden til problemet og rette feilen i skriptet.

Scenario for beregning av faktor i feilsøkingsmodus:
Visuell programmering for Sonoff Basic

Feilsøkingsverktøyet er veldig enkelt og består av tre hovedknapper: "start", "ett skritt fremover" og "stopp" (la oss heller ikke glemme "enter" og "exit" feilsøkingsmodus). I tillegg til trinn-for-trinn-sporing, kan du angi et bruddpunkt på en hvilken som helst blokk (ved å klikke på blokken).
For å vise gjeldende verdier for parametere (sensorer, releer) i monitoren, bruk "print"-blokken.
Her oversiktsvideo om bruk av feilsøkeren.

Seksjon for nysgjerrige. Hva er under panseret?

For at skriptene skulle fungere på målenheten ble det utviklet en bytekodetolk og en assembler med 38 instruksjoner. Blocklys kildekode har en spesialisert kodegenerator innebygd som konverterer visuelle blokker til monteringsinstruksjoner. Deretter konverteres dette assemblerprogrammet til bytekode og overføres til enheten for kjøring.
Arkitekturen til denne virtuelle maskinen er ganske enkel og det er ikke noe spesielt poeng i å beskrive den; på Internett finner du mange artikler om å designe de enkleste virtuelle maskinene.
Jeg tildeler vanligvis 1000 byte til stabelen til den virtuelle maskinen min, noe som er nok til overs. Selvfølgelig kan dype rekursjoner tømme enhver stabel, men de har neppe noen praktisk nytte.

Den resulterende bytekoden er ganske kompakt. Som et eksempel er bytekoden for å beregne den samme faktoren bare 49 byte. Dette er dens visuelle form:
Visuell programmering for Sonoff Basic

Og dette er assemblerprogrammet hans:

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

Hvis monteringsformen for representasjon ikke har noen praktisk verdi, gir "javaskrit" -fanen tvert imot et mer kjent utseende enn visuelle blokker:

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

window.alert(factorial(10));

Angående ytelse. Da jeg kjørte det enkleste flasher-skriptet, fikk jeg en 47 kHz firkantbølge på oscilloskopskjermen (med en prosessorklokkehastighet på 80 MHz).
Visuell programmering for Sonoff BasicVisuell programmering for Sonoff Basic
Jeg synes dette er et bra resultat, denne hastigheten er i hvert fall nesten ti ganger høyere enn Lua и Espruino.

Den siste delen

For å oppsummere vil jeg si at bruken av skript lar oss ikke bare programmere logikken til driften av en separat enhet, men gjør det også mulig å koble flere enheter til en enkelt mekanisme, der noen enheter påvirker oppførselen til andre.
Jeg legger også merke til at den valgte metoden for lagring av skript (direkte i selve enhetene, og ikke på serveren) forenkler bytte av allerede fungerende enheter til en annen server, for eksempel til en hjemme-Bringebær, her instruksjon.

Det er alt, jeg vil gjerne høre råd og konstruktiv kritikk.

Kilde: www.habr.com

Legg til en kommentar