Artykuł o tym jak stworzyć programowalny sterownik logiczny z taniego chińskiego urządzenia. Takie urządzenie znajdzie zastosowanie zarówno w automatyce domowej, jak i jako zajęcia praktyczne z informatyki szkolnej.
Dla porównania program Sonoff Basic domyślnie współpracuje z aplikacją mobilną poprzez chińską usługę chmurową, 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
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 „Konfiguracja” utworzonego panelu znajdź pola „Identyfikator urządzenia” i „Klucz autoryzacyjny”, w przyszłości informacja ta będzie wymagana podczas konfiguracji urządzenia Sonoff.
Przykład zakładki
Krok 2. Zreflashuj urządzenie
Korzystanie z narzędzia
Krok 3. Konfiguracja urządzenia
Podłącz urządzenie do zasilania, po zaświeceniu się diody naciśnij przycisk i przytrzymaj go, aż dioda zacznie okresowo i 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.
Objaśnienie sygnalizacji LED
Sygnalizacja LED
Status urządzenia
okresowe podwójne miganie
brak połączenia z routerem
świeci nieprzerwanie
nawiązane połączenie z routerem
okresowe jednolite miganie
tryb punktu dostępu Wi-Fi
zgasł
Brak zasilania
Otwórz przeglądarkę internetową i wpisz w pasku adresu tekst „192.168.4.1”, przejdź do strony ustawień 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 ustawienia parametrów sieciowych urządzenia
Zapisz ustawienia i uruchom ponownie urządzenie.
Tutaj
Krok 4. Podłączenie czujników (opcjonalnie)
Obecne oprogramowanie obsługuje do czterech czujników temperatury ds18b20. Tutaj
Sekcja II. Programowanie wizualne
Krok 1: Utwórz skrypty
Używany jako środowisko programistyczne
Dodałem specjalizowane bloki do zapisu i odczytu parametrów urządzenia. Dostęp do dowolnego parametru można uzyskać po nazwie. Dla parametrów urządzeń zdalnych stosowane są nazwy złożone: „parametr@urządzenie”.
Rozwijana lista opcji
Przykładowy scenariusz cyklicznego włączania i wyłączania obciążenia (1 Hz):
Przykład skryptu synchronizującego pracę dwóch odrębnych urządzeń. Mianowicie przekaźnik urządzenia docelowego powtarza działanie przekaźnika urządzenia zdalnego.
Scenariusz dla termostatu (bez histerezy):
Do tworzenia bardziej złożonych skryptów można używać zmiennych, pętli, funkcji (z argumentami) i innych konstrukcji. Nie będę tutaj opisywać tego wszystkiego szczegółowo, w sieci jest już tego całkiem sporo.
Krok 2: Kolejność skryptów
Skrypt działa w sposób ciągły i gdy tylko dobiegnie końca, rozpoczyna się od nowa. W tym przypadku istnieją dwa bloki, które mogą tymczasowo wstrzymać skrypt: „opóźnienie” i „wstrzymanie”.
Blok „delay” służy do opóźnień milisekundowych lub mikrosekundowych. Blokada ta ściśle utrzymuje odstęp czasowy, blokując pracę całego urządzenia.
Blokada „pauza” stosowana jest w przypadku opóźnień sekundowych (lub mniejszych) i nie blokuje wykonywania innych procesów w urządzeniu.
Jeżeli sam skrypt zawiera nieskończoną pętlę, której treść nie zawiera „pauzy”, interpreter samodzielnie inicjuje krótką pauzę.
Jeśli przydzielony stos pamięci zostanie wyczerpany, interpreter przestanie wykonywać tak energochłonny skrypt (uważaj na funkcje rekurencyjne).
Krok 3: Debugowanie skryptów
Aby zdebugować skrypt, który został już załadowany do urządzenia, możesz krok po kroku uruchomić śledzenie programu. Może to być niezwykle przydatne, gdy zachowanie skryptu okazało się odmienne od zamierzeń autora. W takim przypadku śledzenie pozwala autorowi szybko znaleźć źródło problemu i poprawić błąd w skrypcie.
Scenariusz obliczenia silni w trybie debugowania:
Narzędzie do debugowania jest bardzo proste i składa się z trzech głównych przycisków: „start”, „jeden krok do przodu” i „stop” (nie zapominajmy też o trybie debugowania „wejdź” i „wyjdź”). Oprócz śledzenia krok po kroku możesz ustawić punkt przerwania w dowolnym bloku (klikając na blok).
Aby wyświetlić aktualne wartości parametrów (czujników, przekaźników) na monitorze należy skorzystać z bloku „drukuj”.
Tutaj
Sekcja dla ciekawskich. Co kryje się pod maską?
Aby skrypty mogły działać na urządzeniu docelowym, opracowano interpreter kodu bajtowego i asembler z 38 instrukcjami. Kod źródłowy Blockly ma wbudowany wyspecjalizowany generator kodu, który konwertuje bloki wizualne na instrukcje montażu. Następnie ten program asemblera jest konwertowany na kod bajtowy i przesyłany do urządzenia w celu wykonania.
Architektura tej maszyny wirtualnej jest dość prosta i nie ma sensu jej opisywać, w Internecie można znaleźć wiele artykułów na temat projektowania najprostszych maszyn wirtualnych.
Zwykle przydzielam 1000 bajtów na stos mojej maszyny wirtualnej, co wystarczy. Oczywiście głębokie rekurencje mogą wyczerpać dowolny stos, ale jest mało prawdopodobne, że będą miały jakiekolwiek praktyczne zastosowanie.
Wynikowy kod bajtowy jest dość zwarty. Na przykład kod bajtowy do obliczenia tej samej silni ma tylko 49 bajtów. Oto jego forma wizualna:
A to jest jego program w asemblerze:
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 reprezentacji w montażu nie ma żadnej praktycznej wartości, wówczas zakładka „javascrit” przeciwnie, daje bardziej znajomy wygląd 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ść. Kiedy uruchomiłem najprostszy skrypt flashera, na ekranie oscyloskopu otrzymałem falę prostokątną o częstotliwości 47 kHz (przy taktowaniu procesora 80 MHz).
Myślę, że to dobry wynik, przynajmniej ta prędkość jest prawie dziesięciokrotnie większa niż
Ostatnia część
Podsumowując, powiem, że zastosowanie skryptów pozwala nie tylko zaprogramować logikę działania osobnego urządzenia, ale także daje możliwość połączenia kilku urządzeń w jeden mechanizm, gdzie jedne urządzenia wpływają na zachowanie innych.
Zaznaczam też, że wybrany sposób przechowywania skryptów (bezpośrednio w samych urządzeniach, a nie na serwerze) ułatwia przełączenie już działających urządzeń na inny serwer, np. na domową Raspberry, tutaj
To wszystko, chętnie wysłucham rad i konstruktywnej krytyki.
Źródło: www.habr.com