sobota, 13 maja 2017

BLYNK - nowy fascynujący świat elektronika - cz.1

Jak tanio i szybko tworzyć złożone projekty elektroniczne


BLYNKa już u mnie nie ma - Jest VIRTUINO ale wszystko co napisałem poniżej jest aktualne - tylko platforma uległa zmianie.

Virtuino stał się podstawowym elementem komunikacyjnym mikroprocesora z operatorem (z mną). A bardziej precyzyjnie - dowolnym zestawem wirtualnych elementów dobieranych według potrzeb właśnie tworzonego projektu. Bardzo pomagają mi w tym autorzy programu dodając do aplikacji wciąż nowe widgety i poszerzając funkcje już istniejących. Warto więc  zastanowić się jak je wykorzystać przy konstruowaniu kolejnych elektronicznych układów. I w czym są one lepsze od ich, kupionych w sklepie, tradycyjnych odpowiedników.

 

Dlaczego uważam BLYNKA za fantastyczne narzędzie dla każdego elektronika?

  • Jestem elektronikiem a nie programistą. I tak już chyba zostanie. Konieczność programowania wynika li tylko ze stosowania w projektach mikroprocesorów. Teoretycznie da się zbudować identyczną funkcjonalność bez procesora - tylko po co? Jeśli kosztuje 10 zł i zastępuje dziesiątki, setki elementów dyskretnych i jest wielkości znaczka. Więc programowanie mam niestety w pakiecie.
  • Jeśli już muszę programować to niech to będzie maksymalnie proste i szybkie - stąd nieustający podziw dla twórców projektu Arduino i czerpanie garściami z tego co zostało zrobione przez setki tysięcy fanów tego systemu.
  • Jeśli już "programuję" (cudzysłów to ukłon w stronę PP) to chciałbym uzyskać łatwy i szybki dostęp do świata w którym elektronicy już dawno zostali sprowadzeni do roli odźwiernych a bezapelacyjny prym wiodą w nim Panowie Programiści (PP) -  świata Internetu, komputerów i smartfonów. A że tak jest wystarczy popatrzeć na młodych zdolnych - na dziesięciu umiejących programować w C++, Java, Phytonie i innych nieznanych mi językach, przypada JEDEN (optymistycznie) umiejący trzymać lutownicę i rozumiejący zasadę działania tranzystora. 
I taki dostęp do wirtualnego świata w sposób nieprawdopodobnie prosty, szybki i przyjazny zapewnia BLYNK. Od tego momentu mój procesor nie jest już samotną wyspą a staje się jednym z miliarda elementów połączonych wspólnym systemem nerwowym - Internetem. Jaką to ma dzisiaj wartość doświadczył każdy użytkownik komputera, któremu choć na chwilę odcięto dostęp do globalnej sieci.
Dodatkowo Paweł i Dmitry przenieśli sporą liczbę rzeczywistych elementów elektronicznych i programowych na poziom aplikacji w telefonie/tablecie. Uprościło to znakomicie konstrukcje elektronicznych projektów i zwiększyło ich elastyczność i mobilność. Pojawiły się także nowe możliwości, o których można było tylko marzyć patrząc na zamontowany w naszym układzie siedmiosegmentowy wyświetlacz LED lub obrotowy potencjometr.

Moim zdaniem BLYNK to wyznacznik nowego kierunku w elektronice jutra. To przedsmak rewolucji podobnej do tej jaką przeszła elektronika od narodzin pierwszego mikroprocesora w latach siedemdziesiątych. Dokąd nas to zaprowadzi? Nie mam pojęcia. Ale warto pilnie śledzić nowe trendy i w miarę możliwości wykorzystywać je do własnych celów.

Popatrzmy bliżej co oferuje nam już dzisiaj BLYNK byśmy mogli łatwiej i przyjemniej obsługiwać nasze mikroprocesorowe urządzenia. W kolejnych wpisach postaram się przedstawić możliwości BLYNK w obsłudze wejściowych i wyjściowych sygnałów sterujących realizujących zadania bez udziału człowieka.

