
Cikk arról, hogyan alakíthatunk egy olcsó kínai eszközt programozható logikai vezérlővé. Az ilyen eszközök alkalmazhatóak otthoni automatizálásban és iskolai informatika gyakorlati órák során.
A tájékoztatás kedvéért, alapértelmezés szerint a Sonoff Basic program mobilalkalmazáson keresztül működik egy kínai felhőszolgáltatással, az ajánlott átalakítás után minden további interakció ezzel az eszközzel böngészőn keresztül válik lehetővé.
I. rész. A Sonoff csatlakoztatása az MGT24 szolgáltatáshoz
1. lépés. Vezérlőpanel létrehozása
Regisztráljon a következő weboldalon (ha még nem regisztrált) és lépjen be a fiókjába.
Bejelentkezés
Új eszközhöz vezérlőpanel létrehozásához kattintson a „+” gombra.
Példa a panel létrehozására
Miután a panel létrejött, megjelenik a paneleinek listájában.
A létrehozott panel „Telepítés” fülén találja az „Eszköz ID” és „Hitelesítési kulcs” mezőket, ezek az információk szükségesek a Sonoff eszköz beállításához.
A fül példája
2. lépés. Az eszköz újraprogramozása
Az segítségével töltse fel a firmware-t az eszközre, ehhez szüksége lesz egy USB-TTL átalakítóra. Itt és .
3. lépés. Az eszköz beállítása
Kapcsolja be az eszközt, miután a LED világítani kezd, nyomja meg a gombot, és tartsa lenyomva, amíg a LED periodikusan egyenletesen villogni nem kezd.
Ekkor megjelenik egy új wi-fi hálózat, amelynek neve „PLC Sonoff Basic”, csatlakoztassa a számítógépét ehhez a hálózathoz.
A LED jelzőfény dekódolása
LED jelzőfény
Az eszköz állapota
időszakos dupla villogás
nincs kapcsolat a routerrel
folyamatos fény
kapcsolat a routerrel
időszakos egyenletes villogás
wi-fi hozzáférési pont üzemmód
lekapcsolva
nincs áram
Nyisson meg egy böngészőt, és gépelje be a címsorba a következő szöveget: „192.168.4.1”, lépjen a készülék hálózati paramétereinek beállító oldalára.
Töltse ki a mezőket a következőképpen:
- „Hálózat neve” és „Jelszó” (az eszköz otthoni wi-fi routerhez való csatlakoztatásához).
- „Eszköz ID” és „Hitelesítési kulcs” (az eszköz hitelesítéséhez az MGT24 szolgáltatásnál).
A készülék hálózati paramétereinek beállításának példája
Mentse el a beállításokat, és indítsa újra az eszközt.
Itt .
4. lépés. Szenzorok csatlakoztatása (opcionális)
A jelenlegi firmware legfeljebb négy ds18b20 hőmérséklet-szenzort támogat. Itt tájékoztatás található a szenzorok telepítéséről. Nyilvánvaló, hogy ez a lépés lesz a legnehezebb, mivel közvetlen kézügyességet és forrasztópáka használatát igényli.
II. rész. Vizuális programozás
1. lépés. Forgatókönyvek létrehozása
A programozási környezet , a környezet könnyen elsajátítható, így egyszerű forgatókönyvek létrehozásához nem szükséges programozónak lenni.
Specializált blokkokat adtam hozzá az eszköz paramétereinek írásához és olvasásához. Bármely paraméter elérése a nevének megfelelően történik. A távoli eszközök paramétereinél összetett neveket használunk: „paraméter@eszköz”.
Paraméterek legördülő listája
Példa egy ciklikus terhelés be- és kikapcsolására (1Hz):

Példa két különböző eszköz munkájának szinkronizálására. A céleszköz reléje megismétli a távoli eszköz reléjének munkáját.

Forgatókönyv termosztátra (histerézis nélkül):

