Vizualizované programování pro Sonoff Basic

Vizualizované programování pro Sonoff Basic
Č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 mgt24 (pokud ještě nejste registrováni) a přihlaste se do systému pomocí svého účtu.
Přihlášení do systémuVizualizované programování pro Sonoff Basic

Chcete-li vytvořit řídicí panel pro nové zařízení, stiskněte tlačítko „+“.
Příklad vytvoření paneluVizualizované programování pro Sonoff Basic

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žkyVizualizované programování pro Sonoff Basic

Krok 2. Přeflashování zařízení

Pomocí nástroje XTCOM_UTIL nahrát firmware PLC Sonoff Basic do zařízení, k tomu budete potřebovat USB-TTL převodník. Zde příručka a video návod.

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íVizualizované programování pro Sonoff Basic

Uložte nastavení a restartujte zařízení.
Zde video návod.

Krok 4. Připojení senzorů (volitelně)

Aktuální firmware podporuje až čtyři teplotní senzory ds18b20. Zde video návod 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á Blockly, 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ůVizualizované programování pro Sonoff Basic

Příklad scénáře cyklického zapínání a vypínání zátěže (1 Hz):
Vizualizované programování pro Sonoff Basic

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í.
Vizualizované programování pro Sonoff Basic

Scénář pro termostat (bez hystereze):
Vizualizované programování pro Sonoff Basic

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 výukového materiálu o Blockly.

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í:
Vizualizované programování pro Sonoff Basic

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 přehledový videoklip 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:
Vizualizované programování pro Sonoff Basic

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).
Vizualizované programování pro Sonoff BasicVizualizované programování pro Sonoff Basic
Považuji to za slušný výsledek, alespoň tato rychlost je téměř desetkrát rychlejší než u Lua a Espruino.

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 příručka.

To je vše, budu rád za jakékoli rady a konstrukční kritiku.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster