Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

środa, 23 marca 2011

Bluetooth + Android: Pierwsza aplikacja APP Inventor - cz. II


Autor: Dondu

W pierwszej część tego artykułu określiliśmy założenia aplikacji i zaprojektowaliśmy komponenty niezbędne do zrealizowania.

W niniejszym artykule wykonamy program aplikacji i uruchomimy częściową jej wersję w celu przetestowania poprawności dodania komponentu listy urządzeń Bluetooth.

Poznasz więc krok po kroku, jak działają wybrane bloki programu oraz jak je łączyć, by osiągnąć zadaną funkcjonalność. Dowiesz się także jak przetestować aplikację za pomocą komputera wyposażonego w Bluetooth.

W artykule znajdziesz także gotową do pobrania aplikację.

No to do dzieła ... :-)


Programujemy, czy puzzlujemy - jak to nazwać? :-)

Jaka by nie była forma programu (w tym wypadku gotowe bloki), to jednak będziemy pisać program :-)

Aby rozpocząć przygotowanie programu, przechodzimy do edytora bloków klikając w prawym górnym rogu przycisk Blocks. Po otwarciu ekranu programowania, po lewej stronie zobaczymy dodane przez nas komponenty, a w głównej części pustą przestrzeń do umieszczania bloków programu:


MIT AI2 Inventor: Okno edycji programu (bloków).


W lewym dolnym roku jest też licznik błędów i ostrzeżeń (zaznaczony strzałką), których nie należy lekceważyć!


Lista dostępnych w pobliżu urządzeń Bluetooth

Zaczniemy od przygotowania programu listy urządzeń Bluetooth będących w zasięgu smartfona. W tym celu klikamy nasz komponent ListPicker1 co skutkuje otwarciem się okienka z blokami do wyboru, z którego wybieramy bloki when ListPicker1.BeforePicking i przeciągamy do okienka. Podobnie robimy z blokiem  set.ListPicker1.Elements.to:


MIT AI2 Inventor: Wybieranie bloków danego komponentu.


Następnie za pomocą myszki łączymy oba bloki następująco:


MIT AI2 Inventor: Łączenie wybranych bloków programu.


Utworzyliśmy blok programu, który będzie podstawą do przygotowania list dostępnych urządzeń Bluetooth. Do pełni szczęścia brakuje mu jeszcze danych z modułu Bluetooth, czyli zestawienia urządzeń, które mógłby wyświetlić na liście ListPicker1.

Należy więc do ListPicker1 dołożyć element komponentu Bluetooth, który dostarczy tych danych do wyświetlenia. Komponentem tym jest BluetoothClient1.AddressesAndNames, który dokładamy na końcu naszego bloku:


MIT AI2 Inventor: Połączone bloki programu.


Mamy więc fragment programu, który wypełni listę dostępnych urządzeń Bluetooth i w przypadku kliknięcia przycisku listy (czyli przycisku Lista dostępnych urządzeń Bluetooth) wyświetli nam tę listę.


Sprawdzamy działanie aplikacji na smartfonie

Przede wszystkim włączamy w smartfonie Bluetooth ponieważ pisana przez nas aplikacja nie posiada funkcjonalności sprawdzenia, czy moduł jest włączony i ewentualnego jego włączenia.

Teraz należy przesłać aplikację z komputera na smartfon, a mamy w tym względzie dwie możliwości (dostępne w menu Connect):
  1. poprzez aplikację AI Companion,
  2. poprzez kabel USB.

MIT AI2 Inventor: Menu przesyłania aplikacji do smartfona.


USB to szybki i zalecany sposób przesyłania aplikacji na smartfon.

Wykorzystanie aplikacji AI Companion jest nieco wolniejsze, ale zaprezentuję jak to zrobić, gdyż nie każdy może mieć kabel USB "pod ręką". Aby więc tą metodą uruchomić aplikację na smartfonie, powinieneś mieć zainstalowaną na nim aplikację MIT AI2 Companion, którą aktualnie (2014r.) można pobrać tutaj: MIT AI2 Companion

W tym przypadku istotne jest, by był włączony moduł WiFi smartfona i miał on dostęp do Internetu.

Na smartfonie uruchamiamy zainstalowaną wcześniej aplikację MIT AI2 Companion, a która rozpocznie się od ekranu:


MIT App Inventor 2 Companion: Menu pobierania aplikacji do uruchomienia.


Są dwie możliwości wykorzystania tej aplikacji:
  • podanie kodu, który za chwilę wygeneruje nam AI Inventor
  • lub skanowanie kodu QR