Bonyolultabb forgatókönyvek létrehozásához változókat, ciklusokat, funkciókat (argumentumokkal) és egyéb konstrukciókat lehet használni. Ezt a részletet nem szeretném itt részletezni, az interneten már van elég sok .
2. lépés. Forgatókönyvek végrehajtási sorrendje
A forgatókönyv folyamatosan működik, és amint elérte a végét, újraindul. Ebben a folyamatban két blokk van, amely ideiglenesen le tudja állítani a forgatókönyv működését: a „delay” és a „pause”.
A „delay” blokk milliszekundumos vagy mikrosekundumos késleltetésekhez használható. Ez a blokk szigorúan betartja az időintervallumot, blokkolva ezzel az egész eszköz működését.
A „pause” blokk másodperces (vagy kevesebb) késleltetésekhez használható, és nem blokkolja a többi folyamat végrehajtását az eszközben.
Ha a forgatókönyv végtelen ciklust tartalmaz, amelyben nincs „pause”, az értelmező magától indít egy kis szünetet.
Ha a kiosztott memória stack kimerül, az értelmező leállítja az ilyen erőforrást igénylő forgatókönyv végrehajtását (legyetek óvatosak a rekurzív funkciókkal).
3. lépés. Forgatókönyvek hibakeresése
A már a készülékbe betöltött szkriptek hibakereséséhez lépésről lépésre történő nyomkövetést indíthat. Ez rendkívül hasznos lehet, amikor a szkript viselkedése nem olyan, mint amilyennek a szerző elképzelte. Ebben az esetben a nyomkövetés lehetővé teszi a szerző számára, hogy gyorsan megtalálja a hiba forrását és kijavítsa a szkriptben a problémát.
A faktoriális számítás szkriptje hibakeresési módban:

A hibakereső eszköz nagyon egyszerű és három fő gombból áll: „indítás”, „egyetlen lépés előre” és „megállítás” (ne felejtsük el a hibakeresési módba való „belépést” és „kilépést” sem). A lépésről lépésre történő nyomkövetés mellett bármely blokkra beállíthatunk egy töréspontot (az adott blokkra kattintva).
A monitorra a jelenlegi paraméterértékek (érzékelők, relék) kiírásához használja a „print” blokkot.
Itt a hibakeresőről.
Rész az érdeklődőknek. Mi rejlik a motorháztető alatt?
Ahhoz, hogy a szkriptek működjenek a célkészüléken, 38 utasításból álló bájt-kódértelmezőt és assembler-t fejlesztettek ki. A blockly forráskódjába beépítettek egy speciális kódgenerátort, amely a vizuális blokkokat assembler utasításokká alakítja. Ezt követően ez az assembler program bájt-kóddá alakul, és végrehajtásra átkerül a készülékbe.
Ennek a virtuális gépnek az architektúrája meglehetősen egyszerű, és nem érdemes különösebben leírni; az interneten sok cikket talál, amelyek az egyszerű virtuális gépek tervezéséről szólnak.
A virtuális gépem számára általában 1000 bájtot osztok ki a veremhez, ez bőségesen elegendő. Természetesen a mély rekurziók bármilyen veremet kimeríthetnek, de valószínűleg nem található számottevő gyakorlati alkalmazásuk.
A végső bájt-kód meglehetősen tömör. Például az ugyanannak a faktoriálisnak a bájt-kódja mindössze 49 bájtot tesz ki. Íme a vizuális megjelenítési formája:

Ez pedig az assembler programja:
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
Ha az assembler formátum nem jár gyakorlati előnyökkel, akkor a „javascript” fül éppen ellenkezőleg, ismerős látványt nyújt a vizuális blokkok helyett:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Ami a teljesítményt illeti. A legegyszerűbb villogó szkript futtatásakor a oszcilloszkóp képernyőjén 47 kHz-es meandert kaptam (80 MHz-es órajellel).


Jónak tartom az eredményt, legalábbis ez a sebesség majdnem tízszer gyorsabb, mint a és .
Záró rész
Összegzésül azt mondom, hogy a szkriptek használata lehetővé teszi számunkra, hogy ne csak egyetlen eszköz működésének logikáját programozzuk, hanem lehetőséget ad arra is, hogy több eszközt összekapcsoljunk egy egységes mechanizmusba, ahol az egyik eszköz befolyásolja a másik működését.
Megjegyzem továbbá, hogy a szkriptek tárolásának kiválasztott módja (közvetlenül magukban az eszközökben, nem a szerveren) megkönnyíti a már működő eszközök átkapcsolását egy másik szerverre, például a házi Raspberry-re, itt. .
Ezzel vége, örömmel várom a tanácsokat és a konstruktív kritikát.
Forrás: habr.com
