
Google представила обновленную платформу для интернета вещей — Android Things
13 декабря Google официально объявила о выходе в релиз Developer preview своей платформы для интернета вещей с поддержкой разработки под Android. Теперь всем знакомым с Android разработкой будет еще легче войти в мир создания IoT устройств.
Официально поддерживаются три типа устройств:
Поддержка еще двух ожидается в ближайшее время:
- Intel® Joule™ 570x
- NXP Argon i.MX6UL
Все что нужно для разработки приложения это Android Studio, и одно из устройств выше.
Приложение

Структура приложение для Android Things
Все примеры Вы можете посмотреть в официальном репозитории. Есть template для старта нового приложения.
Как правило на устройства 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, которая предполагает что драйвера к датчикам будут поддерживать уже существующий сервис работы с драйверами, что позволит легко использовать их на различных платформах.

Почти поровну
Поддерживается три типа драйверов:
Думаю основной интерес представляет подключение всевозможных сенсоров, поэтому остановлюсь на этом подробнее.
Для начала необходимо создать объект драйвера. Драйвер датчика должен наследовать абстрактный класс UserSensorDriver и переопределить всего два метода:
read — вызывается для получения новых данных от сенсора и должен возвращать данные в виде объекта класса UserSensorReading.
setEnabled — используется для возможности перехода в режим сна или экономии энергии.
Далее с помощью UserSensor.Builder создаем свой объект UserSensor, указываем его имя, производителя, задаем свой тип и передаем ему драйвер. Регистрируем сенсор в менеджере UserDriverManager и не забываем отключить регистрацию при закрытии приложения.
Подробнее почитать о создании драйверов можно тут.
Как видно из демо примеров, приложение состоит из двух основных частей. Activity в которой и происходит вся работа и вспомогательный класс BoardDefaults, который возвращает строковые название пинов к которым по��ключены те или иные устройства в зависимости от платформы на которой запущено приложение.
Для работы с поддерживаемыми устройствами в системе предусмотрен PeripheralManagerService с помощью которого можно получить список доступных пинов/шин для конкретной платформы, а так же указать на какой пин подключено наше устройство.
Каждый тип устройств имеет свой набор методов для управления и интерфейсов обратной связи.
Пример подключения светодиода
И передаем boolean значение
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);
}
Подробнее можно посмотреть пример с подключением большого числа сенсоров.
Возможности платформы
Сначала об ограничениях. В платформе не доступны многие стандартные приложения и контент-провайдеры, а так же некоторые Google API
Так как в связи с отсутствием status bar, не поддерживаются уведомления, NotificationManager API не доступны.
Но и доступно не мало:
Cast
Drive
Firebase Analytics
Firebase Cloud Messaging (FCM)
Firebase Crash Reporting
Firebase Realtime Database
Firebase Remote Config
Firebase Storage
Fit
Instance ID
Location
Nearby
Places
Mobile Vision
И тут не может не порадовать наличие поддержки Firebase Realtime Database, Firebase Analytics и FCM, которые с легкостью позволят управлять Android Things устройствами через интернет и собирать данные с них.
Так же нет необходимости запрашивать разрешения в процессе работы, все разрешения, указанные в AndroidManifest, автоматически будут даны.
Google Weave
Одновременно с Android Things Google представила платформу Weave. Платформа включает в себя:
- Weave Server, который осуществляет регистрацию устройств, обмен и хранение данных, а так же интеграцию с другими сервисами Google;
- SDK для подключения устройств к Weave серверу. Пока поддерживаются платформы: Linux, Qualcomm QCA4010, и Marvell MW302;
- Набор инструментов для разработки и интеграции, включая специальное приложение.
Weave в настоящее время поддерживает: HVAC контроллеры, лампочки, розетки, ТВ и выключатели.
Для получения доступа ко всем возможностям платформы необходимо вступить в группу 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
→ Github репозиторий с примерами
→ Официальный сайт Google Weavr