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:
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:
Następnie za pomocą myszki łączymy oba bloki następująco:
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:
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):
- poprzez aplikację AI Companion,
- poprzez kabel USB.
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:
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:
Pojawi się nam okienko z kodem QR:
który skanujemy smartfonem, który już oczekuje z włączonym aparatem fotograficznym:
Skanowanie kodu QR Przykład na LG-E610 |
Po poprawnym zeskanowaniu kodu QR, smartfon pobiera aplikację (za pomocą WiFi) i uruchamia ją:
klikamy więc listę dostępnych urządzeń Bluetooth i nasza aplikacja ją pokazuje:
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:
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:
Oba wyżej omówione bloki łączymy w następujący sposób:
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:
Łączymy go z blokiem Bluetooth następująco:
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:
i łączymy go z wcześniejszymi następująco:
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:
Do niego potrzebować będziemy wartość TRUE, którą znajdziemy w komponentach Logic:
i łączymy je następująco z pozostałą częścią tego fragmentu programu:
W przypadku pozostałych w/w komponentów (TexBox1 oraz Button1) robimy to samo i w rezultacie otrzymujemy w pełni funkcjonalny blok:
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:
Po kliknięciu przycisku wybory urządzenia:
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:
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:
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:
Aby go zmienić na wersję inline przeciągnij go do okna programu, kliknij na nim prawy klawisz myszki i wybierz Inline Inputs:
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:
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:
Do pobrania
Do pobrania:
- plik projektu aplikacji MIT App Inventor 2 Beta: Test_Bluetooth_SPP.aia (kopia)
- aplikacja wykonana w MIT App Inventor 2 Beta: Test_Bluetooth_SPP.apk (kopia)
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:
i w zakładce Porty COM sprawdzić, czy masz zainstalowany port:
Jeżeli port nie jest zainstalowany, należy kliknąć przycisk Dodaj... w wyniku czego ukaże się okienko:
Po kliknięciu przycisku OK nastąpi proces dodawania portu COM, co objawiać się będzie kolejnymi komunikatami:
czego rezultatem będzie zainstalowanie portu 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):
oraz w zakładce Port i wybrać właściwy COM (w moim przypadku był to port COM21) i dowolne parametry transmisji danych:
Następnie przechodzimy do naszej aplikacji i łączymy się z komputerem wybierając go z listy - u mnie jest to BUBA :-)
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:
czego efekt możesz zaobserwować w terminalu:
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 :-)
Jak można to przetestować tę aplikację?
OdpowiedzUsuńDodałem ten punk na końcu artykułu.
Usuń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.
OdpowiedzUsuńPozdrawiam
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ńFerb! Wiem już co będziemy dzisiaj robili!
OdpowiedzUsuńPozdrowienie dla ekipy bloga!!!
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ńWitam.
UsuńError: 507 - dokonaj parowania HC-05 ponownie.
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ń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ń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
UsuńA tutaj podaj proszę link do swojego tematu na forum.
http://www.elektroda.pl/rtvforum/viewtopic.php?p=14118597#14118597
Usuń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ńNa ten problem aplikacja sama w sobie ma wpływu. Niestety mogę jedynie doradzić szukanie pomocy w zakresie prawidłowego zainstalowania sterowników. :-(
Usuń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ńTo dobre pytanie, stąd postanowiłem wyjaśnić to szerzej i zrobiłem to w artykule: Android - App Inventor 2: Jak automatycznie połączyć Bluetooth po włączeniu aplikacji i rozłączyć przy wyjściu?
UsuńSuper poradnik. Gratuluje...
OdpowiedzUsuń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 :)
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ń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)
OdpowiedzUsuńRafal
Zobacz ten artykuł: Bluetooth + Android: LED MASTER - sterujemy diodą
UsuńNa jego bazie możesz opracować własną wersję komunikacji.
Ten komentarz został usunięty przez autora.
OdpowiedzUsuńTen komentarz został usunięty przez autora.
Usuń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ńSparowany poprawnie?
Usuń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ń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ńA ten plik dołączony przez autora też się nie odpala...
OdpowiedzUsuńWszystko śmiga jak tamta lala ;-)
OdpowiedzUsuńOd tygodnia się główkowałem i już wiem gdzie robiłem błąd
brak sendBytesList =13 10
Piękne dzięki