Skip to content

6. Додатки

Тут ми розповімо, як встановити інструменти, що використовуються в цьому документі, на комп’ютерах з ОС Windows 7–10. Читач повинен адаптувати інструкції до свого середовища.

6.1. Встановлення Arduino IDE

Офіційний сайт Arduino — [http://www.arduino.cc/]. Саме там можна знайти середовище розробки IDE для Arduino [http://arduino.cc/en/Main/Software]:

 

Завантажений файл [1] — це архів у форматі zip, який після розпакування утворює структуру каталогів [2]. Запустити IDE можна, двічі клацнувши на виконуваному файлі [3].

6.2. Встановлення драйвера для Arduino

Щоб IDE міг взаємодіяти з Arduino, останній має бути розпізнаний хост-пристроєм PC. Для цього слід виконати такі дії:

  • підключіть Arduino до порту USB хост-комп’ютера;
  • після чого система спробує знайти драйвер для нового пристрою USB. Вона його не знайде. Тоді вкажіть, що драйвер знаходиться на диску в папці <arduino>/drivers, де <arduino> — це папка, в яку встановлено Arduino IDE.

6.3. Тестування IDE

Щоб протестувати IDE, можна вчинити наступним чином:

  • запустити IDE;
  • підключити Arduino до PC за допомогою кабелю USB. Наразі не підключайте мережеву карту;
  • у [1] виберіть тип плати Arduino, підключеної до порту USB;
  • у полі [2] вкажіть порт USB, до якого підключено Arduino. Щоб це з’ясувати, від’єднайте Arduino та запишіть номери портів. Під’єднайте його знову та ще раз перевірте номери портів: той, що з’явився, і є портом Arduino;

Виконайте деякі з прикладів, що містяться у файлі IDE:

 

Приклад завантажено та відображено:

 

Приклади, що додаються до IDE, є дуже навчальними та мають чудові коментарі. Код Arduino написаний мовою C і складається з двох чітко розмежованих частин:

  • функції [setup], яка виконується лише один раз під час запуску програми, тобто коли вона «завантажується » з хоста PC на Arduino, або коли додаток уже присутній на Arduino і натискається кнопка [Reset]. Саме тут розміщується код ініціалізації додатка;
  • функцію [loop], яка виконується безперервно (нескінченний цикл). Саме тут розміщується основна частина програми.

Тут

  • функція [setup] налаштовує вивід № 13 як вихід;
  • функція [loop] по черзі вмикає та вимикає його: світлодіод вмикається та вимикається щосекунди.
1
 

Відображена програма передається (завантажується) на Arduino за допомогою кнопки [1]. Після завантаження вона виконується, і світлодіод № 13 починає безперервно блимати.

6.4. Мережеве підключення Arduino

Arduino або Arduino та хост PC повинні перебувати в одній приватній мережі:

Якщо є лише один Arduino, його можна підключити до хост-пристрою PC за допомогою простого кабелю RJ 45. Якщо їх більше одного, хост PC та Arduino будуть підключені до однієї мережі за допомогою міні-хаба.

Хост PC та Arduino будуть підключені до приватної мережі 192.168.2.x.

  • Адреса IP для Arduino задається у вихідному коді. Ми розглянемо, як саме;
  • адресу хост-комп’ютера IP можна встановити наступним чином:
  • виберіть опцію [Panneau de configuration\Réseau et Internet\Centre Réseau et partage]:
 
  • на [1], перейдіть за посиланням [Connexion au réseau local]
  • в [2], переглянути властивості з’єднання;
  • у [4] переглянути властивості IP v4 [3] з’єднання;
 
  • у [5], вказати адресу IP [192.168.2.1] хост-комп'ютеру;
  • у [6] вкажіть маску мережі [255.255.255.0];
  • підтвердити все в [7].

6.5. Тестування мережевої програми

За допомогою IDE завантажте приклад [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>
#включити <Ethernet.h>

// Введіть нижче адресу MAC та адресу IP для вашого контролера.
// Адреса IP залежатиме від вашої локальної мережі:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 177);

// Ініціалізуйте бібліотеку Ethernet-сервера
// за допомогою адреси IP та порту, який ви хочете використовувати 
// (за замовчуванням для HTTP використовується порт 80):
EthernetServer server(80);

void setup() {
// Відкрити послідовний канал зв’язку та очікувати відкриття порту:
  Serial.begin(9600);
   while (!Serial) {
    ; // дочекатися підключення послідовного порту. Потрібно лише для Leonardo
  }


  // запустити Ethernet-з'єднання та сервер:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
  // очікування вхідних клієнтів
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // HTTP-запит закінчується порожнім рядком
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // якщо ви дійшли до кінця рядка (отримали символ нового рядка
        // ) і рядок порожній, HTTP-запит завершився,
        // тож можна надіслати відповідь
        if (c == '\n' && currentLineIsBlank) {
          // надішліть стандартний заголовок відповіді 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>");
                    // додайте тег meta refresh, щоб браузер оновлював сторінку кожні 5 секунд:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // вивести значення кожного аналогового вхідного виводу
          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') {
          // ви починаєте новий рядок
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // отримано символ у поточному рядку
          currentLineIsBlank = false;
        }
      }
    }
    // дайте веб-браузеру час на отримання даних
    delay(1);
    // закрити з'єднання:
    client.stop();
    Serial.println("client disconnected");
  }
}

