Visuellt programmering för Sonoff Basic

Visuellt programmering för Sonoff Basic
En artikel om hur man förvandlar en billig kinesisk enhet till en programmerbar logikcontroller. En sÄdan enhet kan anvÀndas bÄde för hemautomation och som praktiska övningar i skolans datateknik.
Som referens, som standard fungerar Sonoff Basic-programmet med mobilappen via en kinesisk molntjÀnst, efter den föreslagna ombyggnaden blir all vidare interaktion med denna enhet möjlig i webblÀsaren.

Avsnitt I. Ansluta Sonoff till MGT24-tjÀnsten

Steg 1. Skapa en kontrollpanel

Registrera dig pÄ webbplatsen mgt24 (om du inte redan har registrerat dig) och logga in med ditt konto.
Logga inVisuellt programmering för Sonoff Basic

För att skapa en kontrollpanel för den nya enheten, klicka pĂ„ knappen „+”.
Exempel pÄ att skapa en panelVisuellt programmering för Sonoff Basic

NÀr panelen har skapats kommer den att visas i din lista över paneler.

I fliken „Installation” av den skapade panelen, hitta fĂ€lten „Enhets-ID” och „Autentiseringstoken”, denna information behövs senare för att konfigurera Sonoff-enheten.
Exempel pÄ flikenVisuellt programmering för Sonoff Basic

Steg 2. Flasha enheten

AnvÀnd verktyget XTCOM_UTIL för att ladda upp fastvaren PLC Sonoff Basic till enheten, för detta behöver du en USB-TTL-konverterare. HÀr instruktion och finns en videoinstruktion.

Steg 3. Konfigurera enheten

Anslut ström till enheten, nÀr LED-lampan tÀnds, tryck pÄ knappen och hÄll den intryckt tills LED-lampan börjar blinka jÀmnt.
Vid denna tidpunkt kommer ett nytt wi-fi-nĂ€tverk med namnet „PLC Sonoff Basic” att dyka upp, anslut din dator till detta nĂ€tverk.
Avkodning av LED-indikationen

LED-indikationen
Enhetens tillstÄnd

periodisk dubbelblinkning
ingen anslutning till routern

lyser kontinuerligt
anslutning till routern Àr etablerad

periodisk jÀmn blinkning
wi-fi accesspunktslÀge

slÀckt
ingen ström

Öppna webblĂ€saren och skriv in adressen „192.168.4.1” i adressfĂ€ltet, gĂ„ till instĂ€llningssidan för enhetens nĂ€tverksparametrar.

Fyll i fÀlten enligt följande:

  • „Namn pĂ„ nĂ€tverk” och „Lösenord” (för att koppla enheten till hemmet wi-fi-router).
  • „Enhets-ID” och „Autentiseringstoken” (för att auktorisera enheten pĂ„ MGT24-tjĂ€nsten).

Exempel pÄ instÀllningar av nÀtverksparametrar för enhetenVisuellt programmering för Sonoff Basic

Spara instÀllningarna och starta om enheten.
HĂ€r finns en videoinstruktion.

Steg 4. Anslutning av sensorer (valfritt)

Den aktuella firmware-versionen stöder upp till fyra temperatur-sensorer ds18b20. HÀr finns en videoinstruktion Àr monteringsanvisningar för sensorerna. Det verkar som att detta steg blir det mest utmanande, eftersom det krÀver att du har hantverkskunskaper och en lödkolv.

Avsnitt II. Visuell programmering

Steg 1. Skapa skript

Som programmeringsmiljö anvÀnds Blockly, miljön Àr lÀtt att lÀra sig, sÄ för att skapa enkla skript behöver man inte vara programmerare.

Jag har lagt till specialblock för att lĂ€sa och skriva enhetens parametrar. Åtkomst till vilken parameter som helst görs via namnet. För parametrar pĂ„ fjĂ€rrenheter anvĂ€nds sammansatta namn: "parameter@enhet".
Rullgardinslista över parametrarVisuellt programmering för Sonoff Basic

Exempel pÄ ett skript för cykliskt pÄ- och avskÀnnande av last (1 Hz):
Visuellt programmering för Sonoff Basic

Exempel pÄ ett skript som synkroniserar arbetet mellan tvÄ separata enheter. NÀmligen, relÀet pÄ mÄl-enheten upprepar relÀets arbete pÄ den fjÀrrstyrda enheten.
Visuellt programmering för Sonoff Basic

Skript för en termostat (utan hysterese):
Visuellt programmering för Sonoff Basic

För att skapa mer komplexa skript kan man anvÀnda variabler, loopar, funktioner (med argument) och andra konstruktioner. Jag kommer inte att förklara allt detta i detalj hÀr, det finns redan en hel del utbildningsmaterial om Blockly.

Steg 2. Ordning för skriptens utförande

Skriptet körs i kontinuerligt lÀge, och sÄ snart det nÄr sin slutpunkt startar det om. Det finns tvÄ block som kan tillfÀlligt pausa skriptets körning, "delay" och "pause".
Blocket "delay" anvÀnds för millisekund- eller mikrosekunds-pausar. Detta block hÄller strikt pÄ tidsintervallet och blockerar hela enhetens funktion.
Blocket "pause" anvÀnds för sekunders (kan Àven vara kortare) pausar, och det blockerar inte utförandet av andra processer i enheten.
Om skriptet innehÄller en oÀndlig loop utan en "pause", initierar interpreteraren sjÀlv en kort paus.
Om den tilldelade stackminnet tar slut, kommer interpreteraren att stoppa utförandet av ett sÄdant resurskrÀvande skript (var försiktig med rekursiva funktioner).

Steg 3. Felsökning av skript

För att debugga ett skript som redan har laddats in i enheten kan du starta steg-för-steg-tracing av programmet. Detta Àr mycket anvÀndbart nÀr skriptets beteende inte Àr som förvÀntat av författaren. I sÄdana fall gör tracing det möjligt för författaren att snabbt hitta kÀllan till problemet och korrigera felet i skriptet.

Skript för berÀkning av faktoriel i debug-lÀge:
Visuellt programmering för Sonoff Basic

Debuggingverktyget Àr mycket enkelt och bestÄr av tre grundlÀggande knappar: "start", "ett steg framÄt" och "stopp" (glöm heller inte "in" och "ut" ur debug-lÀge). Förutom steg-för-steg-tracing kan du sÀtta en brytpunkt pÄ vilken block som helst (genom att klicka med musen pÄ blocket).
För att visa aktuella vÀrden pÄ parametrarna (sensorer, relÀer) pÄ skÀrmen, anvÀnd blocket "print".
HÀr översiktlig videofilm om anvÀndningen av debuggern.

Avsnitt för nyfikna. Vad finns under huven?

För att skripten ska fungera pÄ mÄlenheten utvecklades en byte-kodtolk och en assembler med 38 instruktioner. I kÀllkoden för blockly integrerades en specialiserad kodgenerator som konverterar visuella block till assemblerinstruktioner. Denna assemblerprogram överförs sedan till byte-kod och skickas till enheten för utförande.
Arkitekturen för denna virtuella maskin Àr ganska enkel och det finns ingen sÀrskild mening med att beskriva den, pÄ nÀtet hittar du mÄnga artiklar om design av enklaste virtuella maskiner.
För min virtuella maskins stack brukar jag avsÀtta 1000 byte, vilket Àr mer Àn tillrÀckligt. SjÀlvklart kan djup rekursion förbruka vilken stack som helst, men det Àr osannolikt att de fÄr praktisk tillÀmpning.

Den slutliga byte-koden Àr ganska kompakt. Som exempel utgör byte-koden för berÀkning av samma faktoriel endast 49 byte. HÀr Àr dess visuella representationsform:
Visuellt programmering för Sonoff Basic

Och hÀr Àr dess 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 den assemblerformade representationen inte har nÄgot praktiskt vÀrde, ger fliken "javascrit", Ä sin sida, en mer bekant vy Àn visuella block:

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

window.alert(factorial(10));

NÀr det kommer till prestanda. Vid körning av ett enkelt blinkande program fick jag en vÄgform pÄ 47 kHz pÄ oscilloskopet (med en processor klockfrekvens pÄ 80 MHz).
Visuellt programmering för Sonoff BasicVisuellt programmering för Sonoff Basic
Jag anser att detta Àr ett bra resultat, Ätminstone Àr denna hastighet nÀstan tio gÄnger snabbare Àn Lua och Espruino.

Avslutande del

Sammanfattningsvis vill jag sÀga att anvÀndningen av skript inte bara lÄter oss programmera logiken för enskilda enheter, utan ocksÄ ger möjlighet att koppla flera enheter till en enhetlig mekanism, dÀr vissa enheter pÄverkar beteendet hos andra.
Jag vill ocksÄ pÄpeka att den valda metoden för lagring av skript (direkt i enheterna, snarare Àn pÄ servern) förenklar övergÄngen av redan fungerande enheter till en annan server, till exempel en hemmaserver med Raspberry Pi, hÀr instruktion.

Det Àr allt, jag ser fram emot att höra rÄd och konstruktiv kritik.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster