
Artykuł o tym, jak stworzyć programowalny sterownik logiczny z taniego chińskiego urządzenia. Urządzenie to znajdzie zastosowanie zarówno w automatyce domowej, jak i jako praktyczna lekcja informatyki w szkole.
Dla porównania, domyślnie program Sonoff Basic współpracuje z aplikacją mobilną za pośrednictwem chińskiej usługi chmurowej. Po proponowanej modyfikacji wszelka dalsza interakcja z tym urządzeniem będzie możliwa w przeglądarce.
Rozdział I. Podłączenie Sonoff do usługi MGT24
Krok 1: Utwórz Panel sterowania
Zarejestruj się na stronie (jeśli jeszcze nie jesteś zarejestrowany) i zaloguj się na swoje konto.
Zaloguj sie
Aby utworzyć panel sterowania dla nowego urządzenia, kliknij przycisk „+”.
Przykład tworzenia panelu
Po utworzeniu panelu pojawi się on na liście paneli.
W zakładce „Instalacja” utworzonego panelu znajdź pola „Identyfikator urządzenia” i „Klucz autoryzacyjny”; później, informacje te będą potrzebne podczas konfiguracji urządzenia Sonoff.
Przykład zakładki
Krok 2. Ponowne flashowanie urządzenia
Korzystanie z narzędzia pobierz oprogramowanie układowe do urządzenia, w tym celu potrzebny będzie konwerter USB-TTL. Tutaj и .
Krok 3. Konfiguracja urządzenia
Podłącz urządzenie do zasilania, po zaświeceniu się diody LED naciśnij przycisk i przytrzymaj go, aż dioda LED zacznie równomiernie migać.
W tym momencie pojawi się nowa sieć Wi-Fi o nazwie „PLC Sonoff Basic”, podłącz swój komputer do tej sieci.
Dekodowanie wskaźnika LED
Sygnalizacja LED
Status urządzenia
okresowe podwójne mruganie
brak połączenia z routerem
świeci nieprzerwanie
połączenie z routerem nawiązane
okresowe, równomierne mruganie
Tryb hotspotu Wi-Fi
zgaszony
brak zasilania
Otwórz przeglądarkę internetową i wpisz „192.168.4.1” w pasku adresu, przejdź do strony ustawień sieciowych urządzenia.
Wypełnij pola w następujący sposób:
- „Nazwa sieci” i „Hasło” (aby połączyć urządzenie z domowym routerem Wi-Fi).
- „Identyfikator urządzenia” i „Klucz autoryzacyjny” (do autoryzacji urządzenia w serwisie MGT24).
Przykład konfiguracji parametrów sieciowych urządzenia
Zapisz ustawienia i uruchom ponownie urządzenie.
Tutaj .
Krok 4. Podłączanie czujników (opcjonalnie)
Obecne oprogramowanie sprzętowe obsługuje do czterech czujników temperatury ds18b20. Tutaj do montażu czujników. Ten krok będzie prawdopodobnie najtrudniejszy, ponieważ wymaga pewnych ruchów rąk i lutownicy.
Rozdział II. Programowanie wizualne
Krok 1: Utwórz skrypty
Użyte środowisko programistyczne to Środowisko jest łatwe do nauczenia, więc nie musisz być programistą, aby tworzyć proste skrypty.
Dodałem specjalistyczne bloki do zapisu i odczytu parametrów urządzenia. Do każdego parametru można uzyskać dostęp według nazwy. W przypadku parametrów urządzeń zdalnych używane są nazwy złożone: „parametr@urządzenie”.
Lista rozwijana parametrów
Przykład scenariusza cyklicznego włączania i wyłączania obciążenia (1 Hz):

Przykład skryptu synchronizującego działanie dwóch oddzielnych urządzeń. Mianowicie, przekaźnik urządzenia docelowego replikuje działanie przekaźnika urządzenia zdalnego.

Skrypt dla termostatu (bez histerezy):

