Visuelle Programmierung fĂŒr Sonoff Basic

Bild

Ein Artikel darĂŒber, wie man eine speicherprogrammierbare Steuerung aus einem billigen chinesischen GerĂ€t erstellt. Ein solches GerĂ€t findet seine Anwendung sowohl in der Hausautomation als auch als praktische Lektion in der Schulinformatik.

Als Referenz arbeitet das Sonoff Basic-Programm standardmĂ€ĂŸig mit der mobilen Anwendung ĂŒber den chinesischen Cloud-Dienst. Nach der vorgeschlagenen Änderung wird jede weitere Interaktion mit diesem GerĂ€t im Browser möglich.

Abschnitt I. Anschließen von Sonoff an MGT24


Schritt 1. Erstellen Sie ein Control Panel


Registrieren Sie sich auf der mgt24- Website (falls Sie sich noch nicht registriert haben) und melden Sie sich unter Ihrem Konto an.

Login
Bild

Klicken Sie auf die SchaltflĂ€che "+", um ein Bedienfeld fĂŒr ein neues GerĂ€t zu erstellen.

Beispiel fĂŒr die Panel-Erstellung
Bild

Nachdem das Panel erstellt wurde, wird es in der Liste Ihrer Panels angezeigt.

Suchen Sie auf der Registerkarte "Setup" des erstellten Bedienfelds die Felder "GerĂ€te-ID" und "AutorisierungsschlĂŒssel". Diese Informationen werden in Zukunft beim Einrichten des Sonoff-GerĂ€ts benötigt.

Tab Beispiel
Bild

Schritt 2. Flashen des GerÀts


Laden Sie mit dem Dienstprogramm XTCOM_UTIL die Sonoff Basic PLC- Firmware auf das GerÀt herunter. Dazu benötigen Sie einen USB-TTL-Konverter. Hier ist die Anweisung und Videoanweisung .

Schritt 3. Konfigurieren Sie das GerÀt


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.

Zu diesem Zeitpunkt wird ein neues WLAN-Netzwerk mit dem Namen "PLC Sonoff Basic" angezeigt. Verbinden Sie Ihren Computer mit diesem Netzwerk.

Dekodierungs-LED-Anzeige
LED-AnzeigeGerÀtestatus
periodisches doppeltes BlinkenKeine Verbindung zum Router
leuchtet ununterbrochenVerbindung zum Router hergestellt
periodisches gleichmĂ€ĂŸiges BlinkenWLAN-Zugangspunktmodus
löschekeine Macht


Öffnen Sie einen Internetbrowser und geben Sie den Text "192.168.4.1" in die Adressleiste ein. Gehen Sie zur Seite mit den Netzwerkeinstellungen des GerĂ€ts.

FĂŒllen Sie die Felder wie folgt aus:

  • "Netzwerkname" und "Passwort" (um das GerĂ€t an Ihren WLAN-Heimrouter zu binden).
  • "GerĂ€te-ID" und "AutorisierungsschlĂŒssel" (um das GerĂ€t fĂŒr den MGT24-Dienst zu autorisieren).

Beispiel fĂŒr die Einstellung von GerĂ€tenetzwerkparametern
Bild

Speichern Sie die Einstellungen und starten Sie das GerÀt neu.

Hier ist ein Video-Tutorial .

Schritt 4. Sensoren anschließen (optional)


Die aktuelle Firmware unterstĂŒtzt bis zu vier ds18b20-Temperatursensoren. Hier ist ein Video-Tutorial zur Montage von Sensoren. Anscheinend wird dieser Schritt der schwierigste sein, da direkte HĂ€nde und ein Lötkolben erforderlich sind.

Abschnitt II. Visuelle Programmierung


Schritt 1. Skripterstellung


Blockly wird als Programmierumgebung verwendet. Die Umgebung ist leicht zu erlernen, sodass Sie kein Programmierer sein mĂŒssen, um einfache Skripte zu erstellen.

Ich habe spezielle Blöcke zum Schreiben und Lesen von GerĂ€teparametern hinzugefĂŒgt. Der Zugriff auf einen beliebigen Parameter erfolgt ĂŒber den Namen. Zusammengesetzte Namen werden fĂŒr Remote-GerĂ€teparameter verwendet: "parameter @ device".

Dropdown-Liste der Optionen
Bild

Ein Beispiel fĂŒr ein Szenario des zyklischen Ein- und Ausschaltens der Last (1 Hz):

Bild

Ein Beispielszenario, das den Betrieb von zwei separaten GerÀten synchronisiert. Das Relais des ZielgerÀts wiederholt nÀmlich den Betrieb des Relais des entfernten GerÀts.

Bild

Szenario fĂŒr Thermostat (ohne Hysterese):

Bild

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, das Netzwerk hat bereits ziemlich viel Schulungsmaterial ĂŒber Blockly .

Schritt 2. Skriptreihenfolge