UWAGA:  Poniższe obserwacje i wnioski odnoszą się do fazy tworzenia projektów elektronicznych i układów prototypowych. Dla konstrukcji docelowych może to wyglądać nieco inaczej. Kolejność opisu nieprzypadkowa - uwzględnia częstotliwość stosowania poszczególnych widgetów w moich projektach.

LED (cena 100 pkt.)

 

Najpopularniejszy ze wskaźników w elektronice nie jest wcale najpopularniejszym w moich aplikacjach BLYNK. Po pierwsze pojedyncze LEDy wciąż szwendają się na płytce gdzieś pomiędzy opornikami i kondensatorami. Po drugie spora liczba widgetów udostępnia funkcję sygnalizacyjną i powielanie jej dodatkowym widgetem wirtualnego LEDa jest zbędne i zajmuje bezcenne miejsce na ekranie telefonu.

Również od niedawna wirtualny LED (vLED jak go nazywam) oferuje opcję zdalnej zmiany koloru i opisu. Wcześniej kolor był ustawiany na sztywno w aplikacji telefonu (do wyboru tylko 8 kolorów) a zdalnie z programu  można było ustawić jedynie jasność świecenia. Teraz zarówno kolor jak i opis LEDa można dowolnie zaprogramować wywołaniem określonej funkcji w mikroprocesorze. Ale funkcja ta dostępna jest już dla większości widgetów więc atrakcyjność vLEDów jako wskaźników jest niewielka.


 Przycisk, klawisz BUTTON (cena 200 pkt.)

 

 Bez wątpienia jest to najbardziej popularny widget. Ale w odróżnieniu od większości realnych przycisków jest elementem dwukierunkowym to znaczy wysyła informację zał/wył i umożliwia wyświetlanie informacji odebranych z programu. I żeby było jeszcze zabawniej  - możliwości odbieranych informacji  jest więcej niż wysyłanych!
Przycisk można zaprogramować jako mono lub bistabilny (niestety brak ciągle funkcji czasowych - opóźnienia załączenia lub wyłączenia). Ekranowy klawisz pozwala nam zmienić kształt co daje dodatkowe możliwości aranżacji ekranu naszej aplikacji. Kolejna różnica do hardwerowych przycisków - oprócz tradycyjnego zadawania stanu zał/wył czyli 0/1 klawisz może służyć jako zadajnik dowolnej wielkości ustawianej w telefonie przez użytkownika. Zakres tych nastaw to -99999 do +99999.  Takim to sposobem możemy wysyłać do programu nie tylko stan ale i informacje liczbowe np. o żądanym czasie załączenia, czasie opóźnienia czy żądanej temperaturze w stanie 0 lub 1 przełącznika.
I to wszystko zmieniane błyskawicznie w naszej telefonicznej aplikacji bez konieczności ingerencji w kod programu. Możliwości są tu ogromne i wciąż odkrywam nowe fascynujące zastosowania tego widgeta.

Jeszcze ciekawsze są możliwości wyświetlania na przycisku informacji wysyłanych z mikroprocesora. Podobnie do opisanego wcześniej vLEDa możemy dowolnie ustawiać kolor mając do dyspozycji ponad 16 mln odcieni palety barw. Ta właśnie funkcja wyeliminowała praktycznie potrzebę stosowania vLEDów - przycisk stał się równocześnie lampką sygnalizacyjną procesów. Ponadto dodano do statycznego wprowadzania opisów klawisza w stanie on/off w telefonie możliwość ich dynamicznej zmiany specjalną funkcją z poziomu programu. Dzięki temu wirtualny przycisk zyskał funkcję wyświetlacza alfanumerycznego. Można więc na jednym widgetcie przycisku oprzeć sterowanie i wyświetlanie stanu np. termoregulatora z histerezą z dodatkową opcją ręcznego załączania i wyłączania !!!! W kontekście powyższego brak vLEDów w aplikacji staje się oczywisty szczególnie porównując "ceny" obu elementów.

Potencjometr SLIDER (cena 200 pkt.)

 