Цей додаток створює веб-сервер на порту 80 (рядок 30) за адресою IP із рядка 25. Адреса MAC у рядку 23 — це адреса MAC, вказана на мережевій карті Arduino.

Функція [setup] ініціалізує веб-сервер:

  • рядок 34: ініціалізує послідовний порт, через який програма буде вести журнали. Ми будемо стежити за ними;
  • рядок 41: ініціалізується вузол TCP-IP (IP, порт);
  • рядок 42: сервер із рядка 30 запускається на цьому мережевому вузлі;
  • рядки 43–44: записується в журнал адреса IP веб-сервера;

Функція [loop] реалізує веб-сервер:

  • рядок 50: якщо клієнт підключається до веб-сервера, [server].available повертає цього клієнта, інакше повертає null;
  • рядок 51: якщо клієнт не є null;
  • рядок 55: доки клієнт підключений;
  • рядок 56: [client].available має значення «true», якщо клієнт надіслав символи. Вони зберігаються в буфері. [client].available має значення «true», доки цей буфер не порожній;
  • рядок 57: зчитується символ, надісланий клієнтом;
  • рядок 58: цей символ відображається у консолі журналу;
  • рядок 62: у протоколі HTTP клієнт і сервер обмінюються рядками тексту.
    • клієнт надсилає запит HTTP на веб-сервер, передаючи йому серію текстових рядків, що закінчується порожнім рядком,
    • потім сервер відповідає клієнту, надсилаючи йому відповідь і закриваючи з’єднання;

Рядок 62: сервер не виконує жодних дій із заголовками HTTP, які він отримує від клієнта. Він просто чекає на порожній рядок: рядок, що містить лише один символ \n;

  • рядки 64–67: сервер надсилає клієнту стандартні текстові рядки протоколу HTTP. Вони закінчуються порожнім рядком (рядок 67);
  • починаючи з рядка 68, сервер надсилає документ своєму клієнту. Цей документ динамічно генерується сервером і має формат HTML (рядки 68–69);
  • рядок 71: особливий рядок HTML, який вимагає від браузера-клієнта оновлювати сторінку кожні 5 секунд. Таким чином, браузер буде запитувати ту саму сторінку кожні 5 секунд;
  • рядки 73–80: сервер надсилає клієнтському браузеру значення 6 аналогових входів Arduino;
  • рядок 81: документ HTML закривається;
  • рядок 82: відбувається вихід із циклу while з рядка 55;
  • рядок 97: з'єднання з клієнтом закрито;
  • рядок 98: подія записується в консоль журналу;
  • рядок 100: повернення до початку функції loop: сервер знову почне очікувати запитів від клієнтів. Ми вже зазначали, що браузер клієнта буде повторно запитувати ту саму сторінку кожні 5 секунд. Сервер буде готовий знову надати йому відповідь.

Змініть код у рядку 25, вказавши адресу IP вашого Arduino, наприклад:

IPAddress ip(192,168,2,2);

