En Artikel iwwer wéi een e programméierbare Logik Controller vun engem bëllegen chinesesche Gerät erstellt. Esou en Apparat wäert seng Notzung souwuel an der Hausautomatioun an als praktesch Klassen an der Schoulinformatik fannen.
Als Referenz funktionnéiert de Sonoff Basic Programm par défaut mat enger mobiler Applikatioun duerch e chinesesche Cloud Service; no der proposéierter Ännerung ass all weider Interaktioun mat dësem Apparat am Browser méiglech.
Sektioun I. Sonoff mam MGT24 Service verbannen
Schrëtt 1: Erstellt eng Kontrollpanel
Aschreiwen op de Site
Login fir de System
Fir e Kontrollpanel fir en neien Apparat ze kreéieren, klickt op de "+" Knäppchen.
Beispill fir e Panel ze kreéieren
Wann de Panel erstallt ass, erschéngt se an Ärer Lëscht vu Panelen.
Op der Tab "Setup" vun der erstallt Panel fannt Dir d'Felder "Device ID" an "Autorisatiounsschlëssel"; an Zukunft wäert dës Informatioun erfuerderlech sinn wann Dir de Sonoff Apparat opstellt.
Tab Beispill
Schrëtt 2. Reflash den Apparat
Benotzt den Utility
Schrëtt 3. Apparat Ariichten
Gitt d'Kraaft op den Apparat un, nodeems d'LED opgehuewen ass, dréckt de Knäppchen an hält se gedréckt bis d'LED ufänkt periodesch gläichméisseg ze blénken.
An dësem Moment erschéngt en neit Wi-Fi Netzwierk mam Numm "PLC Sonoff Basic", verbënnt Äre Computer mat dësem Netz.
Erklärung vun LED Indikatioun
LED Indikatioun
Apparat Status
periodesch duebel Blëtz
keng Verbindung zu Router
blénkt kontinuéierlech
Verbindung mam Router etabléiert
periodesch eenheetlech blénken
Wi-Fi Access Point Modus
geläscht
Keng Stroumversuergung
Öffnen en Internetbrowser a gitt den Text "192.168.4.1" an der Adressbar, gitt op d'Netzwierk Astellungssäit vum Apparat.
Fëllt d'Felder wéi follegt aus:
- "Netzwierknumm" a "Passwuert" (fir den Apparat mat Ärem Heem Wi-Fi Router ze verbannen).
- "Device ID" an "Autorisatiounsschlëssel" (fir den Apparat am MGT24 Service ze autoriséieren).
Beispill vun Astellung Apparat Reseau Parameteren
Späichert d'Astellungen a restart den Apparat.
et ass
Schrëtt 4. Sensoren verbannen (optional)
Déi aktuell Firmware ënnerstëtzt bis zu véier ds18b20 Temperatursensoren. Hei
Abschnitt II. Visuell programméiere
Schrëtt 1: Erstellt Scripten
Benotzt als Programméierungsëmfeld
Ech hunn spezialiséiert Blöcke bäigefüügt fir ze schreiwen an ze liesen Apparatparameter. All Parameter gëtt mam Numm zougänglech. Fir Parameteren vu Ferngeräter ginn zesummegesate Nimm benotzt: "parameter @ Apparat".
Dropdown Lëscht vun Optiounen
Beispillszenario fir zyklesch Ausschalten vun der Belaaschtung (1Hz):
E Beispill vun engem Skript deen d'Operatioun vun zwee separaten Apparater synchroniséiert. Nämlech widderhëlt de Relais vum Zilapparat d'Operatioun vum Relais vum Fernapparat.
Szenario fir Thermostat (ouni Hysteresis):
Fir méi komplex Scripten ze kreéieren, kënnt Dir Variabelen, Loops, Funktiounen (mat Argumenter) an aner Konstruktioune benotzen. Ech wäert dat alles net am Detail hei beschreiwen; et gëtt scho vill um Netz.
Schrëtt 2: Uerdnung vun Scripten
De Skript leeft kontinuéierlech, a soubal et säin Enn erreecht, fänkt et erëm un. An dësem Fall sinn et zwee Blocken, déi de Skript temporär pauséiere kënnen, "Verzögerung" an "Paus".
De Block "Verzögerung" gëtt fir Millisekonnen oder Mikrosekonnen Verspéidungen benotzt. Dëse Block hält strikt den Zäitintervall, blockéiert d'Operatioun vum ganzen Apparat.
De Block "Paus" gëtt fir zweet (oder manner) Verspéidungen benotzt, an et blockéiert net d'Ausféierung vun anere Prozesser am Apparat.
Wann de Skript selwer eng onendlech Loop enthält, de Kierper vun deem keng "Paus" enthält, initiéiert den Dolmetscher onofhängeg eng kuerz Paus.
Wann de zougewisen Erënnerung Stack erschöpft ass, wäert den Dolmetscher ophalen esou e Kraafthonger Skript auszeféieren (opgepasst mat rekursive Funktiounen).
Schrëtt 3: Debugging Scripten
Fir e Skript ze debuggen deen schonn an den Apparat gelueden ass, kënnt Dir e Programm Trace Schrëtt fir Schrëtt lafen. Dëst kann extrem nëtzlech sinn wann d'Behuele vum Skript anescht ausgeet wéi dat wat den Auteur geduecht huet. An dësem Fall erlaabt d'Tracing den Auteur séier d'Quell vum Problem ze fannen an de Feeler am Skript ze korrigéieren.
Szenario fir Faktorial Berechnung am Debug Modus:
D'Debug-Tool ass ganz einfach a besteet aus dräi Haaptknäppercher: "Start", "Ee Schrëtt no vir" an "Stop" (loosst eis och net vergiessen iwwer "Enter" an "Exit" Debug Modus). Zousätzlech zu Schrëtt-fir-Schrëtt Tracing, kënnt Dir e Breakpoint op all Block setzen (andeems Dir op de Block klickt).
Fir déi aktuell Wäerter vun de Parameteren (Sensoren, Relais) am Monitor ze weisen, benotzt de Block "Drécken".
et ass
Sektioun fir déi virwëtzeg. Wat ass ënnert der Hood?
Fir datt d'Skripte op dem Zilgerät funktionnéieren, goufen e Bytecode-Interpreter an en Assembler mat 38 Instruktiounen entwéckelt. Dem Blockly säi Quellcode huet e spezialiséierte Codegenerator dran agebaut deen visuell Blocken an d'Versammlungsinstruktiounen konvertéiert. Duerno gëtt dësen Assemblerprogramm an Bytecode ëmgewandelt an op den Apparat fir Ausféierung transferéiert.
D'Architektur vun dëser virtueller Maschinn ass zimmlech einfach an et gëtt kee besonnesche Punkt et ze beschreiwen; um Internet fannt Dir vill Artikelen iwwer den Design vun den einfachsten virtuelle Maschinnen.
Ech verdeelen normalerweis 1000 Bytes fir de Stack vu menger virtueller Maschinn, wat genuch ass fir ze schounen. Natierlech kënnen déif Rekursiounen all Stack erschöpfen, awer si sinn onwahrscheinlech praktesch ze benotzen.
De resultéierende Bytecode ass relativ kompakt. Als Beispill ass de Bytecode fir dee selwechte Faktorial ze berechnen nëmmen 49 Bytes. Dëst ass seng visuell Form:
An dëst ass säi Versammlungsprogramm:
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
Wann d'Versammlungsform vun der Representatioun kee praktesche Wäert huet, da gëtt de Tab "Javascrit", am Géigendeel, e méi vertraute Look wéi visuell Blocks:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Betreffend Leeschtung. Wann ech am einfachsten Flasher Skript gelaf hunn, krut ech eng 47 kHz Quadratwelle um Oszilloskopbildschierm (bei enger Prozessor Auergeschwindegkeet vun 80 MHz).
Ech mengen dat ass e gutt Resultat, op d'mannst ass dës Geschwindegkeet bal zéng Mol méi séier wéi
D'Finale Deel
Zesummefaassend, wäert ech soen datt d'Benotzung vu Skripte erlaabt eis net nëmmen d'Logik vun der Operatioun vun engem separaten Apparat ze programméieren, awer et mécht et och méiglech e puer Apparater an engem eenzege Mechanismus ze verbannen, wou e puer Apparater d'Behuele vun aneren beaflossen.
Ech bemierken och datt d'gewielte Method fir Scripten ze späicheren (direkt an den Apparater selwer, an net um Server) vereinfacht de Wiessel vu scho funktionnéierende Geräter op en aneren Server, zum Beispill op en Heem Raspberry, hei
Dat ass alles, ech wäert frou Rotschléi a konstruktiv Kritik ze héieren.
Source: will.com