Ja wybrałem tę drugą opcję, bo jest szybsza. Klikamy więc przycisk scan QR code, w rezultacie czego włączy się aparat fotograficzny potrzebny do skanowania kodu QR.

Gdy mamy już na smartfonie otwartą aplikację  MIT AI2 Companion, w App Inventorze klikamy menu Connect i wybieramy AI Companion:


MIT App AI2 Inventor: Menu generowania kodu QR dla aplikacji Companion.


Pojawi się nam okienko z kodem QR:


MIT App AI2 Inventor: Wygenerowany kod QR dla aplikacji Companion.


który skanujemy smartfonem, który już oczekuje z włączonym aparatem fotograficznym:


MIT App Inventor 2 Companion: Skanowanie kodu QR.
Skanowanie kodu QR
Przykład na LG-E610

Po poprawnym zeskanowaniu kodu QR, smartfon pobiera aplikację (za pomocą WiFi) i uruchamia ją:


MIT App Inventor 2 Companion: Uruchomiona aplikacja.


klikamy więc listę dostępnych urządzeń Bluetooth i nasza aplikacja ją pokazuje:


Wybór urządzenia Bluetooth.



Pierwszy sukces mamy więc za sobą - zrealizowaliśmy punkt nr 1 z założeń dot. programu.

Teraz należy wybrać urządzenie stąd musimy zaprogramować ...


Reagowanie na wybór urządzenia z listy dostępnych

Potrzebne nam będą:
  • blok, który poda nam dane wybranego z listy (klikniętego przez użytkownika aplikacji) urządzenia Bluetooth,
  • blok, połączy się z wybranym urządzeniem znając jego dane.

Ponieważ nasze dane o urządzeniach Bluetooth w poprzednim bloku (pokazanym wyżej) przypisaliśmy do elementów ListPicker1 (ListPicker1.Elements), to znaczy, że po kliknięciu listy komponent ListPicker1 będzie znał dane urządzenia, które wybrał użytkownik aplikacji.

W związku z tym szukamy bloku ListPicker1, który zawiera dane wybrane z listy (selection) i znajdujemy:


MIT App AI2 Inventor: Bloki komponentu ListPicker.


Mamy więc już dane urządzenia Bluetooth wybranego z listy, teraz potrzebujemy blok Bluetooth, który połączy nas z wybranym urządzeniem na podstawie danych adresowych, które już mamy i temu nowemu blokowi podamy.

W komponentach naszego klient Bluetooth, czyli BluetoothClient1 znajdujemy:


MIT App AI2 Inventor: Bloki komponentu BluetoothClient.


Oba wyżej omówione bloki łączymy w następujący sposób:


MIT App AI2 Inventor: Połączone bloki komponentu BluetoothClient dokonującego połączenia z wybranym urządzeniem Bluetooth.


Tak utworzony blok, połączy nasz smartfon z wybranym z listy urządzeniem. Dodatkowo ponieważ blok BluetoothClient1.Connect ma z lewej strony haczyk oznacza to, że zwraca informację, czy połączenie udało się nawiązać (true) czy też nie (false).

Warto by było tę informację wykorzystać, dodamy więc blok warunkowy dostępny w na liście bloków Control:


MIT App AI2 Inventor: Blok warunkowy IF ... then.


Łączymy go z blokiem Bluetooth następująco:


MIT App AI2 Inventor: Blok warunkowy IF ... then podłączony do bloku BluetoothClient.Connect.


Ostatnim blokiem jaki musimy dodać jest blok reagujący na wybranie urządzenia z listy urządzeń. Ponieważ nasza lista urządzeń nazwana jest ListPicker1, tam więc szukamy i znajdujemy blok
ListPicker1.AfterPicking:


MIT App AI2 Inventor: Blok AfterPicking bloku listy wyboru ListPicker.


i łączymy go z wcześniejszymi następująco:


MIT App AI2 Inventor: Blok wykonujący połączenie z wybranym urządzeniem Bluetooth.


Tak stworzony blok po wybraniu urządzenia z listy wykona próbę połączenia z nim, i poinformuje warunek IF o rezultacie (True gdy połączenie zostanie poprawnie nawiązane, False w przeciwnym wypadku).


Włączenie ukrytych komponentów

Jeżeli rezultat nawiązania połączenia jest pozytywny, należy włączyć widoczność pozostałych ukrytych dotychczas komponentów, czyli Label1, TextBox1 oraz Button1.

Mamy już miejsce w warunku (then), gdzie możemy wstawić dodatkowe bloki, które wykonają się tylko wtedy, gdy połączenie zostało prawidłowo nawiązane. Musimy więc znaleźć bloki odpowiedzialne za widoczność poszczególnych komponentów. Na przykładzie komponentu Label1, znajdujemy set.Label1.Visible.to:


MIT App AI2 Inventor: Bloki komponentu Label.


Do niego potrzebować będziemy wartość TRUE, którą znajdziemy w komponentach Logic:


MIT App AI2 Inventor: Bloki logiczne.


i łączymy je następująco z pozostałą częścią tego fragmentu programu:


MIT App AI2 Inventor: Blok wykonujący połączenie z wybranym urządzeniem Bluetooth oraz włączający widoczność etykiety Label.



W przypadku pozostałych w/w komponentów  (TexBox1 oraz Button1) robimy to samo i w rezultacie otrzymujemy w pełni funkcjonalny blok:


MIT App AI2 Inventor: Kompletny blok wykonujący połączenie z wybranym urządzeniem Bluetooth oraz włączający widoczność ukrytych elementów.


Czyli nasz blok po wybraniu urządzenia z listy urządzeń Bluetooth, spróbuje nawiązać z nim połączenie i jeśli mu się to uda włączy widoczność pozostałych komponentów.


Sprawdzamy jak działa aplikacja, według opisu we wcześniejszej części niniejszego artykułu. Po uruchomieniu otrzymujemy jak poprzednio ekran:


MIT App Inventor 2 Companion: Uruchomiona aplikacja.



Po kliknięciu przycisku wybory urządzenia:


MIT App Inventor 2 Companion: Uruchomiona aplikacja - lista urządzeń Bluetooth.



i wybraniu właściwego (w moim przypadku HC-05) nastąpiło poprawne połączenie czego rezultatem było schowanie listy i pokazanie wszystkich ukrytych komponentów:


MIT App Inventor 2 Companion: Uruchomiona aplikacja - stan po poprawnym połączeniu.



Czyli pięknie działa :-)


Reakcja na wysłanie wpisanego tekstu

Został nam do utworzenia blok wysyłania tekstu, który wpiszemy w polu TextBox1. Nie będę się już rozpisywał dokładnie, gdzie szukać poszczególne bloki, tylko pokażę gotowy blok, a Ty sam (w ramach treningu) znajdziesz odpowiednie bloki, bo już wiesz jak należy ich szukać :-)

Cały blok wyglądać powinien następująco:


MIT App AI2 Inventor: Kompletny blok reagujący na przycisk wysłania tekstu do połączonego urządzenia Bluetooth.


Wyjątek zrobię jedynie dla bloku listy make a list ponieważ nie znajdziesz go w takiej formie na liście bloków Lists. Jest to bowiem wersja inline bloku make a list:


MIT App AI2 Inventor: Bloki list.


Aby go zmienić na wersję inline przeciągnij go do okna programu, kliknij na nim prawy klawisz myszki i wybierz Inline Inputs:


MIT App AI2 Inventor: Zmiana listy na wersję inline.


Następnie wstaw do niego dwa pola numeryczne z komponentów Math i wstaw w nie liczby 13 oraz 10, które odpowiadają znakom powrotu karetki (CR - ang. carriage return) i przejścia do nowej (LF - line feed ) - znaki CRLF. W ten sposób każdy wysłany tekst w terminalu będzie w osobnej linii.

Wróćmy do bloku wysyłającego dane, by wyjaśnić zasadę jego działania:


MIT App AI2 Inventor: Kompletny blok reagujący na przycisk wysłania tekstu do połączonego urządzenia Bluetooth.


Gdy kliknięty zostanie przycisk Button1 nastąpi wysłanie poprzez Bluetooth zawartości pola TextBox1, a w drugiej kolejności wysłanie bajtów końca linii (CRLF).

Pełna część blokowa naszej aplikacji wygląda więc następująco:


MIT App AI2 Inventor: Kompletny program w postaci bloków, całej aplikacji.



Do pobrania

Do pobrania:

Możesz go przesłać pli Test_Bluetooth_SPP.apk na swój telefon w dowolny sposób (USB, Email, Bluetooth) i zainstalować. Po jej zainstalowaniu pojawi się ona ze standardową ikoną:






Testowanie

Aby za pomocą komputera przetestować naszą aplikację, należy mieć zainstalowany port COM w urządzeniach Bluetooth. By to osiągnąć należy (przykład dla Windows XP) w Panelu sterowania wybrać Urządzenia Bluetooth:


Windows XP: Panel sterowania.


i w zakładce Porty COM sprawdzić, czy masz zainstalowany port:


Windows XP: Panel sterowania - Urządzenia Bluetooh - zakładka: Porty COM - Dodawanie portu.