Aby tworzyć bardziej złożone skrypty, możesz używać zmiennych, pętli, funkcji (z argumentami) i innych konstrukcji. Nie będę tego tutaj opisywał szczegółowo, jest tego już w internecie sporo .
Krok 2. Kolejność wykonywania skryptu
Skrypt działa w sposób ciągły i po osiągnięciu końca zaczyna się od nowa. Istnieją dwa bloki, które mogą tymczasowo wstrzymać skrypt: „delay” i „pause”.
Blok „delay” używany jest do opóźnień milisekundowych lub mikrosekundowych. Blokada ta ściśle utrzymuje odstęp czasowy, blokując działanie całego urządzenia.
Blok „pauzy” używany jest w przypadku opóźnień trwających jedną sekundę (lub krócej) i nie blokuje wykonywania innych procesów w urządzeniu.
Jeśli skrypt zawiera w sobie pętlę nieskończoną i nie ma w jego treści żadnej „pauzy”, interpreter automatycznie zainicjuje krótką pauzę.
Jeśli przydzielona pamięć stosu zostanie wyczerpana, interpreter zaprzestanie wykonywania tak żarłocznego skryptu (należy zachować ostrożność w przypadku funkcji rekurencyjnych).
Krok 3: Debugowanie skryptów
Aby debugować skrypt już załadowany do urządzenia, można uruchomić śledzenie programu krok po kroku. Może to być niezwykle przydatne, gdy zachowanie skryptu okazuje się różnić od zamierzeń autora. W takim przypadku śledzenie pozwala autorowi szybko znaleźć źródło problemu i naprawić błąd w skrypcie.
Skrypt do obliczania silni w trybie debugowania:

Narzędzie debugowania jest bardzo proste i składa się z trzech głównych przycisków: „start”, „krok do przodu” i „stop” (nie zapominajmy o „wejściu” i „wyjściu” z trybu debugowania). Oprócz śledzenia krok po kroku możesz ustawić punkt przerwania w dowolnym bloku (klikając myszką nad blokiem).
Aby wyświetlić na monitorze aktualne wartości parametrów (czujników, przekaźników) należy użyć bloku „print”.
Tutaj o korzystaniu z debugera.
Sekcja dla ciekawskich. Co kryje się pod maską?
Aby skrypty mogły działać na urządzeniu docelowym, opracowano interpreter bajtkodu i asembler składający się z 38 instrukcji. Kod źródłowy Blockly ma wbudowany specjalistyczny generator kodu, który konwertuje bloki wizualne na instrukcje języka assembler. Następnie program asemblera jest konwertowany na kod bajtowy i wysyłany do urządzenia w celu wykonania.
Architektura tej maszyny wirtualnej jest dość prosta i nie ma sensu jej opisywać; w Internecie znajdziesz wiele artykułów na temat projektowania prostych maszyn wirtualnych.
Zazwyczaj przeznaczam na stos mojej maszyny wirtualnej 1000 bajtów, co w zupełności wystarcza. Oczywiście, głęboka rekurencja może wyczerpać każdy stos, ale mało prawdopodobne jest, aby znalazła jakiekolwiek praktyczne zastosowanie.
Powstały kod bajtowy jest dość zwarty. Na przykład kod bajtowy służący do obliczenia tej samej silni ma tylko 49 bajtów. Oto jego wizualna reprezentacja:

A oto jego program asemblerowy:
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
Jeśli forma prezentacji w asemblerze nie ma żadnej wartości praktycznej, to zakładka „javascrit” wręcz przeciwnie, daje widok bardziej znajomy niż bloki wizualne:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Jeśli chodzi o wydajność. Podczas uruchamiania najprostszego scenariusza z migaczem na ekranie oscyloskopu otrzymałem meander o częstotliwości 47 kHz (przy częstotliwości taktowania procesora 80 MHz).


Myślę, że to dobry wynik, przynajmniej ta prędkość jest prawie dziesięć razy szybsza niż и .
Ostatnia część
Podsumowując powiem, że wykorzystanie scenariuszy pozwala nam nie tylko zaprogramować logikę działania oddzielnego urządzenia, ale także umożliwia połączenie kilku urządzeń w jeden mechanizm, w którym jedne urządzenia wpływają na zachowanie innych.
Chciałbym również zauważyć, że wybrany sposób przechowywania skryptów (bezpośrednio w samych urządzeniach, a nie na serwerze) ułatwia przenoszenie już działających urządzeń na inny serwer, np. na domowego Raspberry, tutaj .
To na razie tyle. Chętnie wysłucham rad i konstruktywnej krytyki.
Źródło: www.habr.com