Das Skript wird kontinuierlich ausgefĂŒhrt und sobald es sein Ende erreicht hat, wird es erneut gestartet. Es gibt zwei Blöcke, mit denen das Skript vorĂŒbergehend angehalten werden kann: "Verzögerung" und "Pause".

Der Verzögerungsblock wird fĂŒr Millisekunden- oder Mikrosekundenverzögerungen verwendet. Dieses GerĂ€t hĂ€lt das Zeitintervall strikt ein und blockiert den Betrieb des gesamten GerĂ€ts.

Der Pausenblock wird fĂŒr zweite (möglicherweise weniger) Verzögerungen verwendet und blockiert nicht die AusfĂŒhrung anderer Prozesse im GerĂ€t.

Wenn das Skript in sich eine Endlosschleife enthĂ€lt, in deren Hauptteil keine „Pause“ vorhanden ist, leitet der Interpreter unabhĂ€ngig eine kleine Pause ein.

Wenn der zugewiesene Speicherstapel erschöpft ist, stoppt der Interpreter die AusfĂŒhrung eines solchen unersĂ€ttlichen Skripts (seien Sie vorsichtig mit rekursiven Funktionen).

Schritt 3. Debuggen von Skripten


Um ein bereits in das GerĂ€t geladenes Skript zu debuggen, können Sie die Programmablaufverfolgung schrittweise ausfĂŒhren. Dies kann Ă€ußerst nĂŒtzlich sein, wenn das Verhalten des Skripts nicht dem vom Autor beabsichtigten entspricht. In diesem Fall kann der Autor mithilfe der Ablaufverfolgung schnell die Ursache des Problems finden und den Fehler im Skript beheben.

Das Skript zur Berechnung der FakultÀt im Debug-Modus:

Bild

Das Debugging-Tool ist sehr einfach und besteht aus drei HauptschaltflĂ€chen: "Start", "Ein Schritt vorwĂ€rts" und "Stopp" (wir werden auch nicht vergessen, den Debugging-Modus zu betreten und zu verlassen). ZusĂ€tzlich zur schrittweisen Ablaufverfolgung können Sie fĂŒr jeden Block einen Haltepunkt festlegen (indem Sie auf den Block klicken).
Verwenden Sie den Druckblock, um die aktuellen Werte der Parameter (Sensoren, Relais) im Monitor anzuzeigen.
Hier ist ein Übersichtsvideo zur Verwendung des Debuggers.

Abschnitt fĂŒr Neugierige. Aber was ist unter der Haube?


Damit die Skripte auf dem ZielgerĂ€t funktionieren, wurden ein Bytecode-Interpreter und ein Assembler fĂŒr 38 Anweisungen entwickelt. In den blockartigen Quellcode wurde ein spezieller Codegenerator integriert, der visuelle Blöcke in Assembler-Anweisungen konvertiert. In Zukunft wird dieses Assembler-Programm in Bytecode konvertiert und zur AusfĂŒhrung auf das GerĂ€t ĂŒbertragen.

Die Architektur dieser virtuellen Maschine ist recht einfach und es macht keinen Sinn, sie zu beschreiben. Im Internet finden Sie viele Artikel zum Design einfacher virtueller Maschinen.

FĂŒr den Stapel meiner virtuellen Maschine ordne ich normalerweise 1000 Bytes zu, dies reicht mit einem Rand aus. NatĂŒrlich können tiefe Rekursionen jeden Stapel erschöpfen, aber es ist unwahrscheinlich, dass sie eine praktische Anwendung finden.

Der resultierende Bytecode ist ziemlich kompakt. Beispielsweise betrÀgt der Bytecode zur Berechnung derselben FakultÀt nur 49 Bytes. Dies ist seine visuelle PrÀsentation:

Bild

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 das Assembler-Darstellungsformular keinen praktischen Wert hat, sieht die Registerkarte "Javascrit" im Gegensatz dazu vertrauter aus 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. Als ich das einfachste Blinkerszenario startete, bekam ich auf dem Oszilloskopbildschirm einen 47-kHz-MĂ€ander (bei einer Prozessortaktrate von 80 MHz).

Bild

Bild

Ich denke, das ist ein gutes Ergebnis, zumindest ist diese Geschwindigkeit fast zehnmal schneller als die von Lua und Espruino .

Der letzte Teil


Zusammenfassend möchte ich sagen, dass wir durch die Verwendung von Skripten nicht nur die Logik eines einzelnen GerÀts programmieren können, sondern auch mehrere GerÀte zu einem einzigen Mechanismus verbinden können, wobei einige GerÀte das Verhalten anderer beeinflussen.

Ich stelle auch fest, dass die gewÀhlte Methode zum Speichern von Skripten (direkt auf den GerÀten selbst und nicht auf dem Server) das Umschalten vorhandener GerÀte auf einen anderen Server vereinfacht, z. B. auf die Home-Himbeere. Hier ist die Anweisung .

Das ist alles, ich freue mich ĂŒber RatschlĂ€ge und konstruktive Kritik.

Source: https://habr.com/ru/post/de436272/


All Articles