NodeMCU – aplikacja odbierająca/wyświetlająca dane z modułu

Dziś opiszę ostatni element mojego projektu z NodeMCU i modułem KAmodLSM303, czyli aplikację na PC, która odbiera dane z akcelerometru za pośrednictwem modułu NodeMCU oraz sieci WiFi i wyświetla na ekranie model modułu KAmodLSM303 obrócony zgodnie z odczytami z czujnika LSM303.

Do napisania aplikacji użyłem środowiska Processing, które umożliwia pisanie aplikacji na PC w sposób przypominający ten z Arduino, dodatkową zaletą jest to, że pisząc jeden kod tworzymy aplikację działającą od razu w systemach Windows, OS X oraz Linuksa. To znaczy – jak to zwykle bywa – prawie tak jest, w filmie chciałem pokazać aplikację działającą na Raspberry Pi, ale niestety problem z obsługą grafiki w aplikacjach Processing uruchamianych w Raspbianie ostudził mój zapał (możliwe jest ominięcie tego problemu, ale znalazłem ciekawsze rozwiązanie do łatwego generowania grafiki 3D na RPi, w miarę możliwości postaram się coś o tym napisać). No ale do rzeczy, środowisko Processing można pobrać ze strony jego twórców, ze względu na użycie biblioteki Object Loader musiałem użyć wersji 2.2.1, ponieważ biblioteka nie działa jeszcze prawidłowo z wersjami 3.0+.

Kod aplikacji Processing składa się zawsze z dwóch funkcji: setup oraz draw (odpowiedniki setup i loop z Arduino), w funkcji setup umieszczamy kod konfiguracyjny (inicjalizacje zmiennych itp.), funkcja draw jest wywoływana okresowo, powinna zawierać kod wykonujący zadania aplikacji. Na początku programu należy zaimportować dodatkowe biblioteki:

W pierwszej linii zaimportowana zostaje biblioteka pozwalająca programowi korzystać z połączeń sieciowych, objloader to biblioteka, która umożliwia importowanie modeli 3D w formacie obj.

Dalej deklarowane są zmienne globalne:

Pierwsza zmienna to klient połączenia TCP, druga zmienna przechowuje zaimportowany model 3D, zmienne x, y i z będą zawierać wartości odczytane z akcelerometru modułu KAmodLSM303.

Kod funkcji setup wygląda następująco:

Do odczytu danych z modułu KAmodLSM303 za pośrednictwem modułu NodeMCU napisałem funkcję readKAmodLSM303, funkcja wysyła znak „A” do modułu (może to być dowolny inny znak), następnie odczytuje 6 bajtów. Bajty są sklejane z sobą w liczby 16-bitowe, następnie, jeśli liczba ma najstarszy bajt o wartości 1, odejmujemy od niej liczbę 65536, ta operacja ma na celu odczytanie liczb w kodowaniu U2. Na koniec odczytane wartości są uśredniane z poprzednio odczytanymi wartościami, ma to na celu zniwelowanie drgań, oczywiście można tu zastosować bardziej zaawansowaną technikę, ale do moich celów taki sposób w zupełności wystarcza.

Teraz zostaje tylko napisać funkcję draw, która na podstawie odczytów rysuje odpowiednio obrócony model.

 

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.