veleuČiliŠte u rijeci odjel telematika - veleri.hrilište u rijeci izrada windows i android...
TRANSCRIPT
VELEUČILIŠTE U RIJECI
ODJEL TELEMATIKA
Dimitrij Vukelić
IZRADA WINDOWS I ANDROID APLIKACIJA KOJE
KOMUNICIRAJU PUTEM WI-FI
PROJEKTNA DOKUMENTACIJA
RIJEKA, 2012.
VELEUČILIŠTE U RIJECI
ODJEL TELEMATIKA
Veleučilište u Rijeci
Izrada windows i android aplikacija koje
komuniciraju putem Wi-Fi
SEMINARSKI RAD
Predmet: Projekt u telematici
Mentor: Marino Franušić, predavač
Student: Dimitrij Vukelić
Broj indeksa: JMBAG 2427004056
Studij: Telematika
Rijeka, prosinac 2012.
Sažetak
U doba naglog razvitka digitalnih tehnologija još više se povezuju komunikacije i tehnologije.
Računala postaju sve manja, a televizori sve više preuzimaju ulogu računala, daljinski
upravljači prestaju biti samo niz tipki kojima se samo mijenja program i glasnoća na uređaju.
Ovaj rad je zasnovan na osnovnoj pretpostavci da korisnici traže sve lakše načine korištenja
ulazno-izlaznih jedinica računala tj. da po mogućnosti upravljaju računalom iz kreveta.
Pretpostavka je da će klasične "miševe" i daljinske upravljače zamjeniti univerzalni uređaji
koji će koristeći akcelerometre korisnicima punuditi upravo to – pretraživanje interneta iz
udobne fotelje putem TV uređaja. Danas je moguće kupiti HDMI stick koji spajanjem na TV
pretvara televizijski prijemnik u računalo pogonjeno Ubuntu operativnim sustavom pa se
samim time i nameće potreba bežičnog upravljanja. Daljinsko upravljanje računalom će u
radu biti prikazano uz pomoć Android upravljanog mobilnog uređaja i PC softvera napisanog
u Javi koji komuniciraju međusobno putem WiFi LAN mreže.
Ključne riječi: komunikacija, računalo, akcelerometar, upravljanje
SADRŽAJ
1. Uvod ....................................................................................................................................... 1
2. Senzori .................................................................................................................................... 2
2.1. Akcelerometar ................................................................................................................. 3
3. Android operativni sustav ....................................................................................................... 5
4. Softver .................................................................................................................................... 6
4.1 Android aplikacija ............................................................................................................ 6
4.1.1 Izgled Android aplikacije ....................................................................................... 12
4.2 Desktop aplikacija .......................................................................................................... 13
5. Zaključak .............................................................................................................................. 16
Literatura .................................................................................................................................. 17
1
1. Uvod
Tehnologija svakim danom sve više napreduje i događa se obratni trend koji se javljao nakon
pojave GSM uređaja, manje je bolje, tako da sad postoje mobilni uređaji sa četverojezgrenim
procesorom i 6'' ekranom.
Još se više ubrzava tempo života i ljudima je prijenosno računalo postalo pre veliko, donekle
su ga zamjenili tablet računalima, ali i ona su ponekad pre velika dok je poslovni čovjek "u
hodu". Rapidnim povečanjem performansi mobilnih uređaja pojavljuje se i softver koji prati
taj razvoj pa sve više korisnika koristi mobilni uređaj za pisanje draft Word dokumenata ili
Excel tablica.
Drugi pravac je razvoj TV uređaja koji pomalo, ali sigurno, postaju računala. Sve više je
moguće vidjeti reklame za TV uređaje koji pokazuju potencijalnim kupcima kako je preko TV
prijemnika moguće koristiti You Tube servis npr, odnosno kupnjom HDMI sticka moguće je
TV prijemnik pretvoriti u računalo pogonjeno Android ili Linux operativnim sustavom.
Daljinski uređaj na koji su korisnici navikli pomalo odlazi u prošlost kao i "šuma" daljinskih
upravljača na stolu. Koristeći mobilni uređaj, u ovom radu je obrađen Android, ali je moguće
i Win ili iOS, krajnji korisnik će upravljati svojim računalom, TV uređajem, mikrovalnom ili
perilicom.
2
2. Senzori
Senzor ili detektor je uređaj koji mjeri fizičke veličine i pretvara ih u signale čitljive osobi ili
uređaju. Naj jednostavniji primjer je alkoholni ili živin toplomjer. Povećanjem temperature na
senzorskom dijelu dolazi do širenja medija i on se "podiže" u kapilarnoj cjevčici unutar
toplomjera pokazujući temperaturu.
Senzore je , kako je već navedeno ,konvektor ili pretvarač pa ih je moguće podjeliti po tipu
energije koju prenose:
Toplinski
◦ termometar
◦ termostat
◦ ...
Elektromagnetni
◦ metal detektor
◦ radar
◦ voltmetar
◦ ampermetar
◦ ....
Mehanički
◦ barometar
◦ barograf
◦ presostat
◦ senzor protoka fluida
◦ akcelerometar
◦ ....
Optički
◦ senzor udaljenosti
◦ IC senzor
◦ .....
......
3
2.1. Akcelerometar
Akcelerometar je mehanički tip senzora koji mjeri ubrzanje po jednoj, dvije ili tri osi.
Pojednostavljeno , akcelerometar, je lagani uteg na opruzi koji mijenja svoj polozaj zavisno
od sile akceleracije koja na njega djeluje. Za shvaćanje rada akcelerometra potrebno je
zamisliti uređaj kao na slici 1.
Izvor: http://i.imgur.com/DrwHY.jpg
Lagana kuglica je spojena sa oprugom i zbog sile gravitacije pokazuje odmak od 0g.
Izmjerena akceleracija po osi Z (okomito na zemlju) je uvijek 9.81 m/s pa je potrebno pri
izračunu uzeti vrijednost sile gravitacije i oduzeti je od izmjerene vrijednosti kako bi je
anulirali na pocetku. Taj postupak se naziva kalibracija.
Primjer. Izmjerena akceleracija po osi Z= 9.81 m/s , bez kalibracije uređaja uređaj očitava
vrijednost, prikazuje je korisniku i korisnik dobija informaciju da se uređaj "kreće" tj pada
prema zemlji, a on je u stvari u stanju mirovanja jer na njega djeluje sila gravitacije.
Ukoliko se uređaj ispravno kalibrira i od izmjerene vrijednosti se u softveru oduzme sila
gravitacije, akcelerometar ponovo izmjeri Z=9,81 m/s , ali sada softver korisniku prikazuje
Z=Z-9,81
Z= 9,81-9,91 = 0 m/s
ispravnu vrijednost jer se uređaj nalazi u stanju mirovanja.
Slika 1: Pojednostavljen akcelerometar
4
Današnji akcelereometri su izrađeni od silicija, malenih su dimenzija, mogu biti
dvodimenzionalni ili trodimenzionalni i ugrađuju se u sve "pametne telefone". Njihova
osnovna funkcija u telefonima je trivijalna, služe za zakretanje ekrana i igranje igrica.
U ovom radu su iskorištene dvije osi X i Y jer nije bilo potrebe koristiti oz Z za simulaciju
računalnog miša.
5
3. Android operativni sustav
Google Android je prvi otvoreni OS za mobilne uređaje. Prva verzija OS-a izlazi 2007
godine. Trenutno je na tržištu Android 4.2.1 Jelly Bean. Otvorenost platforme pomogla je
ubrzanom razvoju aplikacija i inačica OS-a, ali u isto vrijeme i unjela kaos među proizvođače
mobilnih uređaja jer svaki proizvođač, u pravilu, ima svoju prilagođenu inačicu OS-a koja
radi isključivo na njihovim uređajima. Još jedan problem je u nestandardizaciji rezolucija
ekrana mobilnih uređaja što programerima aplikacija za Android uređaje stvara probleme jer
se u večini slučajeva dešava da aplikacije ne izgledaju dobro, narušena funkcionalnost ili
preklapanje objekata na ekranu, što je ponekad jako frustrirajuće.
Android je zasnovan na jezgri Linux 2.6 i napisanom u C/C++ programskom jeziku i koristi
SQLlite DBMS za pohranu podataka. Arhitekturu Androida je moguće promatrati kao jedan
stog koji sadrži više razina.
Linux jezgra – driveri i međuprocesna komunikacija
knjižnice pisane u C/C++ programskom jeziku
Android Runtime – pokretanje aplikacija ima dva dijela:
◦ jezgrene knjiznice – core library za Java-u
◦ Dalvik virtualni stroj – pokreće aplikacije kao zasebne instance
Aplikacijski sloj – Application framework
◦ upotreba API-ja
Aplikacije
Zbog otvorenog sustava, programerima je izuzetno jednostavno pisati aplikacije koje koriste
hadver uređaja uz pomoc besplatne inačice Android razvojnog paketa – ADK ( Android
development kit) i Android virtualne mašine ADT ( Android development tools) u skladu sa
Eclipse IDE koji je korišten pri izradi ovog rada.
6
4. Softver
Softver je napisan u Eclipse IDE-u , u Java programskom okruženju. Ostvaren je kao server-
klijent aplikacija koristeći UDP konekciju. UDP je izabran zbog brzine i neosjetljivosti
procesa na povremeni gubitak paketa koji se može dogoditi jer nije izveden sa provjerom
dospjeća. Teško je odrediti koja aplikacija je server, a koja klijent jer se radi o dvosmjernoj
komunikaciji u kojoj obje aplikacije imaju jednake ovlasti.
4.1 Android aplikacija
Android aplikacija napisana je u MVC metodi – model , view i kontroler. Dvosmjerna
komunikacija odvija se na način da korisnik pomoću Android uređaja, koristeći
akcelerometar, zamjenjuje "miša" na serverskom računalu i zavibrira svaki puta kada pređe
preko natpisa "Roll" na serverskoj aplikaciji.
U modelu su dvije klase :
PostavkeModels – svi atributi potrebni za konekciju i provjere :
/**
* Definiranje varijabli konekcije klijenta i provjere */ private String server ="192.168.1.108"; // default postavke servera private boolean spajanje = false; private String potvrda =""; private InetAddress IP ; private boolean glavni = true; private int osjetljivost;
SenzoriModels – atributi senzora
/** * Definiranje varijabli prihvata senzora */ private String pomak_x = "0"; private String pomak_y = "0"; private String pomak_z = "0"; private float korekcija_x = 0; private float korekcija_y = 0; private float korekcija_z = 0;
7
private int lClick = 0; private int rClick = 0;
Kontroler ima jednu klasu , AndroidClientControllers, koja se brine o UDP konekciji, slanju i
primanju UDP datagrama.
Metoda slanja datagrama :
/** * {@code} Glavna metoda za slanje UDP datagrama * @throws IOException */ public void slanje(boolean salji) throws IOException{ // TODO Auto-generated method stub //spajanje(true); int port =5000; //postavke porta; InetAddress serverAddr = InetAddress.getByName(postavke.getServer()); byte[] sendBuf = new byte[256]; DatagramSocket socket = new DatagramSocket(port); while(postavke.isSpajanje() == true){ try { // Postavka IP adrese servera Log.d("UDP", "C: Connecting..."); /* Kreiranje stringa za slanje */ String paket = senzori.getPomak_x() + ";" + senzori.getPomak_y() + ";1" + ";" + senzori.getlClick() + ";" + senzori.getrClick(); String sendString = new String(paket); senzori.setlClick(0); senzori.setrClick(0); sendBuf = sendString.getBytes(); /*Kreiranje varijable za velicinu i slanje paketa*/ //Kreira datagram paket za slanje podataka DatagramPacket packet = new DatagramPacket(sendBuf, sendBuf.length, serverAddr, port); Log.d("UDP", "C: Sending: '" + new String(sendBuf) + "'"); //slanje podataka socket.send(packet); Thread.sleep(20); Log.d("UDP", "C: Sent."); Log.d("UDP", "C: Done.");
8
} catch (Exception e) { Log.e("UDP", "C: Error", e); } }
Metoda primanja datagrama:
/** * {@code} Glavna metoda za primanje UDP datagrama * @throws IOException */ public void vibracija() throws IOException{ //Kreira datagram paket za prihvat podataka String rcvString = ""; int port = 5100; postavke.setPotvrda(rcvString); if(postavke.getPotvrda().equals("")== true){ postavke.setPotvrda("0"); } byte[] rcvBuf = new byte[256]; //prihvacanje podataka try { DatagramSocket socket1 = new DatagramSocket(port); DatagramPacket rcvPacket = new DatagramPacket(rcvBuf, rcvBuf.length); socket1.receive(rcvPacket); rcvString = new String( rcvPacket.getData(), rcvPacket.getOffset(),rcvPacket.getLength() ); socket1.close(); } catch (SocketException e) { // TODO Auto-generated catch block System.out.println("tu puknem 1"); } catch (IOException e) { // TODO Auto-generated catch block System.out.println("tu puknem 2"); } if (rcvString.equals("1")) { postavke.setPotvrda("1"); try { Thread.sleep(50); } catch (InterruptedException e1) {
9
// TODO Auto-generated catch block e1.printStackTrace(); } }
Android ima malo drugačije definiranu view klasu za razliku od klasičnih Java aplikacija pa
je dijeli na dvije klase – XML koja definira prikaz na zaslonu i klasičnu Java klasu koja
definira kod i ponašanje aplikacije – main klasa aplikacije.
UdpAndroid – Main klasa
Primjeri koda :
/** * <{@code} Drzi ekran upaljen - OBVEZNO koristiti uz metodu vracanja na staro * nakon gasenja app /> * <@author http://stackoverflow.com/questions/5712849/how-do-i-keep-the-screen- * on-in-my-app 20.11.2012. /> */ final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); this.mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag"); this.mWakeLock.acquire(); /** * <{@code} Thread za primanje UDP datagrama /> */ final Thread slanje = new Thread(new Runnable() { public void run() { try { while (true) { kontroler.vibracija(); // Nova instanca Vibrator iz trenutnog Context-a Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // Vibrira 500 milisekundi v.vibrate(500); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } });slanje.start();
10
// Promjena stanja senzora public void onSensorChanged(final SensorEvent event) { synchronized (this) { /* Switch - case petlja odabira senzora */ switch (event.sensor.getType()) { case Sensor.TYPE_ACCELEROMETER: /* * Postavljanje dobivenih vrijednosti senzora i korekcija * kalibracijom */ if (event.values[0] < 0) senzori.setPomak_x(Float.toString(event.values[0]-senzori.getKorekcija_x())); else senzori.setPomak_x(Float.toString(event.values[0]+senzori.getKorekcija_x())); if (event.values[1] < 0) senzori.setPomak_y(Float.toString(event.values[1] + senzori.getKorekcija_y())); else senzori.setPomak_y(Float.toString(event.values[1] - senzori.getKorekcija_y())); if (event.values[2] < 0) senzori.setPomak_z(Float.toString(event.values[2] + senzori.getKorekcija_z())); else senzori.setPomak_z(Float.toString(event.values[2] - senzori.getKorekcija_z())); break;
activity_udp_android.xml - grafički prikaz
Primjer koda :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".UdpAndroid" > <ImageButton android:id="@+id/exit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/dclick" android:layout_alignTop="@+id/calibrate" android:layout_marginLeft="16dp" android:src="@drawable/exit" />
Pored MVC klasa Android projekt zahtjeva još jednu XML klasu – Android Manifest.XML,
koja definira sve dozvole i poveznica je aplikacije sa Dalvik virtualnom mašinom.
U toj xml datoteci definirani su :
11
minimalna verzija Androida na kojem aplikacija radi
naziv paketa glavne klase
dozvole za korištenje hardvera uređaja
ime aplikacije
inačica aplikacije
orijentacija ekrana...
Primjer xml datoteke :
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.vukelic.udpkontrola" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8" /> <!-- Potrebne dozvole za slanje i primanje UDP --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.vukelic.udpkontrola.UdpAndroid" android:label="@string/app_name" android:screenOrientation="portrait" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.vukelic.udpkontrola.Settings" android:label="@string/title_activity_settings" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="projekt.klijent_android.MainActivity" /> </activity> <activity android:name="com.vukelic.udpkontrola.Postavke"
12
android:label="@string/title_activity_postavke" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="projekt.klijent_android.MainActivity" /> </activity> </application> </manifest>
4.1.1 Izgled Android aplikacije
Legenda :
1. Lijeva i desna tipka "miša"
2. IP adresa servera
3. Polje za upis IP adrese
4. Potvrda IP adrese
5. Kalibracija senzora
6. Prekidač slanja podataka
7. Izlaz iz programa
Slika 2. Android aplikacija
13
4.2 Desktop aplikacija
Kao i Android aplikacija, desktop aplikacija je rađena u MVC metodi strogo odjeljujući
kontroler, view i model. Iako je zadatak bio napraviti windows aplikaciju, korištenjem swing
grafičkog sučelja autor je napravio multiplatformsku aplikaciju za Win, Linux i MacOS
okruženje. Programski kod desktop aplikacije ne razlikuje se previše od Android aplikacije
osim u view klasi i jednom malom dijelu kontroler klase koja definira kontrolu mousa
računala. U aplikaciji je bilo potrebno u odrediti rezoluciju ekrana i na taj način postaviti
granične vrijednosti koordinata mousa kako bi sve ispravno radilo.
Primjer koda:
//kreiranje Robot metoda za manipulaciju misem final Robot mouse = new Robot(); // Beskonacna petlja while(true ){ /** * Reset vrijednosti na 0 */ senzori.setSliderX("0"); senzori.setSliderY("0"); String provjera = "0"; String lclick ="0"; String rclick ="0"; //Kreira DatagramPacket za primanje podataka DatagramPacket packet = new DatagramPacket(rcvBuf,rcvBuf.length); senzori.setProvjera(false); //Prihvacanje podataka socket.receive( packet ); InetAddress address = packet.getAddress(); postavke.setIP(address.getHostAddress()); // System.out.println(packet); // System.out.println("ovo sam dobio " + senzori.getSliderX()); receivedString = new String(packet.getData(),packet.getOffset(), packet.getLength() ); String recive = receivedString.toString(); /** * Rastavljanje ulaza koristeci delimiter ";" i spremanje u polje stringova */ String delimiter = ";";
14
String[] primljeno = recive.split(delimiter); /* Provjerava ispravnost paketa, treca brojcana vrijednost u datagramu je 1 */ provjera = primljeno[2]; System.out.println(provjera + "ovo je provjera"); /** * Kreiranje podataka za mouse move */ lclick = primljeno[3]; rclick = primljeno[4]; // Math.round - zaokruzivanje na cijele brojeve senzori.setSliderX(String.valueOf(Math.round(Float.valueOf(primljeno[0])))); senzori.setSliderY(String.valueOf(Math.round(Float.valueOf(primljeno[1])))); if(Float.valueOf(primljeno[0]) < -0.50 || Float.valueOf(primljeno[0]) > 0.50 ){x = x - (Integer.parseInt(senzori.getSliderX())); } if(Float.valueOf(primljeno[1]) < -0.50 || Float.valueOf(primljeno[1]) > 0.50 ){y = y - (Integer.parseInt(senzori.getSliderY())); } /* Limitiranje vrijednosti x i y osi*/ if(x <= 0) x = 0; if(x >= senzori.getSirEkr()) x=senzori.getSirEkr(); if(y <= 0) y = 0; if(y >= senzori.getVisEkr()) y=senzori.getVisEkr(); //metoda postavljanja vrijednosti x i y pozicije misa (*3 je povecanje brzine) mouse.mouseMove(x, y);
15
Prikaz desktop aplikacije
Slika 3. Desktop aplikacija na Raspberry Pi -u
16
5. Zaključak
Aplikacija je testirana na laptop računalu i nije imala pravu funkcionalnost jer joj je namjena
sasvim drugačija. Nakon testiranja na Raspberry Pi računalu koje je zamišljeno za upravljanje
na daljinu, aplikacija je pokazala svoju punu snagu i vrijednost.Autor je doslovno iz trosjeda
svog dnevnog boravka upravljao računalom koje je spojeno na TV uređaj bez ikakve potrebe
za spajanjem bežičnog miša ili uzimanja daljinskog upravljača.Budućnost će pokazati da će
upravo ovakvi uređaji, bilo mobilni telefoni ili daljinski upravljači, ako ih tako uopće
budemo više zvali, zamjeniti klasične daljinske upravljače i računalne periferije, miševe i
tipkovnice.Autor je za potrebe seminara izradio aplikaciju koja se bežičnim putem spaja na
računalo i preuzima ulogu miša, ali samo malim preradama moguće je dobiti bežičnu
tipkovnicu i miš u jednom uređaju.Smanjenjem cijena Android tablet uređaja proboj na tržište
ovakvog softvera sve je izgledniji.
Mobilni telefoni pomalo preuzimaju funkcije glazbenog uređaja, video playera, kreditnih
kartica(NFC), adresara, računala, GPS navigacije, tajnice.
Koliko će vremena trebati dok mobilni telefoni ne zamjene i čovjeka samog?
17
Literatura
http://www.mobil.hr/novosti/zanimljivosti/mobitel-se-okrece-i-okrece-kako-radi-
akcelerometar-5085 ( 15.12.2012.)
http://visual.ly/brief-history-android (19.12.2012.)
http://www.tech2crack.com/history-android/ (5.1.2013)
Popis slika:
Slika 1. Pojednostavljeni akcelerometar ……………………............................... 3
Slika 2. Android aplikacija ……………………………………………………… 12
Slika 3. Desktop aplikacija na Raspberry Pi-u …………………………………... 15
Popis kratica:
TV – televizijski prijemnik
IDE – integrirano programsko okruženje ( eng. integrated development environment )
UDP –Protokol za slanje datagrama mrežom (eng. User Datagram Protocol )