Wizualne programowanie dla Sonoff Basic

Wizualne programowanie dla Sonoff Basic
Artykuł o tym, jak stworzyć programowalny kontroler logiczny z taniego chińskiego urządzenia. Takie urządzenie znajdzie zastosowanie zarówno w automatyzacji domowej, jak i jako materiały do zajęć praktycznych na lekcjach informatyki w szkołach.
Dla informacji, domyślnie program Sonoff Basic działa z aplikacją mobilną przez chińską usługę chmurową, po proponowanej przeróbce, wszystkie dalsze interakcje z tym urządzeniem będą możliwe w przeglądarce.

Sekcja I. Podłączenie Sonoff do usługi MGT24

Krok 1. Tworzenie panelu sterowania

Zarejestruj się na stronie mgt24 (jeśli jeszcze się nie zarejestrowałeś) i zaloguj się na swoje konto.
LogowanieWizualne programowanie dla Sonoff Basic

Aby stworzyć panel sterowania dla nowego urządzenia, kliknij przycisk „+”.
Przykład tworzenia paneluWizualne programowanie dla Sonoff Basic

Po utworzeniu panelu, pojawi się on na liście twoich paneli.

W zakładce „Instalacja” utworzonego panelu znajdź pola „ID urządzenia” oraz „Klucz autoryzacji”, ta informacja będzie potrzebna do konfiguracji urządzenia Sonoff.
Przykład zakładkiWizualne programowanie dla Sonoff Basic

Krok 2. Flashowanie urządzenia

Za pomocą narzędzia XTCOM_UTIL wgraj firmware PLC Sonoff Basic na urządzenie, do tego potrzebny będzie konwerter USB-TTL. Tutaj instrukcja i film instruktażowy.

Krok 3. Konfiguracja urządzenia

Podłącz zasilanie do urządzenia, po zapaleniu diody LED, naciśnij przycisk i trzymaj go wciśniętego, aż dioda zacznie migać w regularnych odstępach.
W tym momencie pojawi się nowa sieć Wi-Fi o nazwie „PLC Sonoff Basic”, połącz swój komputer z tą siecią.
Rozszyfrowanie wskazań diody LED

Wskazania diody LED
Stan urządzenia

okresowe podwójne mignięcie
brak połączenia z routerem

ciągle świeci
połączenie z routerem nawiązane

okresowe równomierne miganie
tryb punktu dostępu Wi-Fi

wyłączone
brak zasilania

Otwórz przeglądarkę internetową i wprowadź w pasku adresu tekst „192.168.4.1”, przejdź do strony ustawień parametrów sieci urządzenia.

Wypełnij pola w następujący sposób:

  • „Nazwa sieci” i „Hasło” (do połączenia urządzenia z domowym routerem Wi-Fi).
  • „ID urządzenia” i „Klucz autoryzacji” (do autoryzacji urządzenia w usłudze MGT24).

Przykład ustawień parametrów sieci urządzeniaWizualne programowanie dla Sonoff Basic

Zapisz ustawienia i zrestartuj urządzenie.
Tutaj film instruktażowy.

Krok 4. Podłączenie czujników (opcjonalnie)

Aktualne oprogramowanie obsługuje do czterech czujników temperatury ds18b20. Tutaj film instruktażowy znajdziesz instrukcje montażu czujników. Wygląda na to, że ten krok będzie najtrudniejszy, ponieważ wymagać będzie od Ciebie wprawnych rąk i lutownicy.

Rozdział II. Programowanie wizualne

Krok 1. Tworzenie skryptów

Jako środowisko programistyczne używana jest Blockly, środowisko jest łatwe w obsłudze, dzięki czemu do tworzenia prostych skryptów nie musisz być programistą.

Dodałem specjalizowane bloki do zapisu i odczytu parametrów urządzenia. Dostęp do każdego parametru odbywa się za pomocą nazwy. Dla parametrów urządzeń zdalnych stosowane są złożone nazwy: „parametr@urządzenie”.
Rozwijana lista parametrówWizualne programowanie dla Sonoff Basic

Przykład skryptu cyklicznego włączania i wyłączania obciążenia (1Hz):
Wizualne programowanie dla Sonoff Basic

Przykład skryptu synchronizującego pracę dwóch oddzielnych urządzeń. Mianowicie, przekaźnik urządzenia docelowego powtarza działanie przekaźnika urządzenia zdalnego.
Wizualne programowanie dla Sonoff Basic

Skrypt dla termostatu (bez histerezy):
Wizualne programowanie dla Sonoff Basic

