LCD4Android – wyświetlanie informacji na Androidzie

 
1. Wstęp
 
Czy ktoś wie czym jest projekt LCD4Linux? Tak, jest to projekt, który pozwala na wyświetlanie różnych informacji na wyświetlaczu LCD przez USB. Potrzeba modułu, wyświetlacza i własnych albo cudzych umiejętności lutownicznych. Nie będę się kłócił – to dobry projekt, sam posiadam takie 2 wyświetlacze.
Jest także inny sposób. Na portalu aukcyjnym można kupić tanio tablet lub tablet z uszkodzoną baterią z systemem Android. Problemem jest napisanie lub znalezienie aplikacji, która pozwoli na wyświetlenie informacji na urządzeniu z Androidem. W tym celu napisałem aplikację LCD4Android.
 
2. Czym jest LCD4Android
 
LCD4Android to aplikacja na Androida, która pozwala na wyświetlenie różnych danych na urządzeniu z systemem Android.
Cechy:
  • darmowy,
  • bez reklam (a po co zamulać system?),
  • działa na Androidzie 4.4 KitKat w górę,
  • podczas działania nie pozwala na zgaszenie się ekranu,
  • dane są wyświetlane na formatce przeglądarki WWW opartej o silnik WebKit,
  • wymagana jest znajomość języka HTML oraz najlepiej także JavaScript,
  • dane mogą być odbierane: z serwera, przez Bluetooth, lub przez USB.
 
3. Licencja, źródła i instalacja
 
