В этой статье мы напишем приложение под Андроид для нашей метеостанции.

Продолжение. Начало здесь.

В наше время, когда уже каждый может мигать светодиодом, никакой метеостанцией никого не удивишь. Но если поделка умеет связываться с сервером через WiFi, имеет веб-морду и мобильное приложение, то это уже кое-что! Под сервером здесь имеется в виду конечно же сервер приложений, т.е. в нашем случае это PHP-обвязка и СУБД MySQL. Не достаёт вишенки на торте, а именно приложения под Android написанием которого мы сейчас и займёмся.

weather-station-android-02

Вместо предисловия

Программирование на Android это отдельная огромная тема. Или как пишут в изданиях «изучение данного вопроса выходит за рамки этой книги».

Для начинающих, которые уже знакомы с Java, порекомендую осилить (хотя бы 50% каждой) следующие переводные книги:

  • «Android для разработчиков». П. Дейтел, Х. Дейтел, Э. Дейтел, М. Моргано. 2015. ISBN 978-5-496-01517-2
  • «Android. Программирование для профессионалов». Харди Б., Филлипс Б., Стюарт К., Марсикано К. 2 издание, 2016. ISBN 978-5-496-02051-0

Кто с Java не знаком, рекомендую следующие многостраничные труды:

  • «Философия Java». Б. Эккель, 4-е полное издание.
  • «Java. Полное руководство». Шилдт, Герберт.

Конечно вы можете изучать программирование на Java и Android и по другим книгам, следите только за тем, чтобы нужная литература была именно зарубежная переводная. Доморощенные авторы просто копипастят официальные руководства (в лучшем случае) и вставляют скриншоты (для объёма), не понимая архитектуры и философии предмета, большой пользы от таких книжек нет. Это замечание относится ко всей литературе по ИТ. И это же относится и к русскоязычным сайтам и их онлайн-обучалкам. Так уж сложилось, что все новые технологии придумываются, скажем так, в англоязычной среде, наше отставание уже бесконечно и не наша в том вина. Поэтому гораздо лучше и правильнее изучать переведенный первоисточник, а затем уже дошлифовывать знания на англоязычных ресурсах ибо любые ИТ книжки устаревают мгновенно.

Как видим Андроид тема не проходится за 5 минут. Короче говоря, изучайте предмет, и приходите через несколько месяцев.

Архитектура

Архитектура всей программной платформы метеостанции проста:

  • серверная часть метеостанции собирает данные с удалённых датчиков
  • далее она же передаёт данные на веб-сервер приложений, который сохраняет эти данные в базу данных
  • приложение на Андроид (или любое другое удалённое приложение) запрашивает данные у веб-сервера и отображает их на экране смартфона, например.
Читать ещё :   5 open source инструментов для домашней автоматизации

На экране Android устройства мы будем отображать текущие (ну или самые последние) показания датчиков.

HTTP GET и JSON

Вопрос, который нужно решить в первую очередь — это каким образом будет происходить передача данных от веб-сервера к Андроид-приложению.

Придумывать тут ничего не нужно, всё уже придумано за нас — это HTTP GET и JSON.

В нашем случае простой GET запрос к веб-серверу можно составить и отладить вручную, пока Андроид приложение ещё не готово.

В Java и в Android есть готовые библиотеки для обработки данных в формате JSON. JSON текстовый формат, читается человеком, что полезно для отладки.

Для того, чтобы сформировать текущие данные от датчиков метеостанции создадим на веб-сервере новый PHP скрипт last-data-to-json.php.

Вызов скрипта :

http://<хост>/last-data-to-json.php?k=<access_key>

где <access_key>, как мы помним, это секретный ключ доступа к БД.

Пример ответа в формате JSON :

 

Необходимо напомнить, что у нас 3 датчика. Их ID и тип (DHT или BMP) жёстко закодированы по всему коду метеостанции. Такой способ хардкордного кодирования идеологически неверен, но для наколенного прототипа (где необходимо быстрое и простое решение) это разумный компромисс.

$idSensor = 11; // домашний DHT датчик
$idSensor = 11; // домашний BMP датчик
$idSensor = 20; // заоконный DHT датчик

Скрипт last-data-to-json.php берет из БД самые последние данные от этих разнотипных датчиков и упаковывает в формат JSON. Выборка данных из БД «с конца» просходит таким способом :

SELECT … FROM … ORDER BY id DESC LIMIT 1;

Android

Теперь напишем простое приложение для Андроид, которое запрашивает, получает, декодирует JSON-данные и отображает информацию на экране.

Для проекта используйте Android Studio. В закладках у вас уже должен быть сайт для Андроид разработчиков.

Наше Android-приложение будет простым насколько это возможно, только сама суть технологии. Далее вокруг этого «скелета» уже можно будет наворачивать различные «красивости».

Читать ещё :   Как прошить Arduino Pro Mini

Исходный код здесь.

Вот скриншот того, что должно получиться в итоге

weather-station-android-01

Как видим UI просто спартанский, основан на LinearLayout, ничего лишнего.

В верхней части TextView показывает ID датчиков и их метео-данные. Кнопка «Обновить» инициирует повторный запрос к веб-серверу. Далее в EditText расположена единственная настройка программы — это URL запроса в виде

http://<ваш хост>/last-data-to-json.php?k=<access_key>

Что необходимо отметить?

В манифест добавьте строки разрешающие интернет и проверку состояния сетевого соединения :

Работа с сетью и получение данных с веб-сайта происходит следующим образом.

Используем AsyncTask, чтобы создать фоновую задачу отдельно от главного потока пользовательского интерфейса. Эта фоновая задача берет URL запроса и использует его для создания HttpURLConnection.

После того, как соединение установлено, AsyncTask загружает содержимое веб-страницы (JSON) как InputStream. Далее InputStream преобразуется в строку, которая декодируется с помощью JSONObject и отображается в пользовательском интерфейсе методом onPostExecute().

Немного сложновато (необходимо учитывать склонность разработчиков Андроид к БДСМ), но зато идеологически правильно.

В MainActivity.java измените URL на ваш :

он будет использоваться по умолчанию при первом запуске Android приложения.

Весь исходный код проекта метеостанции находится здесь.

Продолжение следует…

 

От автора

Если что непонятно — спрашивайте в комментариях.

Чтобы не пропустить следующую публикацию подписывайтесь на канал.

Проект находится в постоянном развитии, так что здесь были и будут ошибки и неточности. Я надеюсь, что вы мне укажете на них в комментариях.

В этих постах в блоге будет дана информация такой какой она есть на момент публикации. Если вы хотите прочитать издание с последними дополнениями, то полностью собранная и обновляемая статья будет находиться здесь.

Лицензия Creative Commons
Произведение «Метеостанция на Arduino от А до Я» созданное автором по имени tim4dev.com, публикуется на условиях лицензии Creative Commons «Attribution-NonCommercial-ShareAlike» («Атрибуция — Некоммерческое использование — На тех же условиях») 4.0 Всемирная.