Aby tworzyć bardziej skomplikowane skrypty, można używać zmiennych, pętli, funkcji (z argumentami) i innych konstrukcji. Nie będę opisywać tego szczegółowo, w sieci już jest sporo materiałów edukacyjnych o Blockly.

Krok 2. Kolejność wykonania skryptów

Skrypt działa w trybie ciągłym, a gdy osiągnie koniec, uruchamia się ponownie. Istnieją dwa bloki, które mogą tymczasowo wstrzymać działanie skryptu: „delay” i „pause”.
Blok „delay” jest używany do milisekundowych lub mikrosekundowych opóźnień. Ten blok ściśle przestrzega interwału czasowego, blokując działanie całego urządzenia.
Blok „pause” jest używany do opóźnień w sekundach (może być mniej) i nie blokuje wykonania innych procesów w urządzeniu.
Jeśli skrypt zawiera wewnętrzną pętlę nieskończoną, w której nie ma bloku „pause”, interpreter samodzielnie inicjuje małą pauzę.
W przypadku wyczerpania przydzielonego stosu pamięci, interpreter zatrzyma wykonywanie takiego żarłocznego skryptu (bądź ostrożny z funkcjami rekurencyjnymi).

Krok 3. Debugowanie skryptów

Aby debugować już załadowany do urządzenia skrypt, można uruchomić krokową analizę programu. Jest to niezwykle pomocne, gdy zachowanie skryptu okazało się inne, niż zamierzał autor. W takim przypadku analiza pozwala autorowi szybko znaleźć przyczynę problemu i poprawić błąd w skrypcie.

Skrypt obliczenia silni w trybie debugowania:
Wizualne programowanie dla Sonoff Basic

Narzędzie debugowania jest bardzo proste i składa się z trzech głównych przycisków: «start», «krok do przodu» i «stop» (nie zapominajmy także o «wejściu» i «wyjściu» z trybu debugowania). Oprócz krokowej analizy można ustawić punkt przerwania w dowolnym bloku (klikając myszką na blok).
Aby wyświetlić bieżące wartości parametrów (czujniki, przekaźniki), użyj bloku «print».
Tutaj przeglądowy film wideo o używaniu debuggera.

Sekcja dla ciekawskich. Co kryje się pod maską?

Aby skrypty działały na docelowym urządzeniu, stworzono interpreter bajtowego kodu oraz assembler z 38 instrukcjami. W kodzie źródłowym blockly wbudowano specjalizowany generator kodu, który konwertuje wizualne bloki na instrukcje assemblera. Następnie ten program assemblerowy jest przekształcany w bajtowy kod i przekazywany do urządzenia do wykonania.
Architektura tej maszyny wirtualnej jest dosyć prosta i nie ma sensu jej szczegółowo opisywać, w sieci znajdziesz wiele artykułów na temat projektowania najprostszych maszyn wirtualnych.
Pod stos swojej maszyny wirtualnej zazwyczaj przydzielam 1000 bajtów, co jest wystarczające. Oczywiście, głębokie rekurencje mogą wyczerpać każdy stos, ale raczej nie znajdą praktycznego zastosowania.

Końcowy bajtowy kod jest dość zwarty. Na przykład, bajtowy kod obliczenia tej samej silni wynosi zaledwie 49 bajtów. Oto jego wizualna forma przedstawienia:
Wizualne programowanie dla Sonoff Basic

A oto jego program assemblerowy:

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 assemblerowej nie ma żadnej praktycznej wartości, to zakładka «javascript» wręcz przeciwnie, daje bardziej znajomy widok niż wizualne bloki:

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 skryptu migającego, na ekranie oscyloskopu uzyskałem meander 47 kHz (przy częstotliwości taktowania procesora 80 MHz).
Wizualne programowanie dla Sonoff BasicWizualne programowanie dla Sonoff Basic
Uważam, że to niezły wynik, przynajmniej ta prędkość jest prawie dziesięć razy szybsza niż u Lua i Espruino.

Część końcowa

Podsumowując, powiem, że zastosowanie skryptów pozwala nam nie tylko zaprogramować logikę działania pojedynczego urządzenia, ale także daje możliwość powiązania kilku urządzeń w jeden mechanizm, gdzie jedne urządzenia wpływają na zachowanie innych.
Zauważę również, że wybrany sposób przechowywania skryptów (bezpośrednio w urządzeniach, a nie na serwerze) ułatwia przełączanie już działających urządzeń na inny serwer, na przykład na domowy Raspberry, tutaj instrukcja.

Na tym wszystko, będę wdzięczny za wszelkie porady i konstruktywną krytykę.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster