- PVSM.RU - https://www.pvsm.ru -

Android Things

Android Things - 1

Google представила обновленную платформу для интернета вещей — Android Things

13 декабря Google официально объявила [1] о выходе в релиз Developer preview своей платформы для интернета вещей с поддержкой разработки под Android. Теперь всем знакомым с Android разработкой будет еще легче войти в мир создания IoT устройств.

Официально поддерживаются три типа устройств:

Поддержка еще двух ожидается в ближайшее время:

  • Intel® Joule™ 570x
  • NXP Argon i.MX6UL

Все что нужно для разработки приложения это Android Studio, и одно из устройств выше.

Приложение

image alt

Структура приложение для Android Things

Все примеры Вы можете посмотреть в официальном репозитории [5]. Есть template [6] для старта нового приложения.

Как правило на устройства Android Things не могут устанавливаться несколько приложений, поэтому единственное приложение автоматически будет запускаться при старте устройства.

Для отображения приложение использует тот же UI toolkit что и обычное Android приложения, не поддерживает system status bar и navigation buttons. Наличие дисплея не обязательно для работы приложения, а все события автоматически доставляются до activity приложения.

В gradle-файле приложения устанавливаем minSdkVersion 24 и добавляем provided-зависимость:

provided 'com.google.android.things:androidthings:0.1-devpreview'

В AndroidManifest в application надо указать:

<uses-library android:name="com.google.android.things"/>

В приложении всего одна activity которая запускается при старте устройства и уничтожается при выключении.

Для обеспечения автоматического старта активити при старте устройства необходимо добавить ей дополнительные параметры:

<intent-filter>
	<action android:name="android.intent.action.MAIN"/>
	<category android:name="android.intent.category.IOT_LAUNCHER"/>
	<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>

Доступны так же стандартные темы оформления: Theme.DeviceDefault

Периферия

Платформа поддерживает набор интерфейсов оборудования: GPIO, PWM, I2C, SPI, UART. Библиотеки для подключения различный периферийных устройств доступные из коробки:

  • RGB LED apa102
  • Сенсор температуры bmx280
  • Кнопка
  • Touch сенсор cap12xx
  • UART GPS
  • Дисплеи HT16K33, TM1637, OLED дисплей ssd1306
  • Акселерометр MMA7660FC
  • Сервопривод
  • Спикер
  • Rainbowhat

Есть возможность для написания своего драйвера. Тут Google представляет концепцию user driver, которая предполагает что драйвера к датчикам будут поддерживать уже существующий сервис работы с драйверами, что позволит легко использовать их на различных платформах.

Android Things - 3

Почти поровну

Поддерживается три типа драйверов:

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

Для начала необходимо создать объект драйвера. Драйвер датчика должен наследовать абстрактный класс UserSensorDriver и переопределить всего два метода:

read — вызывается для получения новых данных от сенсора и должен возвращать данные в виде объекта класса UserSensorReading.
setEnabled — используется для возможности перехода в режим сна или экономии энергии.

Далее с помощью UserSensor.Builder создаем свой объект UserSensor, указываем его имя, производителя, задаем свой тип и передаем ему драйвер. Регистрируем сенсор в менеджере UserDriverManager и не забываем отключить регистрацию при закрытии приложения.
Подробнее почитать о создании драйверов можно тут [10].

Как видно из демо примеров, приложение состоит из двух основных частей. Activity в которой и происходит вся работа и вспомогательный класс BoardDefaults, который возвращает строковые название пинов к которым подключены те или иные устройства в зависимости от платформы на которой запущено приложение.

Для работы с поддерживаемыми устройствами в системе предусмотрен PeripheralManagerService с помощью которого можно получить список доступных пинов/шин для конкретной платформы, а так же указать на какой пин подключено наше устройство.

Каждый тип устройств имеет свой набор методов для управления и интерфейсов обратной связи.

Пример подключения светодиода

	PeripheralManagerService pioService = new PeripheralManagerService();
		mLed = pioService.openGpio(BoardDefaults.getLedGpioPin());
		mLed.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);

И передаем boolean значение

                mLedGpio.setValue(value);

Пример подключения кнопки

	mButtonInputDriver = new ButtonInputDriver(
		BoardDefaults.getGPIOForButton(),
		Button.LogicState.PRESSED_WHEN_LOW,
		KeyEvent.KEYCODE_SPACE);
       mButtonInputDriver.register();

И далее ловим нажатие кнопки

@Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_SPACE) {
            // button pressed
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }

Подробнее можно посмотреть пример [11] с подключением большого числа сенсоров.

Возможности платформы

Сначала об ограничениях. В платформе не доступны многие стандартные приложения и контент-провайдеры, а так же некоторые Google API

Intents Google Api
CalendarContract [12] AdMob [13]
ContactsContract [14] Android Pay [15]
DocumentsContract [16] Firebase App Indexing [17]
DownloadManager [18] Firebase Authentication [19]
MediaStore [20] Firebase Dynamic Links [21]
Settings [22] Firebase Invites [23]
Telephony [24] Firebase Notifications [25]
UserDictionary [26] Maps [27]
VoicemailContract [28] Play Games [29]
Search [30]
Sign-In [31]

Так как в связи с отсутствием status bar, не поддерживаются уведомления, NotificationManager API не доступны.

Но и доступно не мало:

Cast [32]
Drive [33]
Firebase Analytics [34]
Firebase Cloud Messaging (FCM) [35]
Firebase Crash Reporting [36]
Firebase Realtime Database [37]
Firebase Remote Config [38]
Firebase Storage [39]
Fit [40]
Instance ID [41]
Location [42]
Nearby [43]
Places [44]
Mobile Vision [45]

