Ein Artikel darüber, wie man aus einem billigen chinesischen Gerät eine speicherprogrammierbare Steuerung erstellt. Ein solches Gerät wird sowohl in der Hausautomation als auch im praktischen Unterricht in der Schulinformatik Verwendung finden.
Als Referenz: Standardmäßig funktioniert das Sonoff Basic-Programm mit einer mobilen Anwendung über einen chinesischen Cloud-Dienst; nach der vorgeschlagenen Änderung ist jede weitere Interaktion mit diesem Gerät im Browser möglich.
Abschnitt I. Sonoff mit dem MGT24-Dienst verbinden
Schritt 1: Erstellen Sie ein Bedienfeld
Registrieren Sie sich auf der Website
Einloggen
Um ein Bedienfeld für ein neues Gerät zu erstellen, klicken Sie auf die Schaltfläche „+“.
Beispiel für die Erstellung eines Panels
Sobald das Panel erstellt ist, wird es in Ihrer Panelliste angezeigt.
Auf der Registerkarte „Setup“ des erstellten Panels finden Sie die Felder „Geräte-ID“ und „Autorisierungsschlüssel“. In Zukunft werden diese Informationen beim Einrichten des Sonoff-Geräts benötigt.
Tab-Beispiel
Schritt 2. Aktualisieren Sie das Gerät
Verwenden des Dienstprogramms
Schritt 3. Geräteeinrichtung
Schalten Sie das Gerät ein, nachdem die LED aufleuchtet, drücken Sie die Taste und halten Sie sie gedrückt, bis die LED regelmäßig gleichmäßig zu blinken beginnt.
In diesem Moment erscheint ein neues Wi-Fi-Netzwerk namens „PLC Sonoff Basic“. Verbinden Sie Ihren Computer mit diesem Netzwerk.
Erläuterung der LED-Anzeige
LED-Anzeige
Gerätestatus
periodisches Doppelblinken
keine Verbindung zum Router
leuchtet ununterbrochen
Verbindung mit dem Router hergestellt
periodisches gleichmäßiges Blinken
WLAN-Zugangspunktmodus
ausgelöscht
Keine Stromversorgung
Öffnen Sie einen Internetbrowser und geben Sie den Text „192.168.4.1“ in die Adressleiste ein. Gehen Sie zur Einstellungsseite für die Netzwerkeinstellungen des Geräts.
Füllen Sie die Felder wie folgt aus:
- „Netzwerkname“ und „Passwort“ (um das Gerät mit Ihrem Heim-WLAN-Router zu verbinden).
- „Geräte-ID“ und „Autorisierungsschlüssel“ (zur Autorisierung des Geräts beim MGT24-Dienst).
Beispiel für die Einstellung der Netzwerkparameter des Geräts
Speichern Sie die Einstellungen und starten Sie das Gerät neu.
Hier
Schritt 4. Sensoren anschließen (optional)
Die aktuelle Firmware unterstützt bis zu vier ds18b20-Temperatursensoren. Hier
Abschnitt II. Visuelle Programmierung
Schritt 1: Skripte erstellen
Wird als Programmierumgebung verwendet
Ich habe spezielle Blöcke zum Schreiben und Lesen von Geräteparametern hinzugefügt. Auf jeden Parameter wird über seinen Namen zugegriffen. Für Parameter von Remote-Geräten werden zusammengesetzte Namen verwendet: „parameter@device“.
Dropdown-Liste mit Optionen
Beispielszenario für zyklisches Ein- und Ausschalten der Last (1Hz):
Ein Beispiel für ein Skript, das den Betrieb zweier separater Geräte synchronisiert. Das Relais des Zielgeräts wiederholt nämlich den Betrieb des Relais des entfernten Geräts.
Szenario für Thermostat (ohne Hysterese):
Um komplexere Skripte zu erstellen, können Sie Variablen, Schleifen, Funktionen (mit Argumenten) und andere Konstrukte verwenden. Ich werde das alles hier nicht im Detail beschreiben, es gibt schon einiges im Internet.
Schritt 2: Reihenfolge der Skripte
Das Skript läuft kontinuierlich und sobald es sein Ende erreicht hat, beginnt es erneut. In diesem Fall gibt es zwei Blöcke, die das Skript vorübergehend anhalten können, „delay“ und „pause“.
Der Block „delay“ wird für Verzögerungen im Millisekunden- oder Mikrosekundenbereich verwendet. Dieser Block hält das Zeitintervall strikt ein und blockiert den Betrieb des gesamten Geräts.
Der „Pause“-Block wird für Verzögerungen von Sekunden (oder weniger) verwendet und blockiert nicht die Ausführung anderer Prozesse im Gerät.
Wenn das Skript selbst eine Endlosschleife enthält, deren Rumpf kein „Pause“ enthält, leitet der Interpreter selbstständig eine kurze Pause ein.
Wenn der zugewiesene Speicherstapel erschöpft ist, stoppt der Interpreter die Ausführung eines solchen energiehungrigen Skripts (Vorsicht bei rekursiven Funktionen).
Schritt 3: Skripte debuggen
Um ein bereits in das Gerät geladenes Skript zu debuggen, können Sie einen Programm-Trace Schritt für Schritt ausführen. Dies kann äußerst nützlich sein, wenn sich herausstellt, dass sich das Skript anders verhält als vom Autor beabsichtigt. In diesem Fall ermöglicht die Nachverfolgung dem Autor, die Ursache des Problems schnell zu finden und den Fehler im Skript zu beheben.
Szenario zur Berechnung der Fakultät im Debug-Modus:
Das Debug-Tool ist sehr einfach und besteht aus drei Hauptschaltflächen: „Start“, „Einen Schritt vorwärts“ und „Stopp“ (vergessen wir auch nicht den Debug-Modus „Enter“ und „Exit“). Zusätzlich zur schrittweisen Verfolgung können Sie einen Haltepunkt für jeden Block setzen (indem Sie auf den Block klicken).
Um die aktuellen Werte von Parametern (Sensoren, Relais) im Monitor anzuzeigen, verwenden Sie den Block „Drucken“.
Hier
Abschnitt für Neugierige. Was steckt unter der Haube?
Damit die Skripte auf dem Zielgerät funktionieren, wurden ein Bytecode-Interpreter und ein Assembler mit 38 Anweisungen entwickelt. Im Quellcode von Blockly ist ein spezieller Codegenerator integriert, der visuelle Blöcke in Montageanweisungen umwandelt. Anschließend wird dieses Assemblerprogramm in Bytecode umgewandelt und zur Ausführung an das Gerät übertragen.
Die Architektur dieser virtuellen Maschine ist recht einfach und es macht keinen besonderen Sinn, sie zu beschreiben; im Internet finden Sie viele Artikel über den Entwurf der einfachsten virtuellen Maschinen.
Normalerweise reserviere ich 1000 Bytes für den Stapel meiner virtuellen Maschine, was ausreicht, um etwas zu sparen. Natürlich können tiefe Rekursionen jeden Stapel erschöpfen, aber sie haben wahrscheinlich keinen praktischen Nutzen.
Der resultierende Bytecode ist recht kompakt. Beispielsweise beträgt der Bytecode zur Berechnung derselben Fakultät nur 49 Bytes. Dies ist seine visuelle Form:
Und das ist sein Assembler-Programm:
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 zusammengesetzte Darstellungsform keinen praktischen Wert hat, sieht die Registerkarte „Javascrit“ im Gegenteil vertrauter aus als visuelle Blöcke:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Bezüglich der Leistung. Als ich das einfachste Flasher-Skript ausführte, wurde auf dem Oszilloskopbildschirm eine Rechteckwelle mit 47 kHz angezeigt (bei einer Prozessortaktrate von 80 MHz).
Ich denke, das ist ein gutes Ergebnis, zumindest ist diese Geschwindigkeit fast zehnmal höher als
Der letzte Teil
Zusammenfassend möchte ich sagen, dass die Verwendung von Skripten uns nicht nur die Programmierung der Betriebslogik eines einzelnen Geräts ermöglicht, sondern auch die Verbindung mehrerer Geräte zu einem einzigen Mechanismus ermöglicht, wobei einige Geräte das Verhalten anderer beeinflussen.
Ich stelle auch fest, dass die gewählte Methode zum Speichern von Skripten (direkt in den Geräten selbst und nicht auf dem Server) den Wechsel bereits funktionierender Geräte auf einen anderen Server, hier beispielsweise auf einen Heim-Raspberry, vereinfacht
Das ist alles, ich freue mich über Ratschläge und konstruktive Kritik.
Source: habr.com