Visuell programmering för Sonoff Basic

Visuell programmering för Sonoff Basic
En artikel om hur man skapar en programmerbar logisk styrenhet från en billig kinesisk enhet. En sådan enhet kommer att hitta sin användning både i hemautomation och som praktiska klasser i skoldatavetenskap.
Som referens fungerar Sonoff Basic-programmet som standard med en mobilapplikation via en kinesisk molntjänst; efter den föreslagna ändringen kommer all ytterligare interaktion med den här enheten att bli möjlig i webbläsaren.

Avsnitt I. Ansluta Sonoff till MGT24-tjänsten

Steg 1: Skapa en kontrollpanel

Registrera dig på sajten mgt24 (om du inte redan är registrerad) och logga in med ditt konto.
Logga inVisuell programmering för Sonoff Basic

För att skapa en kontrollpanel för en ny enhet, klicka på "+"-knappen.
Exempel på att skapa en panelVisuell programmering för Sonoff Basic

När panelen har skapats visas den i din lista över paneler.

På fliken "Setup" i den skapade panelen, hitta fälten "Device ID" och "Authorization Key"; i framtiden kommer denna information att krävas när du ställer in Sonoff-enheten.
Exempel på flikVisuell programmering för Sonoff Basic

Steg 2. Flasha enheten igen

Använda verktyget XTCOM_UTIL ladda ner firmware PLC Sonoff Basic till enheten, för detta behöver du en USB-TTL-omvandlare. Här instruktion и Videoinstruktion.

Steg 3. Enhetskonfiguration

Sätt på ström till enheten, efter att lysdioden har tänts, tryck på knappen och håll den intryckt tills lysdioden börjar blinka med jämna mellanrum.
Just nu kommer ett nytt wi-fi-nätverk som heter "PLC Sonoff Basic" att dyka upp, anslut din dator till detta nätverk.
Förklaring av LED-indikering

LED indikering
Enhets status

periodisk dubbelblinkning
ingen anslutning till routern

lyser kontinuerligt
anslutning upprättad med routern

periodisk enhetlig blinkning
Wi-Fi-åtkomstpunktläge

släckt
Ingen strömförsörjning

Öppna en webbläsare och skriv in texten "192.168.4.1" i adressfältet, gå till enhetens sida med nätverksinställningar.

Fyll i fälten enligt följande:

  • "Nätverksnamn" och "Lösenord" (för att länka enheten till din hemwi-fi-router).
  • "Enhets-ID" och "Auktoriseringsnyckel" (för att auktorisera enheten på MGT24-tjänsten).

Exempel på inställning av enhetens nätverksparametrarVisuell programmering för Sonoff Basic

Spara inställningarna och starta om enheten.
Här Videoinstruktion.

Steg 4. Ansluta sensorer (tillval)

Den nuvarande firmwaren stöder upp till fyra ds18b20 temperatursensorer. Här Videoinstruktion för installation av sensorer. Tydligen kommer detta steg att vara det svåraste, eftersom det kommer att kräva raka armar och en lödkolv.

Avsnitt II. Visuell programmering

Steg 1: Skapa skript

Används som programmeringsmiljö Blockerat, miljön är lätt att lära sig, så du behöver inte vara programmerare för att skapa enkla skript.

Jag lade till specialiserade block för att skriva och läsa enhetsparametrar. Alla parametrar nås med namn. För parametrar för fjärrenheter används sammansatta namn: "parameter@enhet".
Dropdown-lista med alternativVisuell programmering för Sonoff Basic

Exempelscenario för cyklisk till- och frånkoppling av lasten (1Hz):
Visuell programmering för Sonoff Basic

Ett exempel på ett skript som synkroniserar driften av två separata enheter. Målanordningens relä upprepar nämligen operationen av reläet hos fjärranordningen.
Visuell programmering för Sonoff Basic

Scenario för termostat (utan hysteres):
Visuell programmering för Sonoff Basic

För att skapa mer komplexa skript kan du använda variabler, loopar, funktioner (med argument) och andra konstruktioner. Jag kommer inte att beskriva allt detta i detalj här; det finns redan en hel del på nätet. utbildningsmaterial om Blockly.