Jeżeli port nie jest zainstalowany, należy kliknąć przycisk Dodaj... w wyniku czego ukaże się okienko:


Windows XP: Urządzenia Bluetooh - Dodawanie przychodzącego (wejściowego) portu COM.


Po kliknięciu przycisku OK nastąpi proces dodawania portu COM, co objawiać się będzie kolejnymi komunikatami:


Windows XP: Urządzenia Bluetooh - Komunikat znalezienia urządzenia.

Windows XP: Urządzenia Bluetooh - Komunikat rozpoznania urządzenia.

Windows XP: Urządzenia Bluetooh - Komunikat poprawnego zainstalowania portu COM.


czego rezultatem będzie zainstalowanie portu COM:


Windows XP: Panel sterowania - Urządzenia Bluetooh - zakładka: Porty COM - Poprawnie dodany port szeregowy COM.


Teraz pozostaje już nam tylko włączyć dowolny terminal (ja preferuję Realterm) i w zakładce Display zaznaczyć opcję Ansi (by nie pokazywane były znaki specjalne CR i LF opisane wyżej):


Terminal Realterm: Zakładka Display - ustawienie trybu wyświetlania.


oraz w zakładce Port i wybrać właściwy COM (w moim przypadku był to port COM21) i dowolne parametry transmisji danych:


Terminal Realterm: Zakładka Port - Ustawienie parametrów transmisji i wyboru portu COM.


Następnie przechodzimy do naszej aplikacji i łączymy się z komputerem wybierając go z listy - u mnie jest to BUBA :-)


MIT App Inventor 2 Companion: Uruchomiona aplikacja - lista urządzeń Bluetooth - wybór komputera.


Od tego momentu smartfon powinien być poprawnie połączony z komputerem za pomocą portu COM, możemy więc przystąpić do wysyłania danych testowych - ja wysłałem kilkukrotnie ciąg cyfr 1234567890:


MIT App Inventor 2 Companion: Uruchomiona aplikacja TEST_Bluetooth_SPP.


czego efekt możesz zaobserwować w terminalu:


Terminal Realterm: Dane odebrane z aplikacji TEST_Bluetooth_SPP.


a poziom zadowolenia mocno wzrasta ;-)


Podsumowanie

Jak widzisz programowanie w App Inventorze za pomocą bloków jest banalnie proste. Początkowo pewną trudność może przynieść znalezienie potrzebnego nam bloku, jednakże po pewnym czasie będziesz gdy "złapiesz klucz" według jakiego podzielone są bloki nie będzie to stanowiło dla Ciebie żadnego problemu :-)

Możliwości Inventora są oczywiście znacznie większe niż pokazany powyżej przykład, więc zachecam do jego wykorzystania, a przykłady oraz Help znajdziesz na oficjalnej stronie: ai2.appinventor.mit.edu

W kolejnym artykule połączymy się z mikrokontrolerem za pomocą modułu HC-05 i pobawimy się diodą LED za pomocą kolejnej własnej aplikacji :-)


Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

