Visuel programmering til Sonoff Basic

Visuel programmering til Sonoff Basic
En artikel om, hvordan man opretter en programmerbar logisk controller fra en billig kinesisk enhed. En sådan enhed vil finde sin anvendelse både i hjemmeautomatisering og som praktiske klasser i skolens datalogi.
Som reference fungerer Sonoff Basic-programmet som standard med en mobilapplikation gennem en kinesisk skytjeneste; efter den foreslåede ændring vil al yderligere interaktion med denne enhed være mulig i browseren.

Afsnit I. Tilslutning af Sonoff til MGT24-tjenesten

Trin 1: Opret et kontrolpanel

Tilmeld dig på siden mgt24 (hvis ikke allerede registreret) og log ind med din konto.
Log påVisuel programmering til Sonoff Basic

For at oprette et kontrolpanel til en ny enhed skal du klikke på knappen "+".
Eksempel på oprettelse af et panelVisuel programmering til Sonoff Basic

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

I fanen "Opsætning" i det oprettede panel skal du finde felterne "Enheds-id" og "Autorisationsnøgle"; i fremtiden vil disse oplysninger være nødvendige, når Sonoff-enheden konfigureres.
Eksempel på fanebladVisuel programmering til Sonoff Basic

Trin 2. Flash enheden igen

Brug af hjælpeprogrammet XTCOM_UTIL download firmwaren PLC Sonoff Basic til enheden, til dette skal du bruge en USB-TTL-konverter. Her instruktion и Video instruktion.

Trin 3. Enhedsopsætning

Sæt strøm til enheden, efter at LED'en lyser, skal du trykke på knappen og holde den nede, indtil LED'en begynder at blinke jævnt jævnt.
I dette øjeblik vises et nyt wi-fi-netværk kaldet "PLC Sonoff Basic", tilslut din computer til dette netværk.
Forklaring af LED indikation

LED indikation
Enhedsstatus

periodisk dobbeltblink
ingen forbindelse til router

skinner konstant
oprettet forbindelse med routeren

periodisk uniform blinkende
wi-fi adgangspunkt tilstand

slukket
Ingen strømforsyning

Åbn en internetbrowser og indtast teksten "192.168.4.1" i adresselinjen, gå til enhedens side med netværksindstillinger.

Udfyld felterne som følger:

  • "Netværksnavn" og "Adgangskode" (for at forbinde enheden med din hjemme-Wi-Fi-router).
  • "Device ID" og "Autorization key" (for at autorisere enheden på MGT24-tjenesten).

Eksempel på indstilling af enhedsnetværksparametreVisuel programmering til Sonoff Basic

Gem indstillingerne og genstart enheden.
Her Video instruktion.

Trin 4. Tilslutning af sensorer (valgfrit)

Den nuværende firmware understøtter op til fire ds18b20 temperatursensorer. Her Video instruktion til montering af sensorer. Tilsyneladende vil dette trin være det sværeste, da det vil kræve lige arme og et loddekolbe.

Afsnit II. Visuel programmering

Trin 1: Opret scripts

Anvendes som programmeringsmiljø Blokalt, miljøet er nemt at lære, så du behøver ikke at være programmør for at lave simple scripts.

Jeg tilføjede specialiserede blokke til at skrive og læse enhedsparametre. Enhver parameter tilgås ved navn. For parametre for eksterne enheder bruges sammensatte navne: "parameter@enhed".
Dropdown liste over mulighederVisuel programmering til Sonoff Basic

Eksempelscenarie for cyklisk til- og frakobling af belastningen (1Hz):
Visuel programmering til Sonoff Basic

Et eksempel på et script, der synkroniserer driften af ​​to separate enheder. Målanordningens relæ gentager nemlig driften af ​​relæet på fjernanordningen.
Visuel programmering til Sonoff Basic

Scenarie for termostat (uden hysterese):
Visuel programmering til Sonoff Basic

For at skabe mere komplekse scripts kan du bruge variabler, loops, funktioner (med argumenter) og andre konstruktioner. Jeg vil ikke beskrive alt dette i detaljer her; der er allerede ret meget på nettet. undervisningsmateriale om Blockly.

Trin 2: Rækkefølge af scripts