Drugi z najpopularniejszych zadajników - w realu analogowy w BLYNKu - cyfrowy. Czy to ma znaczenie? Oczywiście nie, bo i tak analog zostanie szybko przetworzony przez przetwornik A/C mikrokontrolera na jakąś liczbę.
To mój ulubiony widget i stosuję go nagminnie do wprowadzania zadanych wielkości do programu procesora. Występuje w dwu odmianach - w orientacji pionowej i poziomej. Ważna jest możliwość zmiany wartości min i max - odpowiednik stałych rezystorów łączonych szeregowo z potencjometrem dla ograniczenia zakresu regulacji - oraz możliwość podawania wartości ujemnych! To jest widget z możliwością zmiany wielkości kształtu i oczywiście ze zdalną zmianą koloru. Może więc pełnić (i w moich aplikacjach pełni) również funkcję wskaźnika. To kolejny widget eliminujący konieczność stosowania dodatkowych LEDów dla sygnalizacji stanów. To również jest, podobnie jak przycisk, element dwukierunkowy. Wysyłając na numer wirtualnego pinu przypisanego do potencjometru liczbę można użyć go jako quasi analogowy wskaźnik wielkości (w maksymalnym zakresie -1024 do +1024) jakiejś zmiennej mikroprocesora. Moje ulubione zastosowanie to zadajnik czasu opóźnienia, który jednocześnie pokazuje (graficznie i cyfrowo) pozostały czas do zakończenia odliczania.



Display, wyświetlacz, VALUE (cena 200 pkt.)

 

Display jednorzędowy znakomicie sprawdza się do wyświetlania dowolnych informacji liczbowych i tekstowych. Oznacza to, że wysyłać do niego można zarówno zmienne zawierające liczby (byte, int, long) jak i zmienne typu string. Wszystkie znaki dostępne na klawiaturze telefonu są możliwe do wyświetlenia w tym widgecie. Dodatkową zaletą jest zmienna wielkość czcionki dostosowywana automatycznie do ilości prezentowanych znaków. Teoretycznie maksymalnie możemy wyświetlić ponad 90 znaków w wierszu choć wtedy czcionka na telefonie będzie mało czytelna. Do 40 znaków przy najdłuższym kształcie wyświetlacza czytelność tekstu jest zadowalająca. Widget ma możliwość zdalnego ustawiania kolorów (funkcja LED). Nowością jest dynamiczna zmiana kolorów widgetu w zależności od wartości prezentowanej liczby w stosunku do nastawionych min i max. Ostatni rząd na rysunku poniżej to trzy wyświetlacze z min/max = 0/10 i z różnymi wartościami prezentowanej zmiennej. To właśnie praktyczny przykład zastąpienia trójkolorowego LEDa zmianą kolorów wyświetlacza.

 
 Istnieje podobny widget o nazwie Labeled Value stworzony specjalnie dla wyświetlania zmiennych wraz z opisem i jednostkami (np Temp = xxx oC, gdzie xxx jest zmienną zawierającą wartość temperatury).  Ale praktycznie nie używany bo jest 2x droższy i mniej uniwersalny. Tą samą funkcjonalność można uzyskać dodając jedną linijkę kodu typu   
String text = "Temp = " + String(xxx) + " oC"
i wysyłając zmienną text na widget Value. Widget ten jest najlepszą opcją do prezentowania zmiennych, komunikatów, opisów i poleceń przesyłanych z mikroprocesora. Praktycznie w każdym projekcie użyte mam co najmniej kilka takich elementów.

Przełącznik, selektor, MENU (cena 400 pkt)

Przełącznik a w zasadzie przełącznik wielopozycyjny. I to naprawdę wielo - nigdy nie wyczerpałem możliwości dodawania kolejnych pól wyboru. Jest ich prawdopodobnie 255 a może więcej. Lubię go stosować do wyboru kodów transmisji pilotów sterowania radiowego. Mam ich ze 20 i umieszczenie choćby części z nich na pulpicie telefonu zajęłoby całą przestrzeń aplikacji. MENU załatwia ten problem elegancko i dodatkowo porządkuje i ułatwia szybkie odszukanie potrzebnego elementu. Choć dla bardzo często używanych wyborów lepiej je przypisać do osobnego przycisku. Przełącznik jest swego rodzaju pamięcią dostępnych opcji. Programowo jest kompatybilny z funkcją CASE. Wybór danej opcji z pozycji MENU odpowiada naciśnięciu klawisza przypisanego do konkretnej funkcji mikroprocesora.
UWAGA: Nie można przesłać zdefiniowanych w telefonie opisów pól wyboru do mikroprocesora - wysyłany jest jedynie numer wybranej pozycji!



