
Ein Artikel, der beschreibt, wie Sie aus einem gĂŒnstigen chinesischen GerĂ€t einen programmierbaren Logik-Controller erstellen können. Dieses GerĂ€t findet sowohl in der Hausautomatisierung als auch als praktisches Projekt im Informatikunterricht Anwendung.
Zur Information: StandardmĂ€Ăig funktioniert das Sonoff Basic-Programm mit einer mobilen App ĂŒber einen chinesischen Cloud-Service. Nach der vorgeschlagenen Umprogrammierung wird die gesamte weitere Interaktion mit diesem GerĂ€t ĂŒber den Browser möglich sein.
Abschnitt I. Sonoff mit dem MGT24-Service verbinden
Schritt 1. Erstellen eines Dashboards
Registrieren Sie sich auf der Website (falls Sie noch nicht registriert sind) und melden Sie sich mit Ihrem Konto an.
Anmeldung
Um ein Dashboard fĂŒr das neue GerĂ€t zu erstellen, klicken Sie auf die SchaltflĂ€che â+â.
Beispiel eines Dashboards
Sobald das Dashboard erstellt ist, erscheint es in Ihrer Liste der Dashboards.
Im Tab âEinstellungenâ des erstellten Dashboards finden Sie die Felder âGerĂ€te-IDâ und âAuthentifizierungsschlĂŒsselâ. Diese Informationen werden spĂ€ter zur Konfiguration des Sonoff-GerĂ€ts benötigt.
Beispiel-Tab
Schritt 2. Firmware des GerÀts aktualisieren
Mit dem Werkzeug laden Sie die Firmware auf das GerĂ€t, hierfĂŒr benötigen Sie einen USB-TTL-Konverter. Hier und .
Schritt 3. GerÀteeinrichtung
Versorgen Sie das GerĂ€t mit Strom; sobald die LED leuchtet, drĂŒcken und halten Sie die Taste, bis die LED regelmĂ€Ăig blinkt.
Zu diesem Zeitpunkt erscheint ein neues WLAN-Netzwerk mit dem Namen âPLC Sonoff Basicâ. Verbinden Sie Ihren Computer mit diesem Netzwerk.
EntschlĂŒsselung der LED-Anzeige
LED-Anzeige
GerÀtezustand
periodisches doppeltes Blinken
keine Verbindung zum Router
leuchtet kontinuierlich
Verbindung zum Router hergestellt
periodisches gleichmĂ€Ăiges Blinken
WLAN-Hotspot-Modus
ausgeschaltet
kein Strom
Ăffnen Sie Ihren Internetbrowser und geben Sie in die Adresszeile â192.168.4.1â ein, um auf die Netzwerkparameter-Einstellungsseite des GerĂ€ts zu gelangen.
FĂŒllen Sie die Felder wie folgt aus:
- âNetzwerknameâ und âPasswortâ (um das GerĂ€t mit Ihrem heimischen WLAN-Router zu verbinden).
- âGerĂ€te-IDâ und âAutorisierungsschlĂŒsselâ (um das GerĂ€t im MGT24-Dienst zu authentifizieren).
Beispiel fĂŒr die Netzwerkkonfiguration des GerĂ€ts
Speichern Sie die Einstellungen und starten Sie das GerÀt neu.
Hier .
Schritt 4. Anschluss der Sensoren (optional)
Die aktuelle Firmware unterstĂŒtzt bis zu vier Temperatursensoren ds18b20. Hier finden Sie Informationen zur Montage der Sensoren. Offensichtlich wird dieser Schritt der schwierigste sein, da er von Ihnen Handgeschick und einen Lötkolben erfordert.
Abschnitt II. Visuelle Programmierung
Schritt 1. Erstellung von Szenarien
Als Programmierumgebung wird , eine benutzerfreundliche Umgebung, verwendet, sodass Sie keine Programmierkenntnisse benötigen, um einfache Szenarien zu erstellen.
Ich habe spezielle Blöcke zum Lesen und Schreiben der GerĂ€teeinstellungen hinzugefĂŒgt. Der Zugriff auf jeden Parameter erfolgt ĂŒber den Namen. FĂŒr Parameter von entfernten GerĂ€ten werden zusammengesetzte Namen verwendet: âparameter@deviceâ.
Dropdown-MenĂŒ der Parameter
Beispiel fĂŒr ein Szenario zum zyklischen Ein- und Ausschalten der Last (1 Hz):

Beispiel fĂŒr ein Szenario, das die Arbeit von zwei separaten GerĂ€ten synchronisiert. Das Relais des ZielgerĂ€ts spiegelt die Arbeit des Relais des entfernten GerĂ€ts wider.

Szenario fĂŒr das Thermostat (ohne Hysterese):