Steg 2: Ordning av skript

Skriptet körs kontinuerligt och så fort det når slutet startar det igen. I det här fallet finns det två block som tillfälligt kan pausa skriptet, "delay" och "paus".
Blocket "fördröjning" används för millisekunds- eller mikrosekundsfördröjningar. Detta block upprätthåller strikt tidsintervallet och blockerar driften av hela enheten.
"Paus"-blocket används för andra (eller mindre) fördröjningar, och det blockerar inte exekveringen av andra processer i enheten.
Om själva skriptet innehåller en oändlig loop, vars brödtext inte innehåller "paus", initierar tolken självständigt en kort paus.
Om den allokerade minnesstacken är uttömd kommer tolken att sluta exekvera ett sådant kraftkrävande skript (var försiktig med rekursiva funktioner).

Steg 3: Felsökning av skript

För att felsöka ett skript som redan har laddats in i enheten kan du köra en programspårning steg för steg. Detta kan vara extremt användbart när manusets beteende visade sig vara annorlunda än vad författaren avsåg. I det här fallet tillåter spårning författaren att snabbt hitta källan till problemet och rätta till felet i skriptet.

Scenario för beräkning av faktor i felsökningsläge:
Visuell programmering för Sonoff Basic

Felsökningsverktyget är väldigt enkelt och består av tre huvudknappar: "start", "ett steg framåt" och "stopp" (låt oss inte heller glömma "enter" och "exit" felsökningsläge). Förutom steg-för-steg-spårning kan du ställa in en brytpunkt på vilket block som helst (genom att klicka på blocket).
För att visa de aktuella värdena för parametrar (sensorer, reläer) i monitorn, använd "print"-blocket.
Här översiktsvideo om att använda felsökaren.

Sektion för nyfikna. Vad finns under huven?

För att skripten skulle fungera på målenheten utvecklades en bytekodtolkare och en assembler med 38 instruktioner. Blocklys källkod har en specialiserad kodgenerator inbyggd som omvandlar visuella block till monteringsinstruktioner. Därefter omvandlas detta assemblerprogram till bytekod och överförs till enheten för exekvering.
Arkitekturen för denna virtuella maskin är ganska enkel och det finns ingen speciell mening med att beskriva den, på Internet hittar du många artiklar om att designa de enklaste virtuella maskinerna.
Jag brukar tilldela 1000 byte för stacken på min virtuella maskin, vilket är tillräckligt. Naturligtvis kan djupa rekursioner tömma vilken stapel som helst, men det är osannolikt att de har någon praktisk användning.

Den resulterande bytekoden är ganska kompakt. Som ett exempel är bytekoden för att beräkna samma faktorial endast 49 byte. Detta är dess visuella form:
Visuell programmering för Sonoff Basic

Och det här är hans assemblerprogram:

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

Om monteringsformen för representation inte har något praktiskt värde, ger fliken "javascrit" tvärtom ett mer bekant utseende än visuella block:

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

window.alert(factorial(10));

Angående prestation. När jag körde det enklaste flasher-skriptet fick jag en fyrkantvåg på 47 kHz på oscilloskopskärmen (med en processorklockhastighet på 80 MHz).
Visuell programmering för Sonoff BasicVisuell programmering för Sonoff Basic
Jag tycker att detta är ett bra resultat, åtminstone den här hastigheten är nästan tio gånger snabbare än lua и Espruino.

Den sista delen

För att sammanfatta kommer jag att säga att användningen av skript tillåter oss inte bara att programmera logiken för driften av en separat enhet, utan också gör det möjligt att ansluta flera enheter till en enda mekanism, där vissa enheter påverkar andras beteende.
Jag noterar också att den valda metoden att lagra skript (direkt i själva enheterna, och inte på servern) förenklar bytet av redan fungerande enheter till en annan server, till exempel till en hemhallon, här instruktion.

Det är allt, jag kommer gärna att höra råd och konstruktiv kritik.

Källa: will.com

Lägg en kommentar