Nie ma zbyt wielu dodatkowych opcji ale jest oczywiście widgetem dwukierunkowym jak większość modułów wysyłających informacje do mikroprocesora. Standardowa zdalna zmiana koloru, oraz co ciekawe, zdalne ustawianie 4 pierwszych opisów pól wyboru. Trochę szkoda że nie działa to także w drugą stronę - możliwości wykorzystania elementu wzrosłyby znakomicie. Z programu można także ustawić pozycję na jakiej ma się wyświetlać MENU w telefonie. Dokonać tego można poprzez wysłanie na nr vPinu odpowiedniej liczby odpowiadającej numerowi pola wyboru. Ta funkcja daje możliwość użycia widgetu jako wyświetlacza standardowych komunikatów z mikroprocesora wcześniej zdefiniowanych w telefonie. Ograniczeniem tego rozwiązania jest stała i niemożliwa do zmiany szerokość widgetu. Wpisanie większej liczby znaków do opisu pola skutkuje zmniejszeniem rozmiaru czcionki. Ogólnie jednak jest to baaaaardzo przydatny widget.


Konsola TERMINAL (cena 200 pkt.)

 

 To bezapelacyjny zwycięzca w kategorii użyteczności widgetów w procesie uruchamiania i testowania układów z mikrokontrolerami. Powiem więcej - wszystkie nowe układy elektroniczne projektuję tak by móc korzystać przede wszystkim z tej funkcji BLYNKa. Co to oznacza - dodaję do wykorzystywanego w projekcie mikrokontrolera (najczęściej z serii ATMEGA) dodatkowy procesor ESP8266 odpowiadający za komunikację z serwerem BLYNK. Oba procesory łączą się po RS232 przy czym odłączenie modułu ESP w niczym nie zakłóca pracy podstawowego procesora realizującego określone zadania. Znika tylko możliwość zdalnego nadzoru i zarządzania systemem poprzez BLYNK. Dołożenie modułu z WiFi (najczęściej jest to ESP-01) zwiększa koszt projektu o 10 zł ale nieprawdopodobnie ułatwia, usprawnia i przyspiesza cały proces tworzenia uruchamiania i detekcji błędów. Czemu? Jeśli nie wykorzystuję innych elementów komunikacyjnych (np. wyświetlaczy LCD czy graficznych) jedynym sposobem komunikacji w uruchamianych urządzeniach jest RS232 połączony z monitorem Arduino IDE. Nim to właśnie wcześniej testowałem działanie programu, wyszukiwałem błędy w kodzie czy usterki sprzętowe. Ma on jednak jedną poważną wadę - wymaga kabla USB do połączenia z testowaną płytką i jest zainstalowany na komputerze, który musi się znajdować obok testowanego układu.

Terminal BLYNK w telefonie nie potrzebuje żadnych kabli a nadzorowanie badanego układu można dokonywać z dowolnego miejsca na świecie. Rzecz absolutnie bezcenna. Terminal BLYNK trudno nazwać kolejnym widgetem jak SLIDER, MENU czy LED. Jest to raczej osobna aplikacja udostępniana poprzez pobranie modułu z biblioteki elementów. I kosztuje jedynie 200 pkt.
 Co może terminal? Na oko niewiele - zapisać do wirtualnego pinu dowolny ciąg znaków oraz z tego pinu odczytać dowolny ciąg znaków. Tylko tyle ale i aż tyle. Umiejętne wpięcie terminala w kluczowe punktu programu umożliwia całkowite przejęcie kontroli nad jego działaniem i błyskawiczną ocenę poprawności (lub nie) jego funkcjonowania w stosunku do założeń.