Um komplexere Skripte zu erstellen, können Sie Variablen, Schleifen, Funktionen (mit Argumenten) und andere Konstrukte verwenden. Ich werde hier nicht alles ausfĂŒhrlich erklĂ€ren, es gibt bereits einiges an .
Schritt 2. AusfĂŒhrungsreihenfolge der Skripte
Ein Skript lĂ€uft im kontinuierlichen Modus und wird sofort erneut gestartet, sobald es zu seinem Ende kommt. Dabei gibt es zwei Blöcke, die die AusfĂŒhrung des Skripts vorĂŒbergehend anhalten können: «delay» und «pause».
Der Block «delay» wird fĂŒr Millisekunden- oder Mikrosekundenverzögerungen verwendet. Dieser Block hĂ€lt den zeitlichen Intervall strikt ein und blockiert die Arbeit des gesamten GerĂ€ts.
Der Block «pause» wird fĂŒr Sekundenverzögerungen (auch kĂŒrzer möglich) verwendet und blockiert nicht die AusfĂŒhrung anderer Prozesse im GerĂ€t.
Wenn ein Skript einen unendlichen Loop enthÀlt, in dessen Körper kein «pause»-Befehl steht, initiiert der Interpreter selbststÀndig eine kleine Pause.
Falls der zugewiesene Stack-Speicher erschöpft ist, stoppt der Interpreter die AusfĂŒhrung eines solchen speicherintensiven Skripts (passen Sie auf rekursive Funktionen auf).
Schritt 3. Debbuging von Skripten
Um ein bereits auf das GerĂ€t geladenes Skript zu debuggen, kann die Programmtreiberung Schritt fĂŒr Schritt gestartet werden. Dies ist Ă€uĂerst nĂŒtzlich, wenn das Verhalten des Skripts nicht den Erwartungen des Autors entspricht. In diesem Fall ermöglicht die Treiberung dem Autor, schnell die Quelle des Problems zu finden und den Fehler im Skript zu beheben.
Skript zur Berechnung der FakultÀt im Debugging-Modus:

Das Debugging-Tool ist sehr einfach und besteht aus drei HauptschaltflÀchen: «Start», «Ein Schritt vorwÀrts» und «Stopp» (vergessen wir nicht den «Eintritt» und «Ausgang» aus dem Debugging-Modus). Neben der schrittweisen Treiberung kann an jedem Block ein Haltepunkt gesetzt werden (ein einfacher Klick mit der Maus auf den Block).
Um die aktuellen Werte der Parameter (Sensoren, Relais) auf dem Monitor anzuzeigen, verwenden Sie den Block «print».
Hier ĂŒber die Verwendung des Debuggers.
Bereich fĂŒr Neugierige. Was steckt dahinter?
Um die Szenarien auf dem ZielgerĂ€t auszufĂŒhren, wurde ein Bytecode-Interpreter und ein Assembler mit 38 Instruktionen entwickelt. Ein spezialisierter Code-Generator wurde in den Quellen von blockly integriert, der visuelle Blöcke in Assembleranweisungen umwandelt. AnschlieĂend wird dieses Assemblerprogramm in Bytecode umgewandelt und an das GerĂ€t zur AusfĂŒhrung ĂŒbergeben.
Die Architektur dieser virtuellen Maschine ist ziemlich einfach, weshalb es keinen besonderen Sinn macht, sie im Detail zu beschreiben. Im Internet finden Sie zahlreiche Artikel ĂŒber das Design einfacher virtueller Maschinen.
FĂŒr den Stack meiner virtuellen Maschine reserviere ich normalerweise 1000 Bytes, was mehr als ausreichend ist. NatĂŒrlich können tiefe Rekursionen jeden Stack erschöpfen, aber es ist unwahrscheinlich, dass sie in der Praxis nĂŒtzlich sind.
Der resultierende Bytecode ist ziemlich kompakt. Zum Beispiel betrĂ€gt der Bytecode fĂŒr die Berechnung der FakultĂ€t nur 49 Bytes. Hier ist seine visuelle Darstellung:

Und hier ist sein Assemblerprogramm:
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
Wenn die assemblermĂ€Ăige Darstellung keinen praktischen Wert hat, bietet der Tab âJavaScriptâ hingegen eine vertrautere Ansicht als visuelle Blöcke:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Was die Leistung betrifft. Bei der AusfĂŒhrung eines einfachen Blinkerskripts erhielt ich auf dem Oszilloskopbildschirm ein 47 kHz-MĂ€ander (bei einer Prozessor-Taktfrequenz von 80 MHz).


Ich halte dies fĂŒr ein anstĂ€ndiges Ergebnis, denn diese Geschwindigkeit ist fast zehnmal schneller als die von und .
AbschlieĂender Teil
Zusammenfassend lÀsst sich sagen, dass der Einsatz von Skripten es uns nicht nur ermöglicht, die Logik eines einzelnen GerÀts zu programmieren, sondern auch mehrere GerÀte zu einem einzigen Mechanismus zu verbinden, bei dem die einen GerÀte das Verhalten der anderen beeinflussen.
Ich möchte auch anmerken, dass die gewÀhlte Methode zur Speicherung der Skripte (direkt in den GerÀten, nicht auf einem Server) es erleichtert, bereits funktionierende GerÀte auf einen anderen Server, beispielsweise einen Heim-Raspberry, umzuschalten. .
Das ist alles, ich freue mich auf RatschlÀge und konstruktive Kritik.
Quelle: habr.com