Udzielam licencji CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0/)
Źródło znajduje się na github (https://github.com/nitro2010/LCD4Android)
Tam też znajduje się ostatnia wersja aplikacji – kliknij na 'Releases' i LCD4Android-wersja.apk. Wystarczy tą aplikację zainstalować samemu – przez ADB, AirDroid, można także przenieść na kartę SD przez kabel USB i tam z managera plików zainstalować aplikację. Aplikacja nie znajduje się w sklepie Google Play. Wersję APK którą ja wydaję jest podpisana kluczem.
 
4. Użycie
 
Uwaga! Przykłady i programy były testowane na Linux Mint
Po zainstalowaniu uruchamiamy aplikację. Aplikacja uruchomi się na pełny ekran bez żadnych pasków, poziomo, aplikacja nie pozwoli na uruchomienie się blokady ekranu. Dodatkowe opcje mamy pod przyciskiem telefonu MENU.
 
Strona powitalna LCD4Android
 
Jak wspomniałem wcześniej, aplikacja wyświetla dane w formacie HTML, z domieszką JavaScript.
Aplikacja wyświetla informacje na formatce przeglądarki z następującymi ustawieniami:
  • brak poziomych i pionowych suwaków przesuwania (przesuwanie nadal jest możliwe za pomocą palca),
  • włączona JavaScript,
  • wyłączona opcja wyskakujących okienek,
  • wyłączone przyciski powiększania,
  • zaimplementowany interfejs "AndroidJS" do komunikacji między JavaScriptem a Androidem
Aplikacja obsługuje aktualnie 3 tryby pozyskiwania informacji, które są dostępne w MENU => Choose connection type:
 
  1. Server WWW
W tym trybie dane są pobierane z serwera WWW. Stawiamy sobie serwer HTTP gdzie chcemy, tworzymy strony, które czytają dane z serwera, albo "coś wyświetlają". Przejścia pomiędzy stronami można zrobić, dodając, np. 
gdzie po 10 sekundach strona przejdzie do strony o nazwie ekran2.html
Jako przykład stworzyłem 2 strony: datetime.html (która wyświetla aktualną datę i czas) i memory.html (która pokazuje ilość użytej pamięci w systemie Linuks). Oba skrypty korzystają z jQuery. Dodatkowo mamy skrypt memory.used.sh w Bashu, który zapisuje do pliku memory.used.txt aktualne zużycie pamięci. Powiniśmy go wywoływać np. co 1 sekundę:
Dajemy pliki na serwer WWW, powyższą linjkę można dać do screen.
W aplikacji zmieniamy URL: MENU -> Change URL to Server na adres serwera. U mnie jest to: 192.168.1.185:8080/datetime.html, zatwierdzamy i mamy informacje z serwera.
 
 
     
Zrzuty pokazujące dane z serwera: czas i pasek obciążenia pamięci
 
Na serwerze możemy robić co chcemy i w jakim języku chcemy o ile wynik do przeglądarki będzie wysłany zgodnie z text/html i kodowaniem utf-8.
Należy też pamiętać, aby nasze informacje nie wykraczały poza ekran urządzenia.
 
Kody źródłowe: lcd4android_conn_www.zip (możesz pobrać z sekcji Download -> Skrypty)
 
  1. Bluetooth
 
W tym trybie mamy możliwość przesłania danych (tekstu) z innego urządzenia. Po wybraniu tego trybu dostaniemy komunikat na ekranie "I am waiting for data from Bluetooth Device" (pol. "Oczekuję na dane z urządzenia Bluetooth"). Urządzenie nasłuchuje na 2 kanałach: bezpiecznym i niebezpiecznym. Typ można wybrać z MENU, ale lepiej zostawić oba. Wystarczy tylko teraz napisać aplikację, która prześle tekst do naszej głównej aplikacji. 
ID kanału bezpiecznego:        a1869bd4a0d647a3886db8d7579f8cc7
ID kanału niebezpiecznego:    4f41adbe088a48b3b77db90a5b65d7e8
W celach testowych stworzyłem aplikację JAVA, która korzysta z biblioteki BlueCove to przesyłania danych przez Bluetooth.
Źródła aplikacji: JavaBluetoothEchoClient.zip (możesz pobrać z sekcji Download -> Skrypty)
Aplikacja: bluetooth_client.jar (możesz pobrać z sekcji Download -> Programy)
Można ją wywołać z Windows i Linux.
Na początku tworzymy plik o nazwie powiedzmy plik.txt z dowolnym tekstem. Możemy dodać także tagi HTML.
java -jar bluetooth_client.jar discovery – pokazuje wszystkie urządzenia Bluetooth w pobliżu, które mają ustawioną widoczność.
java -jar bluetooth_client.jar service-secure PLIK URZADZENIE – przesyła kanałem bezpiecznym zawartość PLIK [podajemy ścieżkę do tego pliku] do urządzenia URZADZENIE [podajemy ID urządzenia].
java -jar bluetooth_client.jar service-insecure PLIK URZADZENIE – przesyła kanałem niebezpiecznym zawartość PLIK [podajemy ścieżkę do tego pliku] do urządzenia URZADZENIE [podajemy ID urządzenia].
 
Przykład działania można zobaczyć na poniższym zrzucie:
 
A nasza aplikacja LCD4Android otrzymuje zawartość wysłaną z aplikacji JAVA:
 
 
Tą metodą raczej prześlemy statyczny tekst. Obrazków należy unikać do przesyłania.
 
  1. kabel USB
 

W tym trybie dane są czytane przez kabel USB. Dokładniej dane są przesyłane do telefonu i to z telefonu są czytane dane. Dane mogą być przesyłane przez ADB. Możemy przesłać od razu wszystkie pliki html i javascript do telefonu.
Oto procedura:

  1. Tworzymy główny plik o nazwie: lcd4android.html. W tym pliku umieszczamy główną i zasadniczą część naszej aplikacji. Do tego dajemy różne pliki javascript, które są potrzebne do naszej aplikacji.

  2. Pakujemy nasze pliki do jednego archiwum zip.

  3. Przesyłamy dane do telefonu. I tutaj jest zależność z jakiej jednej lokalizacji może czytać aplikacja:

    1. /data/data/eu.webnitro.lcd4android/files/ – folder wewnęrzny w systemie

    2. /storage/sdcardX/eu.webnitro.lcd4android/files/ – folder na karcie wewnętrznej lub zewnętrznej

  4. dodatkowo aplikacja będzie czytać jedną z dwóch folderów o nazwie 0 lub 1. Foldery mają na celu synchronizacji. Jeżeli obecnie aplikacja czyta z folderu 0 to przesyłamy do 1 jeżeli z 1 to do 0. 

  5. Wypakowujemy pliki na telefonie z archiwum.

  6. Przesyłamy plik lcd4android.page jako plik synchronizacyjny.

Aplikacja co 5 sekund odczytuje plik synchronizacyjny czy nadeszła na zmianę folderu i odczytu innego pliku html. 

Uwaga! Można także wysłać przez ADB bezprzewodowo, wystarczy zainstalować na telefonie program, np. adb wifi.
Na ten cel stworzyłem dla platformy Linux skrypt BASH adb_shell.sh (możesz pobrać z sekcji Download -> Skrypty)
Ważne aby mieć zainstalowany adb w systemie.
Mój skrypt może wysyłać dane przez ADB przez WiFi albo USB.
Ten  tryb ustawiamy w zmiennej type_connection – jeżeli chcemy wysyłać przez USB ustawiamy jako usb, jeżeli przez wifi – net.
Następnie w zależności od typu połączenia – jeżeli wybraliśmy WiFi ustawiamy zmienną connection_net, gdzie podajemy adres IP i port na którym działa ADB na telefonie, jeżeli wybraliśmy  USB w zmiennej connection_usb podajemy identyfikator telefonu. Możemy uzyskać go przez adb devices. 
W zmiennej path_files ustalamy, gdzie mamy zapisane pliki html i javascript, które mają być załadowane do telefonu. 
Dalsza część jest podzielona w zależności od wybranego połączenia, ale obie części wykonują te same czynności:
– pobiera ścieżkę, gdzie mają być załadowane pliki, z pliku ustawień aplikacji
– pakuje pliki z danego folderu na naszym komputerze
– ustala do którego folderu 0 czy 1 będzie załadowane archiwum zip
– wysyła archiwum do folderu do telefonu
– wypakowuje pliki na telefonie
– wysyła plik sychronizacji
 
W ten sposób na telefonie powinna pojawić się nowa zawartość.
Jako przykład wykorzystałem zegar z poprzedniej części. Wystarczy załadować archiwum i zegar pojawi się na ekranie telefonu.
 
Nota: W wersji 0.6 jest problem taki, że jeżeli korzystamy z usb to po zamknięciu i ponownym uruchomieniu aplikacji nie wiadomo dlaczego ponownie czyta plik z folderu 0. Powodem jest zmienna Constants.USB_PAGE która przyjmuje wartość 0 nawet jeżeli plik synchronizacyjny nie istnieje. Na szczęście jeżeli przyjdzie 2 nowa zawartość to zostanie wyświetlona.
 
 kody źródłowe: lcd4android_clock.zip (możesz pobrać z sekcji Download -> Skrypty)
 
Interfejs AndroidJS
W aplikacji został zaimplementowany specjalny interfejs o nazwie AndroidJS, który łączy JavaScript z Androidem. Nie wszystko da się zrobić z JS na Androidzie. Obecnie pozwala na odtworzenie alarmu pod funkcją PlayAlert(). Można dodać także inne pomocne funkcje.
 
PlayAlert() – odtwarza plik dźwiękowy – alarm na telefonie
Jako przykład został stworzony pasek, gdzie co sekundę pojawia się nowa wartość, gdy przekroczy 90% rozlega się dźwięk.
Ta funkcja może być użyta, gdy, np. zostało za mało pamięci w systemie.
Należy pamiętać, aby samemu ręcznie ustawić głośność dźwięku.
 
 kody źródłowe: lcd4android_randomprocessor.zip (możesz pobrać z sekcji Download -> Skrypty)
 
 
MENU opcje:
|- Choose connection type (Wybierz typ połączenia)
|- Server WWW (Serwer WWW)
|- Bluetooth 
|- Choose USB (Wybierz USB)
———————————————————————-
|- Change URL to Server (Zmień URL do Serwera)
|- Reload (Przeładuj [formatkę do wyświetlania informacji])
———————————————————————-
|- BT Connection type (Typ połączenia Bluetooth)
|—|- Secure connection (Bezpieczne połączenie)
|—|- Insecure connection (Niebezpieczne połączenie)
|—|- Secure and Insecure connection (Połączenie bezpieczne i niebezpieczne)
|—|- Make discoverable (Stwórz widzialnym urządzenie)
|—|- Pairing devices (Paruj urządzenia)
———————————————————————-
|- USB: Choose Storage (wybierz magazyn)
———————————————————————-
|- Close app (Zamknij aplikację)
 
 
FAQ:
1. Który typ połączenia jest najlepszy:
O: Według mnie połączenie typu serwer lub USB. W tych typach można wyświetlić skrypty javascript i obrazki. W Bluetooth tylko statyczny tekst.
2. Czy powstanie jakaś aplikacja serwerowa dla typu serwerowego?
O: Być może, ale tylko dla Linuksa.
3. Czy mogę jakoś rozwinąć projekt?
O: Oczywiście, jeżeli widzisz błędy, które jesteś w stanie naprawić, albo rozwinął projekt o jakieś znaczące funkcje, to możesz pobrać projekt z githuba na swój komputer, popracować nad swoją kopią i wysłać najlepiej wyniki do mnie na github. Nowe prośby o połączenie plików pojawią się w projekcie w sekcji Pull Requests. Zobaczę czy nowe zmiany są wartościowe.