И тут не может не порадовать наличие поддержки Firebase Realtime Database, Firebase Analytics и FCM, которые с легкостью позволят управлять Android Things устройствами через интернет и собирать данные с них.

Так же нет необходимости запрашивать разрешения в процессе работы, все разрешения, указанные в AndroidManifest, автоматически будут даны.

Google Weave

Одновременно с Android Things Google представила платформу Weave [46]. Платформа включает в себя:

  • Weave Server, который осуществляет регистрацию устройств, обмен и хранение данных, а так же интеграцию с другими сервисами Google;
  • SDK для подключения устройств к Weave серверу. Пока поддерживаются платформы: Linux, Qualcomm QCA4010, и Marvell MW302;
  • Набор инструментов для разработки и интеграции, включая специальное приложение.

Weave в настоящее время поддерживает: HVAC контроллеры, лампочки, розетки, ТВ и выключатели.

Для получения доступа ко всем возможностям платформы необходимо вступить [47] в группу Google.

Weave уже используются в устройствах Philips Hue and Samsung SmartThings и есть договоренности об использовании платформы еще рядом производителей Belkin WeMo, LiFX, Honeywell, Wink, TP-Link и First Alert.

Стоимость

Raspberry Pi 3 model B ~ 4 000р. + блок питания от 500р. (Intel® Edison with Arduino Breakout Kit ~ 7500р. + блок питания от 800р.) + SD card 32GB ~ 700р. Доска для прототипирования от 700 р.

В итоге отличный новогодний подарок Вам обойдется около 7 000 рублей. А также имеются уже готовые наборы, включающие Raspberry Pi 3 с некоторым набором сенсоров, примерно за эту же стоимость.

Всех с наступающим Новым годом!

Официальный сайт Android Things [48]
Github репозиторий с примерами [5]
Официальный сайт Google Weavr [46]

Автор: ZAit

Источник [49]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/android-development/224370

Ссылки в тексте:

[1] объявила: https://android-developers.googleblog.com/2016/12/announcing-googles-new-internet-of-things-platform-with-weave-and-android-things.html

[2] Intel® Edison: https://developer.android.com/things/hardware/edison.html

[3] NXP Pico i.MX6UL: https://developer.android.com/things/hardware/pico.html

[4] Raspberry Pi 3: https://developer.android.com/things/hardware/raspberrypi.html

[5] репозитории: https://github.com/androidthings

[6] template : http://template

[7] GPS: https://developer.android.com/things/sdk/drivers/gps.html

[8] Human Interface Devices (HID): https://developer.android.com/things/sdk/drivers/input.html

[9] Сенсоры: https://developer.android.com/things/sdk/drivers/sensors.html

[10] тут: https://developer.android.com/things/sdk/drivers/index.html

[11] пример: https://github.com/androidthings/weatherstation

[12] CalendarContract: https://developer.android.com/reference/android/provider/CalendarContract.html

[13] AdMob: https://firebase.google.com/docs/admob/

[14] ContactsContract: https://developer.android.com/reference/android/provider/ContactsContract.html

[15] Android Pay: https://developers.google.com/android-pay/

[16] DocumentsContract: https://developer.android.com/reference/android/provider/DocumentsContract.html

[17] Firebase App Indexing: https://firebase.google.com/docs/app-indexing/

[18] DownloadManager: https://developer.android.com/reference/android/app/DownloadManager.html

[19] Firebase Authentication: https://firebase.google.com/docs/auth/

[20] MediaStore: https://developer.android.com/reference/android/provider/MediaStore.html

[21] Firebase Dynamic Links: https://firebase.google.com/docs/dynamic-links/

[22] Settings: https://developer.android.com/reference/android/provider/Settings.html

[23] Firebase Invites: https://firebase.google.com/docs/invites/

[24] Telephony: https://developer.android.com/reference/android/provider/Telephony.html

[25] Firebase Notifications: https://firebase.google.com/docs/notifications/

[26] UserDictionary: https://developer.android.com/reference/android/provider/UserDictionary.html

[27] Maps: https://developers.google.com/maps/

[28] VoicemailContract: https://developer.android.com/reference/android/provider/VoicemailContract.html

[29] Play Games: https://developers.google.com/games/services/

[30] Search: https://developers.google.com/search/

[31] Sign-In: https://developers.google.com/identity/

[32] Cast: https://developers.google.com/cast/

[33] Drive: https://developers.google.com/drive/

[34] Firebase Analytics: https://firebase.google.com/docs/analytics/

[35] Firebase Cloud Messaging (FCM): https://firebase.google.com/docs/cloud-messaging/

[36] Firebase Crash Reporting: https://firebase.google.com/docs/crash/

[37] Firebase Realtime Database: https://firebase.google.com/docs/database/

[38] Firebase Remote Config: https://firebase.google.com/docs/remote-config/

[39] Firebase Storage: https://firebase.google.com/docs/storage/

[40] Fit: https://developers.google.com/fit/

[41] Instance ID: https://developers.google.com/instance-id/

[42] Location: https://developers.google.com/awareness-location/

[43] Nearby: https://developers.google.com/nearby/

[44] Places: https://developers.google.com/places/

[45] Mobile Vision: https://developers.google.com/vision/

[46] Weave: https://developers.google.com/weave/

[47] вступить: https://groups.google.com/forum/#!forum/weave-eap-acl

[48] Официальный сайт Android Things: https://developer.android.com/things/index.html

[49] Источник: https://habrahabr.ru/post/318296/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox