Fisuele programmearring foar Sonoff Basic

Fisuele programmearring foar Sonoff Basic
In artikel oer hoe't jo in programmabele logyske controller meitsje fan in goedkeap Sineesk apparaat. Sa'n apparaat sil syn gebrûk fine sawol yn hûsautomatisearring as as praktyske lessen yn skoallekomputer wittenskip.
Foar referinsje wurket it Sonoff Basic-programma standert mei in mobile applikaasje fia in Sineeske wolktsjinst; nei de foarstelde wiziging sil alle fierdere ynteraksje mei dit apparaat mooglik wêze yn 'e browser.

Seksje I. Ferbine Sonoff oan de MGT24 tsjinst

Stap 1: Meitsje in kontrôlepaniel

Registrearje op de side mgt24 (as net al registrearre) en oanmelde mei jo akkount.
OanmeldeFisuele programmearring foar Sonoff Basic

Om in kontrôlepaniel foar in nij apparaat te meitsjen, klikje jo op de knop "+".
Foarbyld fan it meitsjen fan in panielFisuele programmearring foar Sonoff Basic

Sadree't it paniel is oanmakke, sil it ferskine yn jo list mei panielen.

Yn 'e ljepper "Setup" fan it oanmakke paniel fine jo de fjilden "Device ID" en "Autorisaasjekaai"; yn 'e takomst sil dizze ynformaasje ferplicht wurde by it ynstellen fan it Sonoff-apparaat.
Foarbyld fan TabFisuele programmearring foar Sonoff Basic

Stap 2. Reflash it apparaat

Mei help fan it nut XTCOM_UTIL download de firmware PLC Sonoff Basic nei it apparaat, hjirfoar sille jo in USB-TTL-konverter nedich hawwe. Hjir hantlieding и Video ynstruksje.

Stap 3. Apparaat opset

Tapasse macht oan it apparaat, neidat de LED opljochtet, druk op de knop en hâld it yndrukt oant de LED begjint periodyk lykmjittich te flitsen.
Op dit stuit sil in nij wi-fi-netwurk mei de namme "PLC Sonoff Basic" ferskine, ferbine jo kompjûter mei dit netwurk.
Taljochting fan LED yndikaasje

LED yndikaasje
Apparaat Status

periodyk dûbele wjerljochtsjende
gjin ferbining mei router

skynt kontinu
ferbining makke mei de router

periodyk unifoarm wjerljochtsjende
wi-fi tagongspunt modus

útstoarn
Gjin stroomfoarsjenning

Iepenje in ynternetblêder en typ de tekst "192.168.4.1" yn 'e adresbalke, gean nei de side fan netwurkynstellingen fan it apparaat.

Folje de fjilden sa yn:

  • "Netwurknamme" en "Wachtwurd" (om it apparaat te keppeljen oan jo wi-fi-router thús).
  • "Apparaat ID" en "autorisaasjekaai" (om it apparaat te autorisearjen op 'e MGT24-tsjinst).

Foarbyld fan it ynstellen fan apparaat netwurk parametersFisuele programmearring foar Sonoff Basic

Bewarje de ynstellings en herstart it apparaat.
it is Video ynstruksje.

Stap 4. Ferbine sensoren (opsjoneel)

De hjoeddeistige firmware stipet maksimaal fjouwer ds18b20 temperatuersensors. Hjir Video ynstruksje foar ynstallaasje fan sensoren. Blykber sil dizze stap de dreechste wêze, om't it rjochte earms en in soldering izer nedich is.

Seksje II. Visuele programmearring

Stap 1: Skripten meitsje

Wurdt brûkt as programmearring omjouwing Blokich, de omjouwing is maklik te learen, dus jo hoege gjin programmeur te wêzen om ienfâldige skripts te meitsjen.

Ik haw spesjalisearre blokken tafoege foar it skriuwen en lêzen fan apparaatparameters. Elke parameter is tagonklik mei namme. Foar parameters fan apparaten op ôfstân wurde gearstalde nammen brûkt: "parameter@apparaat".
Dropdown list mei opsjesFisuele programmearring foar Sonoff Basic

Foarbyldscenario foar cyclysk yn- en útskeakeljen fan de lading (1Hz):
Fisuele programmearring foar Sonoff Basic

In foarbyld fan in skript dat de wurking fan twa aparte apparaten syngronisearje. Nammentlik, it estafette fan it doelapparaat werhellet de wurking fan it estafette fan it apparaat op ôfstân.
Fisuele programmearring foar Sonoff Basic

Senario foar thermostaat (sûnder hysteresis):
Fisuele programmearring foar Sonoff Basic

Om mear komplekse skripts te meitsjen, kinne jo fariabelen, loops, funksjes (mei arguminten) en oare konstruksjes brûke. Ik sil dit alles hjir net yn detail beskriuwe; der is al in soad op it net. edukatyf materiaal oer Blockly.

Stap 2: Folder fan skripts

It skript rint kontinu, en sa gau as it berikt syn ein, it begjint wer. Yn dit gefal binne d'r twa blokken dy't it skript tydlik kinne pauze, "fertrage" en "pauze".
It blok "fertraging" wurdt brûkt foar millisekonden of mikrosekonden fertragingen. Dit blok hâldt strikt de tiid ynterval, blokkearje de wurking fan it hiele apparaat.
It blok "pauze" wurdt brûkt foar twadde (of minder) fertragingen, en it blokkearret de útfiering fan oare prosessen yn it apparaat net.
As it skript sels in ûneinige loop befettet, wêrfan it lichem gjin "pauze" befettet, begjint de tolk selsstannich in koarte pauze.
As de tawiisde ûnthâldstap is útput, sil de tolk ophâlde mei it útfieren fan sa'n machtshonger skript (wês foarsichtich mei rekursive funksjes).

Stap 3: Debuggen fan skripts

Om in skript te debuggen dat al yn it apparaat is laden, kinne jo stap foar stap in programma trace útfiere. Dit kin ekstreem nuttich wêze as it gedrach fan it skript oars blykte te wêzen fan wat de auteur bedoelde. Yn dit gefal lit tracing de auteur de boarne fan it probleem fluch fine en de flater yn it skript korrigearje.

Senario foar it berekkenjen fan faktoriaal yn debugmodus:
Fisuele programmearring foar Sonoff Basic

It debug-ark is heul ienfâldich en bestiet út trije haadknoppen: "begjinne", "ien stap foarút" en "stopje" (litte wy ek net ferjitte oer "yngean" en "ôfslute" debugmodus). Neist stap-foar-stap tracing kinne jo in brekpunt ynstelle op elk blok (troch op it blok te klikken).
Om de hjoeddeistige wearden fan parameters (sensors, relais) yn 'e monitor te werjaan, brûk it blok "print".
it is oersjoch video oer it brûken fan de debugger.

Seksje foar de nijsgjirrige. Wat is ûnder de motorkap?

Om de skripts op it doelapparaat te wurkjen, waarden in bytecode-interpreter en in assembler mei 38 ynstruksjes ûntwikkele. De boarnekoade fan Blockly hat in spesjalisearre koadegenerator ynboud dy't fisuele blokken omsette yn montage-ynstruksjes. Dêrnei wurdt dit assemblerprogramma omboud ta bytekoade en oerdroegen oan it apparaat foar útfiering.
De arsjitektuer fan dizze firtuele masine is frij ienfâldich en d'r is gjin spesjaal punt yn it beskriuwen; op it ynternet fine jo in protte artikels oer it ûntwerpen fan 'e ienfâldichste firtuele masines.
Ik allocearje normaal 1000 bytes foar de stapel fan myn firtuele masine, wat genôch is om te sparjen. Fansels kinne djippe rekurzjes elke stapel útputte, mar it is net wierskynlik dat se praktysk gebrûk hawwe.

De resultearjende bytekoade is frij kompakt. As foarbyld is de bytekoade foar it berekkenjen fan deselde faktorial mar 49 bytes. Dit is syn fisuele foarm:
Fisuele programmearring foar Sonoff Basic

En dit is syn assemblerprogramma:

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

As de gearstallingsfoarm fan fertsjintwurdiging gjin praktyske wearde hat, dan jout de ljepper "javaskrit", krekt oarsom, in mear fertroud útsjoch as fisuele blokken:

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

window.alert(factorial(10));

Oangeande prestaasjes. Doe't ik rûn de simpelste flasher skript, Ik krige in 47 kHz fjouwerkante golf op de oscilloscope skerm (by in prosessor klok snelheid fan 80 MHz).
Fisuele programmearring foar Sonoff BasicFisuele programmearring foar Sonoff Basic
Ik tink dat dit is in goed resultaat, op syn minst dizze snelheid is hast tsien kear flugger as Lua и Espruino.

Finale diel

Om gearfetsje, sil ik sizze dat it brûken fan skripts ús net allinich de logika fan 'e wurking fan in apart apparaat kinne programmearje, mar makket it ek mooglik om ferskate apparaten te ferbinen yn ien meganisme, wêrby't guon apparaten it gedrach fan oaren beynfloedzje.
Ik merk ek op dat de keazen metoade foar it bewarjen fan skripts (direkt yn 'e apparaten sels, en net op' e tsjinner) it wikseljen fan al wurkjende apparaten nei in oare server, bygelyks nei in hûs Raspberry, hjir ferienfâldiget hantlieding.

Dat is alles, ik hear graach advys en konstruktive krityk.

Boarne: www.habr.com

Add a comment