27 komentarzy:

  1. Jak można to przetestować tę aplikację?

    OdpowiedzUsuń
  2. MacGyver - podłącz się przez bluetooth do komputera. Otworz jakikolwiek terminal, ustaw odpowiedni port (menadzer urzadzen wskaze Ci pod jaki port podlaczony jest bt) i obserwuj co wysyla aplikacja.
    Pozdrawiam

    OdpowiedzUsuń
    Odpowiedzi
    1. Chciałem testowanie opisać w osobnym artykule, ponieważ ten już jest i tak bardzo długi, ale zmieniłem plany więc dodam jeszcze dzisiaj do niniejszego. W trzecim artykule zrobię to co miało być w czwartej części, czyli połączenie z mikrokontrolerem i HC-05, ale na kolejnej, nowej aplikacji.

      Usuń
  3. Ferb! Wiem już co będziemy dzisiaj robili!

    Pozdrowienie dla ekipy bloga!!!

    OdpowiedzUsuń
  4. Witam, niestety zastała mnie sama fala niepowodzeń. Aplikacja napisana zgodnie z powyższym jak i ta ściągnięta nie wykrywa modułu hc-05 (moduł sprawny i dobrze podpięty gdyż laptop nie ma z tym najmniejszej trudności). Drugim niepowodzeniem jest połączenie z laptopem. Urządzenia powiązane, a próba połączenia się z laptopem (go aplikacja wykrywa) kończy się błędem "Error 507: unable to connect". Prosił bym o wskazówki jak z tym sobie poradzić za które już dziękuję :)

    OdpowiedzUsuń
    Odpowiedzi
    1. Witam.
      Error: 507 - dokonaj parowania HC-05 ponownie.

      Usuń
    2. Dodałem jeszcze do artykułu plik projektu (Test_Bluetooth_SPP.aia), bo zapomniałem go zamieścić. W razie problemów opisz dokładnie, co robisz i jaki jest efekt. Powodzenia! :-)

      Usuń
    3. Witam, po ściągnięciu plików na nowo łącznie z tym dodanym telefon wykrywa HC-05. Niestety dalej nie potrafię się połączyć z komputerem. Wiem że to już wykracza poza artykuł ale prosił bym o pomoc. Komputer paruje się z telefonem po czym zaczyna instalować sterowniki. Stara się zainstalować Bluetooth Peripheral Device, niestety nie udaje się to. Zainstalowałem na nowo sterowniki do Bluetooth w laptopie, zainstalowałem środowisko do obsługi Samsunga z nadzieją że on wrzuci sterowniki i nic. Był bym wdzięczy za pomoc bo dalej chcę brnąć w te artykuły :)

      Usuń
    4. Czyli problem jest stricte związany z telefonem i systemem na komputerze. Najlepiej byłoby, gdybyś założył na Elektroda.pl temat i zapytał co jest przyczyną tego problemu ze sterownikami. Będziesz mógł tam wkleić ekran z komunikatami, itp. Sądzę, ze odpowiednim działem będzie: Komputery Serwis

      A tutaj podaj proszę link do swojego tematu na forum.

      Usuń
    5. http://www.elektroda.pl/rtvforum/viewtopic.php?p=14118597#14118597

      Usuń
    6. Odkryłem, że mimo niepowodzenia w zainstalowaniu sterowników komunikacja między laptopem a telefonem działa znakomicie i przesył plików w dwie strony działa. Niestety Pana aplikacja dalej się nie potrafi połączyć.

      Usuń
    7. Na ten problem aplikacja sama w sobie ma wpływu. Niestety mogę jedynie doradzić szukanie pomocy w zakresie prawidłowego zainstalowania sterowników. :-(

      Usuń
  5. A jak napisać, aby aplikacja automatycznie łączyła się z urządzeniem BT. bez konieczości wybierania jej z listy.. wiadomo wcześniej musi być sparowana...

    OdpowiedzUsuń
  6. Super poradnik. Gratuluje...
    brakuje mi jeszcze jednej opcji, zeby jeszcze bardziej uzytkownika odciążyć, można by dodać automatyczne sprawdzanie czy moduł BT jest włączony, jeśli nie to ..automatycznie zostanie włączony moduł BT i połączony z konkretnym urządzeniem BT dla testów wspomnianym HC-05 :)

    OdpowiedzUsuń
  7. witam, jak przy pomocy App Inventor ustawić w aplikacji żeby po wyjściu z ustawień i przejściu do innego ekranu nie rozłączało się z bluetooth?? w aplikacji wykorzystuje 6 ekranów i w każdym steruje przez bluetooth czym innym

    OdpowiedzUsuń
  8. A jak w drugą stronę? Jak odebrac ciag stringa z uarta uC i wyświetlić go w osobnych textboxach (spacja jest separatorem do innego textboxa)

    Rafal

    OdpowiedzUsuń
    Odpowiedzi
    1. Zobacz ten artykuł: Bluetooth + Android: LED MASTER - sterujemy diodą

      Na jego bazie możesz opracować własną wersję komunikacji.

      Usuń
  9. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  10. Cześć, jaki może być powód braku elementów w liście dostępnych urządzeń bluetooth ? Bf jest włączony, i w opcjach telefonu urządzenia są dostępne.

    OdpowiedzUsuń
    Odpowiedzi
    1. Sparowany poprawnie?

      Usuń
    2. Myślałem, że w liście będą wszystkie widoczne urządzenia, nie tylko te sparowane. Po sparowaniu w ustawieniach wszystko gra, dzięki ;)

      Usuń
  11. Witam, Panowie, robię wszystko zgodnie z artykułem i wyskakuje mi błąd "Error 507: Unable to connect. Is the divice turned on ? ". Wszystkie kroki wydają się być zrobione. Już sam nie wiem...

    OdpowiedzUsuń
  12. A ten plik dołączony przez autora też się nie odpala...

    OdpowiedzUsuń
  13. Wszystko śmiga jak tamta lala ;-)
    Od tygodnia się główkowałem i już wiem gdzie robiłem błąd
    brak sendBytesList =13 10
    Piękne dzięki

    OdpowiedzUsuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.