
Článek o tom, jak z levného čínského zařízení vytvořit programovatelný logický kontroler. Takové zařízení najde své uplatnění jak v domácí automatizaci, tak i jako praktická cvičení ve školní informatice.
Pro informaci, standardně aplikace Sonoff Basic funguje s mobilní aplikací prostřednictvím čínské cloudové služby, po navrhované úpravě, veškerá další interakce s tímto zařízením se stane možnou v prohlížeči.
Kapitola I. Připojení Sonoff k službě MGT24
Krok 1. Vytvoření řídicího panelu
Zaregistrujte se na webu (pokud ještě nejste registrováni) a přihlaste se do systému pomocí svého účtu.
Přihlášení do systému
Chcete-li vytvořit řídicí panel pro nové zařízení, stiskněte tlačítko „+“.
Příklad vytvoření panelu
Jakmile bude panel vytvořen, zobrazí se v seznamu vašich panelů.
Na záložce „Instalace“ vytvořeného panelu naleznete pole „ID zařízení“ a „Klíč autorizace“, tato informace bude dále potřebná při nastavování zařízení Sonoff.
Příklad záložky
Krok 2. Přeflashování zařízení
Pomocí nástroje nahrát firmware do zařízení, k tomu budete potřebovat USB-TTL převodník. Zde a .
Krok 3. Nastavení zařízení
Přiveďte zařízení pod napětí, jakmile se rozsvítí LED, stiskněte tlačítko a držte je stisknuté, dokud LED nezačne pravidelně blikat.
V tuto chvíli se objeví nová wi-fi síť s názvem „PLC Sonoff Basic“, připojte svůj počítač k této síti.
Výklad LED indikace
LED indikace
Stav zařízení
pravidelné dvojité blikaní
žádné připojení k routeru
nepřetržitě svítí
je zajištěno připojení k routeru
pravidelné rovnoměrné blikaní
režim wi-fi hotspotu
vypnuto
žádné napájení
Otevřete internetový prohlížeč a do adresního řádku zadejte text „192.168.4.1“, přejděte na stránku nastavení parametrů sítě zařízení.
Vyplňte pole následujícím způsobem:
- „Název sítě“ a „Heslo“ (pro propojení zařízení s domácím wi-fi routerem).
- „ID zařízení“ a „Klíč autorizace“ (pro autorizaci zařízení na službě MGT24).
Příklad nastavení parametrů sítě zařízení
Uložte nastavení a restartujte zařízení.
Zde .
Krok 4. Připojení senzorů (volitelně)
Aktuální firmware podporuje až čtyři teplotní senzory ds18b20. Zde je instalace senzorů. Tento krok bude pravděpodobně nejtěžší, protože vyžaduje vaše zručné ruce a páječku.
Část II. Vizuální programování
Krok 1. Tvorba scénářů
Jako programovací prostředí se používá , což je uživatelsky přívětivé prostředí, takže pro vytváření jednoduchých scénářů není nutné být programátorem.
Přidal jsem specializované bloky pro zapisování a čtení parametrů zařízení. Přístup k jakémukoli parametru se provádí podle názvu. Pro parametry vzdálených zařízení se používají složené názvy: „parametr@zařízení“.
Rozbalovací seznam parametrů
Příklad scénáře cyklického zapínání a vypínání zátěže (1 Hz):

Příklad scénáře synchronizace dvou samostatných zařízení. Konkrétně relé cílového zařízení opakuje činnost relé vzdáleného zařízení.

Scénář pro termostat (bez hystereze):

Pro vytváření složitějších scénářů lze využít proměnné, smyčky, funkce (s argumenty) a další konstrukce. Nebudu zde vše podrobně rozepisovat, na internetu už je dost .
Krok 2. Pořadí provádění scénářů
Scénář běží v nepřetržitém režimu a jakmile dosáhne svého konce, spouští se znovu. Existují však dva bloky, které mohou dočasně pozastavit činnost scénáře, „delay“ a „pause“.
Blok „delay“ se používá pro milisekundové nebo mikrosekundové prodlevy. Tento blok přesně dodržuje časový interval, blokuje činnost celého zařízení.
Blok „pause“ se používá pro sekundy (může být i méně) prodlevy a neblokuje provádění jiných procesů v zařízení.
Pokud scénář obsahuje nekonečnou smyčku, v jejímž těle není „pause“, interpretr sám zahájí malou pauzu.
V případě vyčerpání přidělené paměťové zásobníku zastaví interpretr vykonávání takového žravého scénáře (buďte opatrní s rekurzivními funkcemi).
Krok 3. Ladění scénářů
Pro ladění již nahraného skriptu do zařízení můžete spustit program krok po kroku. To je velmi užitečné, když chování skriptu není takové, jak zamýšlel autor. V takovém případě umožňuje sledování autorovi rychle najít zdroj problému a opravit chybu ve skriptu.
Skripty pro výpočet faktoriálu v režimu ladění:

Nástroj pro ladění je velmi jednoduchý a skládá se ze tří hlavních tlačítek: „start“, „krok vpřed“ a „stop“ (nezapomeňme ani na „vstup“ a „výstup“ z režimu ladění). Kromě krokového sledování můžete nastavit bod zadržení na jakémkoli bloku (kliknutím myší na blok).
Chcete-li na monitoru zobrazit aktuální hodnoty parametrů (senzory, relé), použijte blok „print“.
Zde o používání debuggeru.
Sekce pro zvědavé. A co se skrývá uvnitř?
Aby skripty fungovaly na cílovém zařízení, byl vyvinut interpret bajtového kódu a assembler se 38 instrukcemi. Do zdrojového kódu blockly byl integrován specializovaný generátor kódu, který převádí vizuální bloky na assemblerové instrukce. Tato assemblerová program pak je převedena na bajtový kód a předána do zařízení k provedení.
Architektura této virtuální mašiny je poměrně jednoduchá a nemá smysl ji zvlášť popisovat, na internetu najdete mnoho článků o návrhu nejjednodušších virtuálních strojů.
Pro zásobník své virtuální mašiny obvykle vyčleňuji 1000 bajtů, což stačí s rezervou. Samozřejmě, že hluboké rekurze mohou vyčerpat jakýkoli zásobník, ale je nepravděpodobné, že by našly praktické uplatnění.
Výsledný bajtový kód je poměrně kompaktní. Například bajtový kód pro výpočet téhož faktoriálu tvoří pouze 49 bajtů. Tady je jeho vizuální forma:

A to je jeho assemblerový program:
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
Pokud assemblerová forma nemá žádnou praktickou hodnotu, pak naopak záložka „javascrit“ nabízí obvyklý pohled, na rozdíl od vizuálních bloků:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Pokud jde o výkon. Při spuštění nejjednoduššího scénáře blikání jsem na osciloskopu dostal meandr 47 kHz (při taktovací frekvenci procesoru 80 MHz).


Považuji to za slušný výsledek, alespoň tato rychlost je téměř desetkrát rychlejší než u a .
Závěrečná část
Na závěr bych řekl, že použití skriptů nám umožňuje nejen naprogramovat logiku práce jednotlivého zařízení, ale také propojit několik zařízení do jednoho mechanismu, kde jedno zařízení ovlivňuje chování druhého.
Také bych podotkl, že zvolený způsob ukládání skriptů (přímo v zařízeních, nikoli na serveru) usnadňuje přepínání již fungujících zařízení na jiný server, například na domácí Raspberry, zde .
To je vše, budu rád za jakékoli rady a konstrukční kritiku.
Zdroj: habr.com
