Visuelle Programmierung für Sonoff Basic

Visuelle Programmierung für Sonoff Basic
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 mgt24 (falls noch nicht registriert) und melden Sie sich mit Ihrem Konto an.
EinloggenVisuelle Programmierung für Sonoff Basic

Um ein Bedienfeld für ein neues Gerät zu erstellen, klicken Sie auf die Schaltfläche „+“.
Beispiel für die Erstellung eines PanelsVisuelle Programmierung für Sonoff Basic

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-BeispielVisuelle Programmierung für Sonoff Basic

Schritt 2. Aktualisieren Sie das Gerät

Verwenden des Dienstprogramms XTCOM_UTIL Laden Sie die Firmware herunter SPS Sonoff Basic an das Gerät anschließen, hierfür benötigen Sie einen USB-TTL-Konverter. Hier Unterricht и Videoanweisung.

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ätsVisuelle Programmierung für Sonoff Basic

Speichern Sie die Einstellungen und starten Sie das Gerät neu.
Hier Videoanweisung.

Schritt 4. Sensoren anschließen (optional)

Die aktuelle Firmware unterstützt bis zu vier ds18b20-Temperatursensoren. Hier Videoanweisung zum Einbau von Sensoren. Anscheinend wird dieser Schritt der schwierigste sein, da dafür gerade Arme und ein Lötkolben erforderlich sind.

Abschnitt II. Visuelle Programmierung

Schritt 1: Skripte erstellen

Wird als Programmierumgebung verwendet BlocklyDie 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. Auf jeden Parameter wird über seinen Namen zugegriffen. Für Parameter von Remote-Geräten werden zusammengesetzte Namen verwendet: „parameter@device“.
Dropdown-Liste mit OptionenVisuelle Programmierung für Sonoff Basic

Beispielszenario für zyklisches Ein- und Ausschalten der Last (1Hz):
Visuelle Programmierung für Sonoff Basic

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.
Visuelle Programmierung für Sonoff Basic

Szenario für Thermostat (ohne Hysterese):
Visuelle Programmierung für Sonoff Basic

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. Lehrmaterial über Blockly.

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:
Visuelle Programmierung für Sonoff Basic

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 Übersichtsvideo über die Verwendung des Debuggers.

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:
Visuelle Programmierung für Sonoff Basic

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).
Visuelle Programmierung für Sonoff BasicVisuelle Programmierung für Sonoff Basic
Ich denke, das ist ein gutes Ergebnis, zumindest ist diese Geschwindigkeit fast zehnmal höher als Lua и Esspruino.

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 Unterricht.

Das ist alles, ich freue mich über Ratschläge und konstruktive Kritik.

Source: habr.com

Kommentar hinzufügen