Dla przykładu - wałkowany tu już wielokrotnie moduł kontrolera domowego IoT


BLYNK pełni tu funkcję wizualizacji i sterowania funkcjami IoT
A poniżej dokładnie ten sam układ z tym że wykorzystujący Terminal BLYNK jako podstawowy blok uruchomieniowo- testujący budowanego systemu.

Kluczowymi sygnałami projektu są magistrale komunikacyjne Internetu i łączności radiowej 433 MHz. Do tych sygnałów (zmiennych) dołączany jest terminal BLYNK w celu monitorowania odbywającej się po nich transmisji. By nie zaśmiecać sobie ekranu terminala zbędnymi w danym momencie informacjami każdy z punktów obserwacyjnych jest indywidualnie załączany przyciskami znajdującymi się powyżej terminala.
Dostęp do takiej funkcjonalności w urządzeniach znajdujących się gdzieś daleko poza naszym stanowiskiem pracy (np. u klienta) jest nieoceniona. Ważne też, że wykorzystujemy dokładnie tą samą aplikację co użytkownik systemu IoT a więc on ma pełną kontrolę nad ewentualnym dostępem do niej osób trzecich.
Terminal to również znakomite narzędzie do wprowadzania wszelkich niezbędnych w programie ustawień, konfiguracji i parametrów początkowych. Pewną trudność nastręcza zmiana danych logowania do sieci WiFi szczególnie jeśli nie znamy ich w momencie pisania programu ale i to udało się przeskoczyć. Trudno mi jeszcze zdefiniować wszystkie możliwe obszary  zastosowań Terminala BLYNK - temat jest bardzo świeży i mocno rozwojowy. Zapewne nie raz będzie okazja by powrócić do niego przy okazji kolejnych projektów.

I w zasadzie to by było na tyle - jak mawiał profesor mniemanologi stosowanej św. p. Jan Tadeusz Stanisławski. A co z resztą ponad 60 widgetów? Cóż, można rzec, iż są tak samo niezbędne jak dziesiątki czy setki shieldów do płytek Arduino. Fajnie, że są ale czy to jest wystarczający powód by je stosować? Część z nich duplikuje w różnych odmianach graficznego wyglądu lub możliwości wyżej opisane funkcje, część ma mocno specyficzne przeznaczenie niekoniecznie niezbędne w pracach uruchomieniowych. Postaram się je omówić w kolejnych tekstach.

Pozostały jeszcze dwa bardzo istotne elementy - EVENTOR i DEVICE SELECTOR. I znowu, nie są to typowe widgety a raczej bardzo istotne poszerzenie funkcji BLYNK. Nowe możliwości wprowadzone tymi elementami są na tyle ważne (wręcz rewolucyjne), iż wymagają oddzielnego specjalnego omówienia.

Wiec chyba ciąg dalszy ma powód by nastąpić....                                                                                80

5 komentarzy:

  1. Witam.
    Elegancki artykulik :-)
    Zgadzam się z opinią, że blynk to rewelacyjne narzędzie do bardzo wielu zastosowań.
    Czekam na kolejne artykuły z tego cyklu.
    Pozdrawiam.

    OdpowiedzUsuń
  2. Witam.
    Mam pytanko. Czy można programowo zmienić kolor lub np. label przycisku podłączonego do pinu cyfrowego ? W dokumentacji znalazłem jedynie informacje dotyczące zmiany właściwości przycisku podłączonego do pinu virtualnego.
    Pozdrawiam.

    OdpowiedzUsuń
  3. NIe sprawdzałem - ale raczej nie. Wszystkie funkcje BLYNK operują na pinach wirtualnych. Piny cyfrowe i analogowe są "przezroczyste" dla programu i serwera w obie strony i są sterowane z wnętrza biblioteki BLYNKa.

    OdpowiedzUsuń
  4. mam pytanko czy z blynk superchart można zczytać dane na hardware i obliczyć np. średnią ?

    OdpowiedzUsuń
  5. nie wiem ale raczej nie - dane są na serwerze ale nie widzę komendy do ściągnięcia ich do modułu

    OdpowiedzUsuń