Завантажте програму на Arduino. Запустіть консоль журналів (Ctrl-M) (M з великої літери):

  • у [1], консоль журналу. Сервер запущено;
  • у [2] за допомогою браузера звертаємося за адресою IP Arduino. Тут [192.168.2.2] за замовчуванням перекладається як [http://198.162.2.2:80];
  • у [3] — інформація, надіслана веб-сервером. Якщо переглянути вихідний код сторінки в браузері, отримаємо:
<!DOCTYPE HTML>
<html>
<meta http-equiv="refresh" content="5">
analog input 0 is 1023<br />
analog input 1 is 1023<br />
analog input 2 is 727<br />
analog input 3 is 543<br />
analog input 4 is 395<br />
analog input 5 is 310<br />
</html>

Тут можна впізнати рядки тексту, надіслані сервером. З боку Arduino консоль журналів відображає те, що клієнт надсилає їй:

new client
GET /favicon.ico HTTP/1.1
Host: 192.168.2.2
Connection: keep-alive
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

client disconnected
  • рядки 2–9: стандартні заголовки HTTP;
  • рядок 10: порожній рядок, що їх завершує.

Уважно вивчіть цей приклад. Він допоможе вам зрозуміти програмування Arduino, яке використовується в TP.

6.6. Бібліотека aJson

У програмі TP, яку потрібно написати, Arduino обмінюється рядками тексту у форматі jSON зі своїми клієнтами. За замовчуванням Arduino IDE не містить бібліотеки для роботи з jSON. Ми встановимо бібліотеку aJson, доступну на URL [https://github.com/interactive-matter/aJson].

  • у [1], завантажте архівну версію з репозиторію Github;
  • розпакуйте папку та скопіюйте папку [aJson-master] [2] у папку [<arduino>/libraries] [3], де <arduino> — це папка встановленняIDE Arduino;
  • у [4], перейменуйте цю папку на [aJson];
  • в [5] — його вміст.

Тепер запустіть Arduino-програму IDE:

 

Переконайтеся, що в розділі «Приклади» тепер є приклади для бібліотеки aJson. Запустіть і вивчіть ці приклади.

6.7. Планшет на базі Android

Приклади було протестовано на планшеті Samsung Galaxy Tab 2.

Щоб протестувати приклади на планшеті, спочатку потрібно встановити драйвер цього пристрою на вашу машину для розробки. Драйвер для планшета Samsung Galaxy Tab 2 можна знайти за посиланням URL [http://www.samsung.com/fr/support/usefulsoftware/KIES/]:

 

Щоб протестувати приклади, вам потрібно підключити планшет до мережі (ймовірно, Wi-Fi) та знати його адресу IP у цій мережі. Ось як це зробити (Samsung Galaxy Tab 2):

  • увімкніть планшет;
  • знайдіть серед доступних на планшеті додатків (у правому верхньому куті) додаток під назвою [paramètres] із піктограмою шестерні;
  • у розділі ліворуч увімкніть Wi-Fi;
  • у правій панелі виберіть мережу Wi-Fi;
  • після підключення до мережі коротко натисніть на обрану мережу. З’явиться адреса планшета IP. Запишіть її. Вона вам знадобиться;

Все ще в додатку [Paramètres],

  • зліва виберіть опцію [Options de développement] (у самому низу списку опцій);
  • переконайтеся, що праворуч встановлено галочку біля опції [Débogage USB].

Щоб повернутися до меню, натисніть у нижній панелі стану на середню іконку — у вигляді будиночка. Також у нижній панелі стану

  • найлівіша іконка — це іконка «назад»: ви повернетеся до попереднього екрана;
  • іконка, що знаходиться найдалі праворуч, — це іконка управління завданнями. Ви можете переглядати та керувати всіма завданнями, що виконуються вашим планшетом у даний момент;

Підключіть планшет до пристрою PC за допомогою кабелю USB, що входить до комплекту.

Встановіть Wi-Fi-адаптер в один із портів USB пристрою PC, а потім підключіться до тієї самої мережі Wi-Fi, що й планшет. Після цього у вікні DOS введіть команду [ipconfig]:

dos>ipconfig

Configuration IP de Windows

Carte Ethernet Connexion au réseau local :

   Suffixe DNS propre à la connexion. . . :
   Adresse IPv6 de liaison locale. . . . .: fe80::698b:455a:925:6b13%4
   Adresse IPv4. . . . . . . . . . . . . .: 192.168.2.1
   Masque de sous-réseau. . . . . . . . . : 255.255.255.0
   Passerelle par défaut. . . . . . . . . :

Carte réseau sans fil Wi-Fi :

   Suffixe DNS propre à la connexion. . . :
   Adresse IPv6 de liaison locale. . . . .: fe80::39aa:47f6:7537:f8e1%2
   Adresse IPv4. . . . . . . . . . . . . .: 192.168.1.25
   Masque de sous-réseau. . . . . . . . . : 255.255.255.0
Passerelle par défaut. . . . . . . . . : 192.168.1.1

Ваш PC має дві мережеві карти і, відповідно, дві адреси IP:

  • адреса в рядку 9 — це адреса пристрою PC у дротовій мережі;
  • адреса в рядку 17 — це адреса PC у мережі Wi-Fi;

Запишіть ці дві адреси. Вони вам знадобляться. Тепер у вас така конфігурація:

Планшет повинен підключитися до вашого PC. Зазвичай він захищений брандмауером, який не дозволяє зовнішнім елементам встановити з’єднання з PC. Тому вам потрібно вимкнути брандмауер. Зробіть це за допомогою опції [Panneau de configuration\Système et sécurité\Pare-feu Windows]. Іноді доводиться додатково вимкнути брандмауер, встановлений антивірусом. Це залежить від вашого антивіруса.

Тепер на вашому PC перевірте мережеве з’єднання з планшетом за допомогою команди [ping 192.168.1.y], де [192.168.1.y] — це адреса IP планшета. Ви повинні отримати щось на зразок цього:

dos>ping 192.168.1.26

Envoi d'une requête 'Ping'  192.168.1.26 avec 32 octets de données :
Réponse de 192.168.1.26 : octets=32 temps=244 ms TTL=64
Réponse de 192.168.1.26 : octets=32 temps=199 ms TTL=64
Réponse de 192.168.1.26 : octets=32 temps=28 ms TTL=64
Réponse de 192.168.1.26 : octets=32 temps=88 ms TTL=64

Statistiques Ping pour 192.168.1.26:
    Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
Minimum = 28ms, Maximum = 244ms, Moyenne = 139ms

Рядки 4–7 вказують, що планшет з адресою IP [192.168.1.y] відповів на команду [ping].

6.8. Встановлення JDK

У URL [http://www.oracle.com/technetwork/java/javase/downloads/index.html] (червень 2016 р.) міститься найновіша версія JDK. Надалі папку з інсталяцією JDK будемо називати <jdk-install>.

 

6.9. Встановлення менеджера емуляторів Genymotion

Компанія [Genymotion] пропонує потужний емулятор Android. Він доступний у версіях URL та [https://cloud.genymotion.com/page/launchpad/download/] (червень 2016 р.).

Щоб отримати версію для особистого користування, вам потрібно зареєструватися. Завантажте продукт [Genymotion] разом із віртуальною машиною VirtualBox:

Image

Надалі папку з інсталяційними файлами [Genymotion] ми будемо називати <genymotion-install>. Запустіть [Genymotion]. Потім завантажте образ для планшета:

 
  • у [1] додайте віртуальний термінал, описаний у [2];
 
  • у [3] налаштуйте термінал;
  • на [4-5], налаштуйте термінал відповідно до вашого середовища;
  • у [6] запустіть віртуальний термінал;

Якщо все пройшло успішно, з’явиться вікно емулятора Android:

Image

Іноді емулятор Android не запускається. На комп’ютері з Windows слід перевірити наступні два пункти:

  • перевірте, чи не встановлено віртуальну машину [Hyper-V]. За потреби видаліть її [1-2];
  • а потім у майстрі налаштування [Centre Réseau et partage] [1]:
 
  • у [3] виберіть карту або карти, пов’язані з віртуальною машиною Virtual Box;
 
  • переконайтеся, що в [6] драйвер для VirtualBox відмічений галочкою. Повторіть цю операцію для всіх мережевих карт, пов'язаних із віртуальною машиною Virtual Box;

6.10. Встановлення Maven

Maven — це інструмент для управління залежностями Java-проекту та багато іншого. Він доступний на URL [http://maven.apache.org/download.cgi].

 

Завантажте та розпакуйте архів. Папку для встановлення Maven ми назвемо <maven-install>.

  
  • У файлі [1] файл [conf / settings.xml] налаштовує Maven;

У ньому містяться такі рядки:


  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
-->

Значення за замовчуванням у рядку 4, якщо, як у моєму випадку, ваш {user.home} містить пробіл у шляху (наприклад, [C:\Users\Serge Tahé]), може спричинити проблеми в роботі деяких програм. Тоді слід вказати щось на кшталт:


  <!-- 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>

і в рядку 7 слід уникати шляху, що містить пробіли.

6.11. Встановлення IDE Android Studio

IDE Android Studio Community Edition доступна на URL [https://developer.android.com/studio/index.html] (червень 2016 року):

 

Встановіть IDE, а потім запустіть його. Дотримуючись інструкцій [1-8], встановіть компоненти SDK Manager, які використовуються в наведених нижче прикладах. Якщо ви вирішите встановити новіші компоненти, Android Studio, ймовірно, видасть попередження про те, що конфігурація прикладів посилається на компоненти SDK, яких немає у вашому середовищі. У такому разі ви зможете скористатися рекомендаціями, наведеними в IDE.

 
 
  • у [9], перегляньте детальну інформацію про пакети:
  • у [11] вище в прикладах використовувалися інструменти збірки SDK версії 23.0.3;
  • у [9-12] нижче вкажіть папку, в яку ви встановили менеджер емуляторів [Genymotion];
  • у [13-18] налаштовується тип проектів за замовчуванням;
  • у файлі [17] значення, запропоноване за замовчуванням, зазвичай є правильним;
  • у [18] переконайтеся, що у вас встановлено JDK версії 1.8;

Нижче, у [19-26], вимикається перевірка орфографії, яка за замовчуванням налаштована для англійської мови;

 
  • Нижче, у [27-28], виберіть бажаний тип комбінацій клавіш. Ви можете залишити стандартні комбінації IntelliJ або вибрати комбінації з іншого IDE, до яких ви більше звикли;
 
  • нижче, у [29-30], увімкніть відображення номерів рядків у коді;
 
  • нижче, у [31-34], вкажіть, як ви хочете керувати першим проєктом під час запуску IDE, а потім наступними проєктами;
 

У Android 2.1 (травень 2016 р.) технологія [Instant Run] іноді створює проблеми. У цьому документі ми її вимкнули:

  • у [3-4] все було вимкнено;

6.12. Використання прикладів

Проекти Android Studio для прикладів доступні за посиланням ICI|. Завантажте їх.

  

Приклади було створено з використанням раніше визначених елементів:

  • JDK 1.8;
  • Android SDK Platform 23 для виконання;

Наступні інструменти SDK:

 

Якщо ваше середовище не відповідає наведеному вище, вам доведеться змінити конфігурацію проєктів. Це може бути досить клопітким. Спочатку, ймовірно, простіше буде відтворити робоче середовище, аналогічне наведеному вище.

Запустіть Android Studio, а потім відкрийте, наприклад, проект [exemple-07]:

 
  • у [1-3] відкривається проект [Exemple-07];
  • у [4] перевіряється файл [local.properties];
  • у рядку 11 вище вкажіть розташування Android Manager <sdk-manager-install> для SDK. Його можна знайти, виконавши процедуру [1-4]:
 

Усі приклади в цьому документі — це проекти Gradle, налаштовані за допомогою файлу [build.gradle] [1-2]:

 

Файл [build.gradle] із прикладу 07 має такий вигляд:


buildscript {
  repositories {
    mavenCentral()
    mavenLocal()
  }
  dependencies {
    // замінити на поточну версію плагіна Android
    classpath 'com.android.tools.build:gradle:2.1.0'
    // Починаючи з версії 0.11 плагіна Gradle для Android, необхідно використовувати android-apt версії 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
  }
}

Залежно від середовища Android (SDK та інструментів), яке ви створили, вам, можливо, доведеться змінити версії у рядках 8, 21, 22, 38, 39. Android Studio допоможе вам, надаючи пропозиції. Найпростіше — дотримуватися цих пропозицій.

До елементів файлу [build.gradle] можна отримати доступ іншим способом:

  • різні вкладки [3] містять різні значення з файлу [build.gradle]. Отже, цей файл можна побудувати таким чином, що дозволить уникнути проблем із синтаксисом файлу [build.gradle];

Ще один момент, який слід перевірити, — це файл JDK, який використовується файлами IDE та [5]:

 

У файлі [6] перевірте файл JDK.

Усі приклади — це проекти Gradle із залежностями, які потрібно завантажити. Для цього можна виконати такі дії:

  • у [5] компілюємо проєкт;

Після того, як проект не містить помилок, потрібно створити конфігурацію виконання [1-8]:

  • у [8] можна вказати, що для виконання завжди потрібно використовувати той самий термінал. Зазвичай цю опцію відмічають, щоб не доводилося щоразу вказувати термінал, який потрібно використовувати. Тут ми залишаємо її не відміченою, оскільки саме збираємося тестувати різні пристрої Android;
  • після створення конфігурації виконання запускаємо менеджер емуляторів Android [1-3];
  • якщо емулятор Android не запускається, перевірте пункти, зазначені в розділі 6.11;

Щоб запустити додаток на емуляторі, виконайте такі дії [1-4]:

  • у [2] має з’явитися емулятор, який ви запустили раніше;
  • у [5] — зображення, яке відображає емулятор;

Тепер підключіть планшет на базі Android до порту USB пристрою PC і запустіть на ньому додаток:

 
  • у [6] виберіть планшет на базі Android і протестуйте додаток.

У [7] є попередньо налаштовані віртуальні термінали. Ми навчимося додавати та видаляти їх.

  

На знімку екрана вище всі запропоновані термінали працюють з API 22. Ми видаляємо їх усі, оскільки хочемо працювати з API 23. Для видалення терміналів дотримуємося процедури [2-3].

Image

 
  • у [4-5] додаємо планшет;
 
  • у [6] вибираємо API. Вище ми вибираємо API 23 для 64-бітної версії Windows;
 
  • в [7] — підсумок виконаної конфігурації;
  • у [8] можна виконати більш розширену конфігурацію віртуального терміналу;

Після завершення роботи майстра створений термінал з'являється у [9].

Після цього, якщо знову запустити файл [Exemple-07], з’явиться таке вікно:

 
  • у [1] з’являється новий віртуальний термінал;
  • у [2] можна створювати нові;

Проведіть тестування, щоб визначити, який віртуальний термінал найкраще підходить для вашого комп’ютера. У цьому документі приклади тестувалися переважно з використанням емулятора Genymotion.

Незалежно від обраного віртуального терміналу, журнали відображаються у вікні з назвою [Logcat] [1-2]:

Image

Регулярно переглядайте ці журнали. Саме там будуть зазначені винятки, які призвели до збою вашої програми.

Ви також можете налагоджувати свою програму за допомогою звичайних інструментів налагодження:

  • у [2] точку зупинки встановлюють, один раз клацнувши на стовпці ліворуч від цільового рядка. Повторне клацання скасовує точку зупинки;
 
  • у [3] у точці зупинки виконайте:
  • [F6], щоб виконати рядок без входу в методи, якщо рядок містить виклики методів,
  • [F5] — для виконання рядка із входом у методи, якщо рядок містить виклики методів,
  • [F8] — щоб продовжити виконання до наступної точки зупинки;
  • [Ctrl-F2] — для зупинки налагодження;

6.13. Встановлення розширення для Chrome [Advanced Rest Client]

У цьому документі використовується браузер Chrome від Google (http://www.google.fr/intl/fr/chrome/browser/). До нього додається розширення [Advanced Rest Client] . Для цього можна виконати такі дії:

  • зайти на сайт [Google Web store] (https://chrome.google.com/webstore) за допомогою браузера Chrome;
  • знайти додаток [Advanced Rest Client]:
 
  • після чого додаток стане доступним для завантаження:
  • щоб її отримати, вам потрібно створити обліковий запис Google. [Google Web Store] потім вимагає підтвердження [1]:
  • у [2] додане розширення доступне в опції [Applications] [3]. Ця опція відображається на кожній новій вкладці, яку ви створюєте (CTRL-T) у браузері.

6.14. Управління фреймворком jSON на Java

Фреймворк [Spring MVC], що працює прозоро для розробника, використовує бібліотеку jSON [Jackson]. Щоб проілюструвати, що таке jSON (JavaScript Object Notation), ми наводимо тут програму, яка серіалізує об’єкти у формат jSON та виконує зворотну операцію, десеріалізуючи отримані рядки jSON для відтворення вихідних об’єктів.

Бібліотека «Jackson» дозволяє побудувати:

  • рядок jSON для об’єкта: new ObjectMapper().writeValueAsString(object);
  • об’єкт із рядка jSON: new ObjectMapper().readValue(jsonString, Object.class).

Обидва методи можуть викликати IOException. Ось приклад.

  

Вищезазначений проєкт — це проєкт Maven із таким файлом [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>
  • рядки 12–16: залежність, яка завантажує бібліотеку «Jackson»;

Клас [Personne] має такий вигляд:


package istia.st.json;

public class Personne {
    // дані
    private String nom;
    private String prenom;
    private int age;

    // конструктори
    public Personne() {

    }

    public Personne(String nom, String prénom, int âge) {
        this.nom = nom;
        this.prenom = prénom;
        this.age = âge;
    }

    // підпис
    public String toString() {
        return String.format("Personne[%s, %s, %d]", nom, prenom, age);
    }

    // методи getter та setter
...
}

Клас [Main] має такий вигляд:


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 {
  // інструмент серіалізації/десеріалізації
  static ObjectMapper mapper = new ObjectMapper();

  public static void main(String[] args) throws IOException {
    // створення особи
    Personne paul = new Personne("Denis", "Paul", 40);
    // відображення JSON
    String json = mapper.writeValueAsString(paul);
    System.out.println("Json=" + json);
    // інстанціювання об’єкта «Особа» на основі JSON
    Personne p = mapper.readValue(json, Personne.class);
    // відображення об’єкта «Personne»
    System.out.println("Personne=" + p);
    // масив
    Personne virginie = new Personne("Radot", "Virginie", 20);
    Personne[] personnes = new Personne[]{paul, virginie};
    // відображення JSON
    json = mapper.writeValueAsString(personnes);
    System.out.println("Json personnes=" + json);
    // словник
    Map<String, Personne> hpersonnes = new HashMap<String, Personne>();
    hpersonnes.put("1", paul);
    hpersonnes.put("2", virginie);
    // виведення JSON
    json = mapper.writeValueAsString(hpersonnes);
    System.out.println("Json hpersonnes=" + json);
  }
}

Виконання цього класу призводить до виведення на екран наступного:

1
2
3
4
Json={"nom":"Denis","prenom":"Paul","age":40}
Personne=Personne[Denis, Paul, 40]
Json personnes=[{"nom":"Denis","prenom":"Paul","age":40},{"nom":"Radot","prenom":"Virginie","age":20}]
Json hpersonnes={"2":{"nom":"Radot","prenom":"Virginie","age":20},"1":{"nom":"Denis","prenom":"Paul","age":40}}

З цього прикладу слід запам’ятати:

  • об’єкт [ObjectMapper], необхідний для перетворень jSON / Об’єкт: рядок 11;
  • перетворення [Personne] --> jSON: рядок 17;
  • перетворення jSON --> [Personne]: рядок 20;
  • виняток [IOException], викликаний обома методами: рядок 13.

6.15. Встановлення [WampServer]

[WampServer] — це набір програмного забезпечення для розробки на PHP / MySQL / Apache на комп’ютері з ОС Windows. Ми будемо використовувати його виключно для SGBD та MySQL.

  • на сайті [WampServer] [1] виберіть відповідну версію [2],
  • завантажений виконуваний файл є інсталятором. Під час інсталяції запитується різноманітна інформація. Вона не стосується MySQL. Тому її можна проігнорувати. Після завершення встановлення з’явиться вікно [3]. Запустіть [WampServer],
 
  • у [4], іконка [WampServer] встановлюється на панелі завдань у нижньому правому куті екрана [4],
  • при натисканні на неї з’являється меню [5]. Воно дозволяє керувати сервером Apache та SGBD MySQL. Для управління ним використовується опція [PhpPmyAdmin],
  • після чого з’являється вікно, показане нижче,

Image

Ми не будемо детально зупинятися на використанні [PhpMyAdmin]. У цьому документі ми покажемо, як ним користуватися.