Scriptet kører kontinuerligt, og så snart det når sin afslutning, starter det igen. I dette tilfælde er der to blokke, der midlertidigt kan sætte scriptet på pause, "delay" og "pause".
"Delay"-blokken bruges til millisekunds- eller mikrosekundsforsinkelser. Denne blok opretholder strengt tidsintervallet og blokerer driften af ​​hele enheden.
"Pause"-blokken bruges til andre (eller mindre) forsinkelser, og den blokerer ikke for udførelsen af ​​andre processer i enheden.
Hvis selve scriptet indeholder en uendelig løkke, hvis krop ikke indeholder "pause", starter tolken selvstændigt en kort pause.
Hvis den allokerede hukommelsesstak er opbrugt, vil tolken stoppe med at udføre et sådant strømkrævende script (vær forsigtig med rekursive funktioner).

Trin 3: Fejlretning af scripts

For at fejlsøge et script, der allerede er blevet indlæst i enheden, kan du køre en programsporing trin for trin. Dette kan være yderst nyttigt, når manuskriptets opførsel viste sig at være anderledes end det, forfatteren havde til hensigt. I dette tilfælde giver sporing forfatteren mulighed for hurtigt at finde kilden til problemet og rette fejlen i scriptet.

Scenarie til beregning af faktor i fejlretningstilstand:
Visuel programmering til Sonoff Basic

Debug-værktøjet er meget enkelt og består af tre hovedknapper: "start", "et skridt frem" og "stop" (lad os heller ikke glemme "enter" og "exit" fejlretningstilstand). Ud over trin-for-trin sporing kan du indstille et brudpunkt på enhver blok (ved at klikke på blokken).
For at vise de aktuelle værdier af parametre (sensorer, relæer) i monitoren, brug "print"-blokken.
Her oversigtsvideo om brug af debuggeren.

Sektion for nysgerrige. Hvad er der under motorhjelmen?

For at scriptene kunne fungere på målenheden, blev der udviklet en bytekodefortolker og en assembler med 38 instruktioner. Blocklys kildekode har en specialiseret kodegenerator indbygget, der konverterer visuelle blokke til monteringsvejledninger. Efterfølgende konverteres dette assembler-program til bytekode og overføres til enheden til udførelse.
Arkitekturen af ​​denne virtuelle maskine er ret enkel, og der er ingen særlig mening i at beskrive den; på internettet finder du mange artikler om at designe de enkleste virtuelle maskiner.
Jeg plejer at tildele 1000 bytes til stakken på min virtuelle maskine, hvilket er nok til overs. Selvfølgelig kan dybe rekursioner udmatte enhver stak, men det er usandsynligt, at de har nogen praktisk nytte.

Den resulterende bytekode er ret kompakt. Som et eksempel er bytekoden til beregning af den samme faktoral kun 49 bytes. Dette er dens visuelle form:
Visuel programmering til Sonoff Basic

Og dette er hans 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

Hvis samlingsformen for repræsentation ikke har nogen praktisk værdi, giver fanen "javascrit" tværtimod et mere velkendt udseende end visuelle blokke:

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

window.alert(factorial(10));

Med hensyn til ydeevne. Da jeg kørte det enkleste flasher-script, fik jeg en 47 kHz firkantbølge på oscilloskopskærmen (ved en processor-clock-hastighed på 80 MHz).
Visuel programmering til Sonoff BasicVisuel programmering til Sonoff Basic
Jeg synes, det er et godt resultat, i det mindste er denne hastighed næsten ti gange hurtigere end Lua и Espruino.

Den sidste del

For at opsummere vil jeg sige, at brugen af ​​scripts giver os ikke kun mulighed for at programmere logikken i driften af ​​en separat enhed, men gør det også muligt at forbinde flere enheder til en enkelt mekanisme, hvor nogle enheder påvirker andres adfærd.
Jeg bemærker også, at den valgte metode til lagring af scripts (direkte i selve enhederne og ikke på serveren) forenkler skiftet af allerede fungerende enheder til en anden server, f.eks. til en Raspberry hjemme, her instruktion.

Det er alt, jeg vil være glad for at høre råd og konstruktiv kritik.

Kilde: www.habr.com

Tilføj en kommentar