piątek, 18 listopada 2016

BLYNK z 8051/2 PIC18 68HC908, HCS08 MSP430 - to już możliwe

BLYNK i ESP8622 w natarciu szerokim frontem


Małe ćwiczenie z programowania ESP8266 i NANO dało niespodziewany efekt - możliwość uruchomienia BLYNKa z każdym praktycznie dowolnym mikrokontrolerem. Jedyny warunek to możliwość wpisania do niego kodu do komunikacji z ESP na którym zainstalowany jest BLYNK. I natychmiast  większość opcji oferowanych przez BLYNK jest w zasięgu ręki a nawet obu rąk.
Poniższy program działa w oparciu o transmisję szeregową RS232 ale nie ma żadnych przeszkód by szybko przekonwertować to na np I2C czy SPI. Serial wybrałem tylko z lenistwa - łatwo go podejrzeć dowolnym terminalem by zobaczyć co w rzeczywistości jest transmitowane na łączach z ESP. Co prawda transmisja serialem ma swoje wady ale jest najprostsza do ogarnięcia.

Na dziś mogę zapisywać dane z i do większości BLINKowych widgetów - wszystkich, które do tej pory używałem. Ponadto udało się zaimplementować możliwość zmiany parametrów widgetów - color, label - co jak dla mnie wyczerpuje na razie potrzeby związane z wizualizacją działań w stosowanych mikrokontrolerach. Do czasu kiedy każdy procesor (lub większość) będzie wyposażony w sprzętowe WiFi połączenie z ESP8266 wydaje się na razie najsensowniejszym rozwiązaniem "usieciowienia" naszego procesora. I najtańszym!

To w miarę finalna (powiedzmy ver 0.1.1) oprogramowania dla ESP i komplementarna część, którą należy wgrać w drugi dowolny mikrokontroler. Kod pisany jest pod Arduino IDE i niektóre z funkcji trzeba pewnie przerobić dla konkretnego typu procesora i standardu języka C.

Kod dla ĘSP-01



Kod "wtyczki" BLYNK dla mikroprocesora



To oprogramowanie pisane i testowane jest pod kątem 32 wirtualnych pinów dostępnych w podstawowej wersji BLYNK ale bez widocznych problemów obsługuje wszystkie 128 vPiny.

Zarezerwowane są następujące vPiny:
- nr 0  > dla vLED. Ledy można dodawać też na wszystkie pozostałe wolne vPiny ale pin nr 0 jest tylko do vLED.
- nr 29 > terminal. Widget terminala jest na sztywno ustawiony na tym vPinie.
- nr 30 i 31 > są zarezerwowane dla ESP (vLED i terminal) na potrzeby testowe

A poza tym wszystko jest do dyspozycji programisty.
 Można przesyłać dane typu Intiger komendą BlynkvirtualWrite_int (nrvPin, data) i tupu String BlynkvirtualWrite_str(nrvPin, str). Dane bitowe czy bajtowe przesyła się jako int. Nie implementowałem przesyłania float bo za dużo z tym zabawy w stosunku do korzyści. Do wyświetlania wystarczy sformatować string a do innych operacji przesunąć przecinek by dostać liczbę całkowitą. Może w przyszłości zaimplementuję Double z liczbami ułamkowymi. Na razie to musi wystarczyć.
Stringi nie są niczym ograniczone poza buforem obu procesorów. Dla pewności wstawiłem ograniczenie do 50 bajtów na jednym stringu.
Dla obsługi vLED jest osobna funkcja BlynkvirtualWrite_led(nrvPin, data). "Data" to jasność świecenia vLED - 0 wygaszony 255 max świecenia.
Zmiany parametrów widgetów to głównie zmiana koloru  BlynkvirtualWrite_col(nrvPin, str)
gdzie str musi być zgodna z formatką koloru tj. #FFFFFF. F to dowolna cyfra w HEX.
Osobna funkcja BlynkvirtualWrite_ON(nrvPin, str) i OFF jest przeznaczona dla zmiany etykiet przycisków w stanie ON i OFF. Na razie nie implementowałem zmiany etykiet innych widgetów - nigdy z tego nie korzystałem i sądzę że to zbędny widget-gadżet.

Najwięcej problemów pojawiło się w najłatwiejszym obszarze - komunikacji szeregowej. Funkcja printnl() dodaje na końcu przesyłanego łańcucha znaki CR i NL a nie dodaje znaku końca stringa /0 o czym zapomniałem a czego nie było widać w standardowym terminalu Arduino IDE. Dopiero program RealTerm   pozwolił podejrzeć co naprawdę transmituje się pomiędzy serialami obu procesorów. Gorąco go polecam bo jest naprawdę świetny.

  
 Dzięki niemu w standardowej procedurze odbioru stringa z seriala dodałem zamianę znacznik końca wydruku /r na koniec stringa /0. I wszystko zaczęło działać. No może prawie wszystko. Okazuje się że transmisja po serialu nie jest taka bezbłędna jak sądziłem - pojawiają się tam czasem jakieś dziwne znaki (przesłuchy ? utrata części znaków przy dużej ilości przesyłanych danych?) które mogą zakłócić poprawność odbieranych danych. Temat został wyprostowany poprzez wstępną analizę formatu odbieranej ramki - ale temat jest niewątpliwie do dalszej analizy. Na razie działa bez większych zakłóceń.
Co ważne obserwowany wcześniej w klasycznym układzie NANO<>ESP8266 efekt "zatykania" się transmisji do APP BLYNK szczególnie przy częstej zmianie parametrów widgetów - tu praktycznie nie występuje. Wszystko przechodzi gładko.

Najpiękniejsza jest objętość kodu w NANO potrzebna do obsługi BLYNK znajdującego się w ESP-01 - 4 kB (13 % pamięci). I to bez żadnej optymalizacji rozrzutnego przecież Arduino IDE.
 Czysty blink BLYNK to prawie 18 kB (60% pamięci). To otwiera całkiem nowe możliwości zastosowania BLYNKa dla procesorów z 16 a nawet 8 kB pamięci programu! ATtiny i BLYNK - oczywiście możliwe choć oczywiście bez sensu.

Jeszcze ciekawszym pomysłem wydaje się stworzenie miniaturowego (wielkości ESP-01) systemu kontrolno-testującego dla dowolnego projektu mikroprocesorowego. Obecnie dla tego celu trzeba stosować rozbudowane wyświetlacze LCD i klawiaturki które umożliwiają "wgląd" do wnętrza programu, ustawienia parametrów,odczytu zarejestrowanych błędów czy uruchomienia testów kontrolnych.  To wszytko można zrobić teraz z klawiatury telefonu a co najważniejsze - z drugiego końca świata. Dla systemów prototypowych po prostu bajka!!! Trzeba na tym pomyśleć bo wydaje się to ogromne rozwojową ścieżką dla zastosowań BLYNKa.


Tyle na razie z frontu walki nad "dziwną" implementacją BLYNKa  cd jak mniemam nastąpi ......


 

Brak komentarzy:

Publikowanie komentarza