6. Załączniki
Poniżej przedstawiamy instrukcję instalacji narzędzi wykorzystywanych w niniejszym dokumencie na komputerach z systemem Windows 7–10. Czytelnik powinien dostosować ją do swojego środowiska.
6.1. Instalacja Arduino IDE
Oficjalna strona Arduino to [http://www.arduino.cc/]. To właśnie tam można znaleźć środowisko programistyczne IDE dla płyt Arduino [http://arduino.cc/en/Main/Software]:
![]() | ![]() |
Pobrany plik [1] to plik ZIP, który po rozpakowaniu tworzy strukturę katalogów [2]. Program IDE można uruchomić, klikając dwukrotnie plik wykonywalny [3].
6.2. Instalacja sterownika Arduino
Aby program IDE mógł komunikować się z Arduino, urządzenie to musi zostać rozpoznane przez program hosta PC. W tym celu należy postępować w następujący sposób:
- podłączyć Arduino do portu USB komputera hosta;
- system spróbuje wówczas znaleźć sterownik nowego urządzenia USB. Nie uda mu się go znaleźć. Należy wówczas wskazać, że sterownik znajduje się na dysku w lokalizacji <arduino>/drivers, gdzie <arduino> to folder instalacyjny Arduino IDE.
6.3. Testy urządzenia IDE
Aby przetestować IDE, można postępować w następujący sposób:
- uruchomić IDE;
- podłączyć Arduino do PC za pomocą kabla USB. Na razie nie podłączaj karty sieciowej;
![]() | ![]() |
- w polu [1] wybierz typ płytki Arduino podłączonej do portu USB;
- w polu [2] należy wskazać port USB, do którego podłączone jest Arduino. Aby to sprawdzić, należy odłączyć Arduino i zanotować numery portów. Następnie należy ponownie podłączyć Arduino i sprawdzić numery portów: ten, który został dodany, to port Arduino;
Uruchom niektóre z przykładów zawartych w pliku IDE:
![]() |
Przykład został załadowany i wyświetlony:
![]() |
Przykłady dołączone do pliku IDE są bardzo pouczające i świetnie skomentowane. Kod Arduino jest napisany w języku C i składa się z dwóch wyraźnie oddzielnych części:
- funkcji [setup], która jest wykonywana tylko raz podczas uruchamiania aplikacji, czyli gdy jest ona „przesyłana ” z hosta PC na Arduino, albo gdy aplikacja jest już zainstalowana na Arduino i naciśnięty zostanie przycisk [Reset]. To właśnie tam umieszcza się kod inicjalizacyjny aplikacji;
- funkcję [loop], która jest wykonywana w sposób ciągły (pętla nieskończona). W tym miejscu umieszcza się główną część aplikacji.
Tutaj
- funkcja [setup] konfiguruje pin nr 13 jako wyjście;
- a funkcja [loop] wielokrotnie ją włącza i wyłącza: dioda LED zapala się i gaśnie co sekundę.
1 ![]() |
Wyświetlony program jest przesyłany (wgrywany) do Arduino za pomocą przycisku [1]. Po przesłaniu program uruchamia się, a dioda nr 13 zaczyna migać w nieskończoność.
6.4. Połączenie sieciowe Arduino
Arduino lub Arduino oraz host PC muszą znajdować się w tej samej sieci prywatnej:
![]() |
Jeśli jest tylko jedno Arduino, można je podłączyć do urządzenia hosta PC za pomocą zwykłego kabla RJ 45. Jeśli jest ich więcej niż jedno, host PC i urządzenia Arduino zostaną podłączone do tej samej sieci za pomocą mini-hubu.
Urządzenie hostujące PC oraz moduł Arduino zostaną podłączone do sieci prywatnej 192.168.2.x.
- Adres IP dla modułów Arduino jest ustalony w kodzie źródłowym. Zobaczymy, w jaki sposób;
- adres IP komputera hosta można ustawić w następujący sposób:
- wybierz opcję [Panneau de configuration\Réseau et Internet\Centre Réseau et partage]:
![]() |
- na [1], a następnie kliknąć link [Connexion au réseau local]
![]() | ![]() |
- w [2], wyświetlić właściwości połączenia;
- w [4], wyświetlić właściwości połączenia IP v4 [3];
![]() |
- w [5], podaj adres IP [192.168.2.1] komputerowi hosta;
- w polu [6] należy podać maskę sieciową [255.255.255.0];
- zatwierdzić całość w [7].
6.5. Testowanie aplikacji sieciowej
Za pomocą IDE załaduj przykład [Exemples / Ethernet / WebServer]:
/*
Web Server
A simple web server that shows the value of the analog input pins.
using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
* Analog inputs attached to pins A0 through A5 (optional)
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe
*/
#include <SPI.h>
#include <Ethernet.h>
// Wprowadź poniżej adres MAC i adres IP dla swojego kontrolera.
// Adres IP będzie zależał od Twojej sieci lokalnej:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);
// Zainicjuj bibliotekę serwera Ethernet
// przy użyciu adresu IP i portu, z którego chcesz korzystać
// (domyślnym portem dla HTTP jest port 80):
EthernetServer server(80);
void setup() {
// Otwórz komunikację szeregową i poczekaj na otwarcie portu:
Serial.begin(9600);
while (!Serial) {
; // poczekaj na nawiązanie połączenia przez port szeregowy. Wymagane tylko dla Leonardo
}
// uruchom połączenie Ethernet i serwer:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
void loop() {
// nasłuchiwanie przychodzących klientów
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
// żądanie HTTP kończy się pustą linią
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.write(c);
// jeśli dotarłeś do końca linii (otrzymałeś znak nowej linii
// i wiersz jest pusty, żądanie HTTP zostało zakończone,
// można więc wysłać odpowiedź
if (c == '\n' && currentLineIsBlank) {
// wyślij standardowy nagłówek odpowiedzi HTTP
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
// dodaj tag meta refresh, aby przeglądarka odświeżała stronę co 5 sekund:
client.println("<meta http-equiv=\"refresh\" content=\"5\">");
// wyświetl wartość każdego analogowego pinu wejściowego
for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
int sensorReading = analogRead(analogChannel);
client.print("analog input ");
client.print(analogChannel);
client.print(" is ");
client.print(sensorReading);
client.println("<br />");
}
client.println("</html>");
break;
}
if (c == '\n') {
// rozpoczynasz nową linię
currentLineIsBlank = true;
}
else if (c != '\r') {
// otrzymano znak w bieżącej linii
currentLineIsBlank = false;
}
}
}
// daj przeglądarce czas na odebranie danych
delay(1);
// zamknij połączenie:
client.stop();
Serial.println("client disconnected");
}
}
Ta aplikacja tworzy serwer WWW na porcie 80 (wiersz 30) pod adresem IP z wiersza 25. Adres MAC z linii 23 to adres MAC podany na karcie sieciowej Arduino.
Funkcja [setup] inicjuje serwer WWW:
- wiersz 34: inicjuje port szeregowy, na którym aplikacja będzie generować logi. Będziemy je śledzić;
- wiersz 41: inicjowany jest węzeł TCP-IP (IP, port);
- wiersz 42: serwer z wiersza 30 jest uruchamiany na tym węźle sieciowym;
- wiersze 43–44: rejestrujemy adres serwera WWW IP;
Funkcja [loop] implementuje serwer WWW:
- wiersz 50: jeśli klient łączy się z serwerem WWW, funkcja [server].available zwraca ten klient, w przeciwnym razie zwraca null;
- wiersz 51: jeśli klient nie jest null;
- wiersz 55: dopóki klient jest podłączony;
- wiersz 56: [client].available ma wartość true, jeśli klient wysłał znaki. Są one przechowywane w buforze. [client].available ma wartość true tak długo, jak długo bufor ten nie jest pusty;
- wiersz 57: odczytuje się znak wysłany przez klienta;
- wiersz 58: znak ten jest wyświetlany w konsoli logów;
- wiersz 62: w protokole HTTP klient i serwer wymieniają między sobą wiersze tekstu.
- klient wysyła żądanie HTTP do serwera WWW, przesyłając mu serię wierszy tekstu zakończoną pustym wierszem,
- serwer odpowiada wówczas klientowi, wysyłając mu odpowiedź i zamykając połączenie;
Wiersz 62: serwer nie wykonuje żadnych czynności na nagłówkach HTTP, które otrzymuje od klienta. Po prostu czeka na pusty wiersz: wiersz zawierający wyłącznie znak \n;
- wiersze 64–67: serwer wysyła do klienta standardowe wiersze tekstowe protokołu HTTP. Kończą się one pustym wierszem (wiersz 67);
- od wiersza 68 serwer wysyła dokument do klienta. Dokument ten jest generowany dynamicznie przez serwer i ma format HTML (wiersze 68–69);
- wiersz 71: specjalny wiersz HTML, który nakazuje przeglądarce klienta odświeżanie strony co 5 sekund. W ten sposób przeglądarka będzie żądać tej samej strony co 5 sekund;
- wiersze 73–80: serwer wysyła do przeglądarki klienta wartości z 6 wejść analogowych Arduino;
- wiersz 81: dokument HTML zostaje zamknięty;
- wiersz 82: wychodzimy z pętli while z wiersza 55;
- wiersz 97: połączenie z klientem zostaje zamknięte;
- wiersz 98: zdarzenie jest rejestrowane w konsoli logów;
- wiersz 100: powrót do początku funkcji loop: serwer ponownie zacznie nasłuchiwać klientów. Stwierdziliśmy, że przeglądarka klienta będzie ponownie żądać tej samej strony co 5 sekund. Serwer będzie gotowy, by ponownie na nią odpowiedzieć.
Zmodyfikuj kod w wierszu 25, wpisując adres IP swojego Arduino, na przykład:
Prześlij program do Arduino. Uruchom konsolę logów (Ctrl-M) (wielka litera M):
![]() | ![]() |
- w [1], konsola logów. Serwer został uruchomiony;
- w [2], za pomocą przeglądarki wysyłamy żądanie na adres IP urządzenia Arduino. Tutaj [192.168.2.2] jest domyślnie tłumaczone jako [http://198.162.2.2:80];
- w [3] – informacje wysłane przez serwer WWW. Jeśli wyświetlimy kod źródłowy strony w przeglądarce, otrzymamy:
Można tu rozpoznać wiersze tekstu wysłane przez serwer. Po stronie Arduino konsola logów wyświetla to, co wysyła do niej klient:
- wiersze 2–9: standardowe nagłówki HTTP;
- wiersz 10: pusty wiersz, który je kończy.
Przeanalizujcie dokładnie ten przykład. Pomoże wam on zrozumieć programowanie Arduino wykorzystywane w TP.
6.6. Biblioteka aJson
W programie TP, który ma zostać napisany, moduł Arduino wymienia z klientami wiersze tekstu w formacie jSON. Domyślnie Arduino IDE nie zawiera biblioteki do obsługi jSON. Zainstalujemy bibliotekę aJson dostępną na URL [https://github.com/interactive-matter/aJson].
![]() | ![]() |
- w [1], pobierz skompresowaną wersję z repozytorium GitHub;
- rozpakuj folder i skopiuj folder [aJson-master] [2] do folderu [<arduino>/libraries] [3], gdzie <arduino> to folder instalacyjnyIDE Arduino;
![]() | ![]() | ![]() |
- w [4], zmień nazwę tego folderu na [aJson];
- na [5], jego zawartość.
Teraz uruchom Arduino z plikiem IDE:
![]() |
Sprawdź, czy w sekcji przykładów znajdują się teraz przykłady dla biblioteki aJson. Uruchom i zapoznaj się z tymi przykładami.
6.7. Tablet z systemem Android
Przykłady zostały przetestowane na tablecie Samsung Galaxy Tab 2.
Aby przetestować przykłady na tablecie, należy najpierw zainstalować sterownik tego urządzenia na komputerze programistycznym. Sterownik tabletu Samsung Galaxy Tab 2 można znaleźć pod adresem URL [http://www.samsung.com/fr/support/usefulsoftware/KIES/]:
![]() |
Aby przetestować przykłady, należy podłączyć tablet do sieci (prawdopodobnie Wi-Fi) i poznać jego adres IP w tej sieci. Oto jak to zrobić (Samsung Galaxy Tab 2):
- włącz tablet;
- wśród aplikacji dostępnych na tablecie (w prawym górnym rogu) znajdź aplikację o nazwie [paramètres] z ikoną koła zębatego;
- w sekcji po lewej stronie włącz Wi-Fi;
- w sekcji po prawej stronie wybierz sieć Wi-Fi;
- po połączeniu się z siecią krótko dotknij wybranej sieci. Wyświetli się adres IP tabletu. Zapisz go. Będzie ci potrzebny;
Wciąż w aplikacji [Paramètres],
- po lewej stronie wybierz opcję [Options de développement] (na samym dole listy opcji);
- Sprawdź, czy po prawej stronie zaznaczona jest opcja [Débogage USB].
Aby powrócić do menu, kliknij na pasku stanu u dołu środkową ikonę przedstawiającą dom. Również na pasku stanu u dołu
- ikona po lewej stronie służy do cofania: powraca się do poprzedniego widoku;
- ikona po prawej stronie służy do zarządzania zadaniami. Można wyświetlić i zarządzać wszystkimi zadaniami wykonywanymi w danym momencie przez tablet;
Podłącz tablet do urządzenia PC za pomocą dołączonego kabla USB.
Podłącz klucz Wi-Fi do jednego z portów USB urządzenia PC, a następnie połącz się z tą samą siecią Wi-Fi, co tablet. Następnie w oknie DOS wpisz polecenie [ipconfig]:
Urządzenie PC posiada dwie karty sieciowe, a zatem dwa adresy IP:
- adres z wiersza 9, który należy do urządzenia PC w sieci przewodowej;
- ten z wiersza 17, który należy do urządzenia PC w sieci Wi-Fi;
Zapisz te dwie informacje. Będą Ci potrzebne. Obecnie masz następującą konfigurację:
![]() |
Tablet będzie musiał połączyć się z urządzeniem PC. Urządzenie to jest zazwyczaj chronione przez zaporę sieciową, która uniemożliwia jakimkolwiek podmiotom z zewnątrz nawiązanie połączenia z urządzeniem PC. Należy zatem wyłączyć zaporę sieciową. Można to zrobić za pomocą opcji [Panneau de configuration\Système et sécurité\Pare-feu Windows]. Czasami konieczne jest również wyłączenie zapory sieciowej skonfigurowanej przez program antywirusowy. Zależy to od konkretnego programu antywirusowego.
Teraz na urządzeniu PC sprawdź połączenie sieciowe z tabletem za pomocą polecenia [ping 192.168.1.y], gdzie [192.168.1.y] to adres IP tabletu. Powinieneś otrzymać wynik podobny do poniższego:
Wiersze 4–7 wskazują, że tablet o adresie IP [192.168.1.y] odpowiedział na polecenie [ping].
6.8. Instalacja urządzenia JDK
W pliku URL [http://www.oracle.com/technetwork/java/javase/downloads/index.html] (czerwiec 2016 r.) znajduje się najnowsza wersja JDK. Od tej pory folder instalacyjny pliku JDK będziemy nazywać <jdk-install>.
![]() |
6.9. Instalacja menedżera emulatorów Genymotion
Firma [Genymotion] oferuje wydajny emulator systemu Android. Jest on dostępny w wersji URL oraz [https://cloud.genymotion.com/page/launchpad/download/] (czerwiec 2016 r.).
Aby uzyskać wersję do użytku osobistego, należy się zarejestrować. Pobierz produkt [Genymotion] wraz z maszyną wirtualną VirtualBox:

Folder instalacyjny pliku [Genymotion] będziemy dalej nazywać <genymotion-install>. Uruchom plik [Genymotion]. Następnie pobierz obraz dla tabletu:
![]() |
- w pliku [1] dodaj terminal wirtualny opisany w pliku [2];
![]() |
- w pliku [3] skonfiguruj terminal;
![]() | ![]() |
- na [4-5], dostosuj terminal do swojego środowiska;
- w [6] uruchom wirtualny terminal;
Jeśli wszystko przebiegnie pomyślnie, pojawi się okno emulatora Androida:

Czasami emulator Androida nie uruchamia się. Na komputerze z systemem Windows warto sprawdzić dwie następujące rzeczy:
- sprawdź, czy maszyna wirtualna [Hyper-V] nie jest zainstalowana. W razie potrzeby odinstaluj ją ([1-2]);
![]() | ![]() |
- a następnie w kreatorze konfiguracji [Centre Réseau et partage] [1]:
![]() |
![]() | ![]() |
- w [3] wybierz kartę lub karty powiązane z maszyną wirtualną VirtualBox;
![]() |
- sprawdź, czy w [6] sterownik dla VirtualBox jest zaznaczony. Powtórz tę czynność dla wszystkich kart powiązanych z maszyną wirtualną VirtualBox;
6.10. Instalacja Mavena
Maven to narzędzie do zarządzania zależnościami projektu Java i nie tylko. Jest dostępne na URL [http://maven.apache.org/download.cgi].
![]() |
Pobierz i rozpakuj archiwum. Folder instalacyjny Mavena nazwiemy <maven-install>.
![]() |
- W pliku [1] plik [conf / settings.xml] konfiguruje Maven;
Znajdują się w nim następujące wiersze:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
Domyślna wartość w wierszu 4, jeśli tak jak u mnie wasz {user.home} ma spację w ścieżce (na przykład [C:\Users\Serge Tahé]), może stanowić problem dla niektórych programów. W takim przypadku należy wpisać coś w rodzaju:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>D:\Programs\devjava\maven\.m2\repository</localRepository>
i w wierszu 7 należy unikać ścieżki zawierającej spacje.
6.11. Instalacja IDE w Android Studio
IDE Android Studio Community Edition jest dostępne na stronie URL [https://developer.android.com/studio/index.html] (czerwiec 2016 r.):
![]() |
Zainstaluj IDE, a następnie uruchom program. Postępując zgodnie z instrukcją [1-8], zainstaluj elementy z SDK Manager wykorzystywane w poniższych przykładach. Jeśli zdecydujesz się zainstalować nowsze elementy, prawdopodobnie pojawią się ostrzeżenia z Android Studio informujące, że konfiguracja przykładów odwołuje się do elementów z pakietu SDK, które nie istnieją w Twoim środowisku. W takim przypadku możesz postępować zgodnie z sugestiami zawartymi w IDE.
![]() |
![]() |
![]() |
- w [9], poproś o wyświetlenie szczegółów pakietów:
![]() |
- w pliku [11] powyżej w przykładach wykorzystano narzędzie SDK Build-Tools 23.0.3;
- w przypadku [9-12] poniżej należy wskazać folder, w którym zainstalowano menedżera emulatorów [Genymotion];
![]() | ![]() |
- w pliku [13-18] należy skonfigurować domyślny typ projektów;
![]() | ![]() |
- w pliku [17] domyślna wartość jest zazwyczaj prawidłowa;
- w [18] upewnij się, że masz wersję JDK 1.8;
Poniżej, w pliku [19-26], wyłączamy sprawdzanie pisowni, które domyślnie jest ustawione dla języka angielskiego;
![]() | ![]() |
![]() |
- poniżej, w [27-28], wybierz żądany typ skrótów klawiszowych. Możesz zachować domyślne ustawienia IntelliJ lub wybrać te z innego IDE, do których jesteś bardziej przyzwyczajony;
![]() |
- poniżej, w polu [29-30], włącz wyświetlanie numerów linii w kodzie;
![]() |
- poniżej, w [31-34], wskaż, w jaki sposób chcesz zarządzać pierwszym projektem po uruchomieniu IDE, a następnie kolejnymi projektami;
![]() |
W systemie Android 2.1 (maj 2016 r.) technologia [Instant Run] czasami powoduje problemy. W niniejszym dokumencie wyłączyliśmy ją:
![]() | ![]() |
- w [3-4] wszystko zostało wyłączone;
6.12. Korzystanie z przykładów
Projekty Android Studio z przykładami są dostępne pod adresem ICI|. Pobierz je.
![]() |
Przykłady zostały skompilowane przy użyciu wcześniej zdefiniowanych elementów:
- JDK 1.8;
- Android SDK Platform 23 do uruchamiania;
Następujące narzędzia SDK:
![]() |
Jeśli Twoje środowisko nie odpowiada powyższemu, będziesz musiał zmienić konfigurację projektów. Może to być dość uciążliwe. Na początku prawdopodobnie łatwiej będzie odtworzyć środowisko pracy podobne do powyższego.
Uruchom Android Studio, a następnie otwórz na przykład projekt [exemple-07]:
![]() | ![]() |
![]() |
- w [1-3] otwieramy projekt [Exemple-07];
- w przypadku pliku [4] należy sprawdzić plik [local.properties];
![]() | ![]() |
- w wierszu 11 powyżej należy wpisać lokalizację menedżera Android <sdk-manager-install> dla pliku SDK. Można ją znaleźć, postępując zgodnie z procedurą [1-4]:
![]() |
Wszystkie przykłady w tym dokumencie to projekty Gradle skonfigurowane za pomocą pliku [build.gradle] [1-2]:
![]() |
Plik [build.gradle] z przykładu 07 wygląda następująco:
buildscript {
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
// zastąp aktualną wersją wtyczki Android
classpath 'com.android.tools.build:gradle:2.1.0'
// Od wersji 0.11 wtyczki Gradle dla systemu Android należy używać android-apt w wersji >= 1.3
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
apply plugin: 'com.android.application'
apply plugin: 'android-apt'
def AAVersion = '4.0.0'
dependencies {
apt "org.androidannotations:androidannotations:$AAVersion"
compile "org.androidannotations:androidannotations-api:$AAVersion"
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.4.0'
compile fileTree(dir: 'libs', include: ['*.jar'])
}
repositories {
jcenter()
}
apt {
arguments {
androidManifestFile variant.outputs[0].processResources.manifestFile
resourcePackageName android.defaultConfig.applicationId
}
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "android.exemples"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
W zależności od środowiska Android (SDK i narzędzi), które skonfigurowałeś, może zaistnieć konieczność zmiany wersji w wierszach 8, 21, 22, 38 i 39. Android Studio pomaga w tym, podając sugestie. Najprościej jest po prostu z nich skorzystać.
Dostęp do elementów pliku [build.gradle] można uzyskać w inny sposób:
![]() | ![]() |
- różne zakładki pliku [3] zawierają różne wartości z pliku [build.gradle]. Można więc utworzyć ten plik w ten sposób, co pozwala uniknąć problemów ze składnią pliku [build.gradle];
Kolejną kwestią do sprawdzenia jest plik JDK wykorzystywany przez pliki IDE i [5]:
![]() |
W pliku [6] należy sprawdzić plik JDK.
Wszystkie przykłady to projekty Gradle zawierające zależności do pobrania. Aby to zrobić, można postępować w następujący sposób:
![]() | ![]() ![]() |
- w pliku [5] należy skompilować projekt;
Gdy projekt nie zawiera już błędów, należy utworzyć konfigurację uruchomienia [1-8]:
![]() | ![]() |
- w [8] można zaznaczyć, że zawsze chcemy używać tego samego terminala do uruchamiania. Zazwyczaj ta opcja jest zaznaczona, aby uniknąć konieczności określania terminala przy każdym nowym uruchomieniu. Tutaj pozostawiamy ją niezaznaczoną, ponieważ zamierzamy testować różne urządzenia z systemem Android;
- po utworzeniu konfiguracji uruchamiania uruchamiamy menedżera emulatorów Androida [1-3];
![]() | ![]() |
- jeśli emulator Androida nie uruchamia się, sprawdź punkty wymienione w paragrafie 6.11;
Aby uruchomić aplikację na emulatorze, należy postępować w następujący sposób [1-4]:
![]() | ![]() |
- w [2] powinien pojawić się emulator, który wcześniej uruchomiłeś;
![]() |
- w [5] – widok wyświetlany przez emulator;
Podłącz teraz tablet z systemem Android do portu USB urządzenia PC i uruchom na nim aplikację:
![]() |
- W [6] wybierz tablet z systemem Android i przetestuj aplikację.
W [7] mamy wstępnie zdefiniowane terminale wirtualne. Nauczymy się, jak dodawać i usuwać terminale.
![]() |
![]() |
Na powyższym zrzucie ekranu wszystkie proponowane terminale działają z API 22. Usuwamy je wszystkie, ponieważ chcemy pracować z API 23. Postępujemy zgodnie z procedurą [2-3] dotyczącą terminali, które mają zostać usunięte.

![]() |
- w [4-5] dodajemy tablet;
![]() |
- w [6] wybieramy API. Powyżej wybieramy API 23 dla systemu Windows 64-bitowego;
![]() |
- w [7] – podsumowanie dokonanej konfiguracji;
- w [8] można przeprowadzić bardziej zaawansowaną konfigurację terminala wirtualnego;
![]() |
Po zakończeniu pracy kreatora utworzony terminal pojawia się w pliku [9].
Po wykonaniu tej czynności, jeśli ponownie uruchomimy plik [Exemple-07], pojawi się następujące okno:
![]() |
- w [1] pojawia się nowy terminal wirtualny;
- w [2] można tworzyć nowe terminale;
Przeprowadź testy, aby określić, który terminal wirtualny najlepiej pasuje do Twojego komputera. W niniejszym dokumencie przykłady zostały przetestowane głównie przy użyciu emulatora Genymotion.
Niezależnie od wybranego terminala wirtualnego, logi są wyświetlane w oknie o nazwie [Logcat] [1-2]:

Należy regularnie sprawdzać te logi. To właśnie tam będą zgłaszane wyjątki, które spowodowały awarię programu.
Można również debugować program za pomocą standardowych narzędzi do debugowania:
![]() | ![]() |
- w [2] ustawia się punkt zatrzymania, klikając raz w kolumnę po lewej stronie docelowego wiersza. Kolejne kliknięcie usuwa punkt zatrzymania;
![]() |
- w pliku [3], w punkcie zatrzymania należy wykonać:
- [F6], aby wykonać wiersz bez wchodzenia do metod, jeśli wiersz zawiera wywołania metod,
- [F5], aby wykonać wiersz, wchodząc do metod, jeśli wiersz zawiera wywołania metod,
- [F8], aby przejść do następnego punktu zatrzymania;
- [Ctrl-F2], aby zatrzymać debugowanie;
6.13. Instalacja rozszerzenia Chrome [Advanced Rest Client]
W niniejszym dokumencie korzystamy z przeglądarki Chrome firmy Google (http://www.google.fr/intl/fr/chrome/browser/). Dodamy do niej rozszerzenie [Advanced Rest Client] . Można to zrobić w następujący sposób:
- wejść na stronę [Google Web store] (https://chrome.google.com/webstore) w przeglądarce Chrome;
- wyszukaj aplikację [Advanced Rest Client]:
![]() |
- aplikacja jest wtedy dostępna do pobrania:
![]() |
- aby ją pobrać, należy utworzyć konto Google. Aplikacja [Google Web Store] prosi następnie o potwierdzenie [1]:
![]() | ![]() |
- W [2] dodane rozszerzenie jest dostępne w opcji [Applications] [3]. Opcja ta jest wyświetlana na każdej nowej karcie, którą tworzysz (CTRL-T) w przeglądarce.
6.14. Zarządzanie frameworkiem QZXW2 P004335ZQX w Javie
W sposób niezauważalny dla programisty framework [Spring MVC] korzysta z biblioteki jSON [Jackson]. Aby zilustrować, czym jest jSON (JavaScript Object Notation), przedstawiamy tutaj program, który serializuje obiekty do formatu jSON oraz wykonuje odwrotną operację, deserializując wygenerowane ciągi znaków jSON w celu odtworzenia pierwotnych obiektów.
Biblioteka „Jackson” umożliwia utworzenie:
- ciągu jSON z obiektu: new ObjectMapper().writeValueAsString(object);
- obiektu na podstawie ciągu znaków jSON: new ObjectMapper().readValue(jsonString, Object.class).
Obie metody mogą wywołać błąd IOException. Oto przykład.
![]() |
Powyższy projekt to projekt Maven zawierający następujący plik [pom.xml]:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>istia.st.pam</groupId>
<artifactId>json</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.3</version>
</dependency>
</dependencies>
</project>
- wiersze 12–16: zależność, która wprowadza bibliotekę „Jackson”;
Klasa [Personne] wygląda następująco:
package istia.st.json;
public class Personne {
// dane
private String nom;
private String prenom;
private int age;
// konstruktorzy
public Personne() {
}
public Personne(String nom, String prénom, int âge) {
this.nom = nom;
this.prenom = prénom;
this.age = âge;
}
// podpis
public String toString() {
return String.format("Personne[%s, %s, %d]", nom, prenom, age);
}
// metody pobierające i ustawiające
...
}
Klasa [Main] wygląda następująco:
package istia.st.json;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class Main {
// narzędzie do serializacji / deserializacji
static ObjectMapper mapper = new ObjectMapper();
public static void main(String[] args) throws IOException {
// tworzenie osoby
Personne paul = new Personne("Denis", "Paul", 40);
// wyświetlanie JSON
String json = mapper.writeValueAsString(paul);
System.out.println("Json=" + json);
// instancjonowanie obiektu Personne na podstawie danych JSON
Personne p = mapper.readValue(json, Personne.class);
// wyświetlanie osoby
System.out.println("Personne=" + p);
// tablica
Personne virginie = new Personne("Radot", "Virginie", 20);
Personne[] personnes = new Personne[]{paul, virginie};
// wyświetlanie JSON
json = mapper.writeValueAsString(personnes);
System.out.println("Json personnes=" + json);
// słownik
Map<String, Personne> hpersonnes = new HashMap<String, Personne>();
hpersonnes.put("1", paul);
hpersonnes.put("2", virginie);
// wyświetlanie JSON
json = mapper.writeValueAsString(hpersonnes);
System.out.println("Json hpersonnes=" + json);
}
}
Wykonanie tej klasy powoduje wyświetlenie następującego ekranu:
Z przykładu należy zapamiętać:
- obiekt [ObjectMapper] wymagany do transformacji jSON / Obiekt: wiersz 11;
- transformacja [Personne] --> jSON: wiersz 17;
- transformacja jSON → [Personne]: wiersz 20;
- wyjątek [IOException] wywołany przez obie metody: wiersz 13.
6.15. Instalacja [WampServer]
[WampServer] to pakiet oprogramowania służący do tworzenia aplikacji w PHP / MySQL / Apache na komputerze z systemem Windows. Będziemy go używać wyłącznie dla SGBD i MySQL.
![]() | ![]() |
- na stronie [WampServer] [1] należy wybrać odpowiednią wersję [2],
- pobrany plik wykonywalny jest instalatorem. Podczas instalacji wymagane jest podanie różnych informacji. Nie dotyczą one programu MySQL. Można je zatem pominąć. Po zakończeniu instalacji wyświetla się okno [3]. Uruchamia się [WampServer],
![]() | ![]() |
- w [4], ikona [WampServer] zostanie umieszczona na pasku zadań w prawym dolnym rogu ekranu [4],
- po kliknięciu na nią wyświetla się menu [5]. Umożliwia ono zarządzanie serwerem Apache oraz SGBD i MySQL. Aby nim zarządzać, należy skorzystać z opcji [PhpPmyAdmin],
- po czym pojawia się poniższe okno,

Nie będziemy szczegółowo omawiać korzystania z [PhpMyAdmin]. Sposób jego użycia pokazujemy w dokumencie.





























































































