
Ein Artikel darĂŒber, wie man aus einem gĂŒnstigen chinesischen GerĂ€t einen programmierbaren logischen Controller erstellen kann. Ein solches GerĂ€t findet Anwendung sowohl in der Hausautomatisierung als auch als praktisches Projekt im Informatikunterricht der Schule.
Zur Information: standardmĂ€Ăig arbeitet das Programm Sonoff Basic ĂŒber eine mobile App mit einem chinesischen Cloud-Service. Nach der vorgeschlagenen UmrĂŒstung wird die gesamte weitere Interaktion mit diesem GerĂ€t im Browser möglich sein.
Abschnitt I. Anschluss von Sonoff an den MGT24-Dienst
Schritt 1. Erstellung eines Dashboards
Registrieren Sie sich auf der Website (wenn 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 fĂŒr die Erstellung eines Dashboards
Sobald das Dashboard erstellt ist, wird es in der Liste Ihrer Dashboards angezeigt.
Im Tab âInstallationâ des erstellten Dashboards finden Sie die Felder âGerĂ€te-IDâ und âAutorisierungsschlĂŒsselâ. Diese Informationen sind spĂ€ter zur Konfiguration des Sonoff-GerĂ€ts erforderlich.
Beispiel-Tab
Schritt 2. Firmware des GerÀts
Laden Sie mit dem Tool die Firmware auf das GerĂ€t. DafĂŒr benötigen Sie einen USB-TTL-Converter. Hier ist und .
Schritt 3. GerÀteeinrichtung
Versorgen Sie das GerĂ€t mit Strom. Sobald die LED aufleuchtet, drĂŒcken Sie die Taste und halten Sie sie gedrĂŒckt, bis die LED gleichmĂ€Ăig zu blinken beginnt.
In diesem Moment 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-Access-Point-Modus
ausgeschaltet
keine Stromversorgung
Ăffnen Sie Ihren Internetbrowser und geben Sie in die Adresszeile â192.168.4.1â ein. Gehen Sie zu den Einstellungen des GerĂ€tes.
FĂŒllen Sie die Felder wie folgt aus:
- âNetzwerknameâ und âPasswortâ (zur Verbindung des GerĂ€ts mit Ihrem heimischen WLAN-Router).
- âGerĂ€te-IDâ und âAutorisierungsschlĂŒsselâ (zur Autorisierung des GerĂ€ts beim MGT24-Dienst).
Beispiel fĂŒr die Netzwerkeinstellungen 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 ist die Montage der Sensoren. Offensichtlich wird dies der komplizierteste Schritt sein, da er von Ihnen geschickte HĂ€nde und einen Lötkolben erfordert.
Abschnitt II. Visuelle Programmierung
Schritt 1. Erstellung von Skripten
Als Programmiersprache wird verwendet, diese Umgebung ist einfach zu erlernen, sodass Sie keine Programmiererfahrung benötigen, um einfache Skripte zu erstellen.
Ich habe spezielle Blöcke fĂŒr das Schreiben und Lesen von GerĂ€teparametern hinzugefĂŒgt. Der Zugriff auf jeden Parameter erfolgt ĂŒber den Namen. FĂŒr die Parameter ferner GerĂ€te werden zusammengesetzte Namen verwendet: âparameter@gerĂ€tâ.
Dropdown-Liste der Parameter
Beispiel eines Skripts fĂŒr zyklisches Ein- und Ausschalten einer Last (1Hz):

Beispiel eines Skripts, das die Arbeit zweier separater GerÀte synchronisiert. Insbesondere wiederholt das Relais des ZielgerÀts das Verhalten des Relais des entfernten GerÀts.

Skript fĂŒr den Thermostat (ohne Hysterese):

Um komplexere Skripte zu erstellen, können Variablen, Schleifen, Funktionen (mit Argumenten) und andere Konstrukte verwendet werden. Ich werde hier nicht alles detailliert aufschreiben, im Internet gibt es bereits recht viele .
Schritt 2. AusfĂŒhrungsreihenfolge der Skripte
Das Skript lĂ€uft im kontinuierlichen Modus, und sobald es sein Ende erreicht, wird es erneut gestartet. 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 Mikrosekundeverzögerungen verwendet. Dieser Block hĂ€lt den Zeitintervall strikt ein und blockiert die Operation des gesamten GerĂ€ts.
Der Block âpauseâ wird fĂŒr Sekundenverzögerungen (auch kĂŒrzer) verwendet und blockiert nicht die AusfĂŒhrung anderer Prozesse im GerĂ€t.
Wenn das Skript eine Endlosschleife enthĂ€lt, in deren Körper kein âpauseâ steht, initiiert der Interpreter selbststĂ€ndig eine kurze Pause.
Im Falle eines Erschöpfens des zugewiesenen Stapels wird der Interpreter die AusfĂŒhrung eines solchen speicherhungrigen Skripts stoppen (seien Sie vorsichtig mit rekursiven Funktionen).
Schritt 3. Fehlersuche bei Skripten
Zur Fehlersuche eines bereits auf das GerĂ€t geladenen Skripts kann die Programmverfolgung Schritt fĂŒr Schritt gestartet werden. Dies ist Ă€uĂerst nĂŒtzlich, wenn sich das Verhalten des Skripts als nicht so herausstellt, wie es der Autor beabsichtigt hat. In diesem Fall ermöglicht die Verfolgung dem Autor, schnell die Fehlerquelle 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 Haupttasten: âStartâ, âEin Schritt vorwĂ€rtsâ und âStoppâ (vergessen wir nicht die âEingabeâ und âAusgabeâ aus dem Debugging-Modus). Neben der schrittweisen Verfolgung kann an jedem Block ein Haltepunkt gesetzt werden (Durch Klicken mit der Maus auf den Block).
Um die aktuellen Parameterwerte (Sensoren, Relais) auf dem Monitor anzuzeigen, verwenden Sie den Block âprintâ.
Hier ĂŒber die Verwendung des Debuggers.
Bereich fĂŒr Neugierige. Was steckt darunter?
Damit die Skripte auf dem ZielgerĂ€t funktionieren, wurde ein Bytecode-Interpreter und ein Assembler mit 38 Instruktionen entwickelt. In den Quellcode von blockly wurde ein spezialisierter Codegenerator eingebaut, der visuelle Blöcke in Assemblieranweisungen umwandelt. Diese Assemblersprache wird dann in Bytecode umgewandelt und zur AusfĂŒhrung an das GerĂ€t ĂŒbertragen.
Die Architektur dieser virtuellen Maschine ist recht einfach, und es macht wenig Sinn, sie zu beschreiben. Im Internet finden Sie viele Artikel ĂŒber das Design von einfachsten virtuellen Maschinen.
FĂŒr den Stack meiner virtuellen Maschine reserviere ich normalerweise 1000 Byte, das reicht dicke aus. NatĂŒrlich können tiefe Rekursionen jeden Stack erschöpfen, aber es ist unwahrscheinlich, dass sie ein praktisches Anwendungsgebiet finden.
Der endgĂŒltige Bytecode ist ziemlich kompakt. Zum Beispiel betrĂ€gt der Bytecode zur Berechnung der gleichen FakultĂ€t nur 49 Byte. Dies ist seine visuelle Darstellungsform:

Und das 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 Darstellungsform keinen praktischen Wert hat, bietet die Registerkarte âjavascritâ im Gegensatz dazu 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. Beim Start eines einfachen Szenarios fĂŒr den Blinkgeber erhielt ich auf dem Oszilloskop-Bildschirm einen Rechtecksignal von 47 kHz (bei einer Taktfrequenz des Prozessors von 80 MHz).


Ich halte das fĂŒr ein gutes Ergebnis, immerhin ist diese Geschwindigkeit fast zehnmal schneller als die von und .
Der abschlieĂende Teil
Zusammenfassend möchte ich sagen, dass die Verwendung von Szenarien uns nicht nur ermöglicht, die Logik eines einzelnen GerÀts zu programmieren, sondern auch die Verbindung mehrerer GerÀte zu einem gemeinsamen Mechanismus, wo einige GerÀte das Verhalten anderer beeinflussen.
Ich möchte auch anmerken, dass die gewÀhlte Methode zur Speicherung der Szenarien (direkt in den GerÀten und nicht auf dem Server) das Umschalten bereits funktionierender GerÀte auf einen anderen Server, beispielsweise auf einen Heim-Raspberry, erleichtert; hier .
Das ist alles, ich freue mich auf RatschlÀge und konstruktive Kritik.
Quelle: habr.com
