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 с помощью которого можно получить список доступных пинов/шин для конкретной платформы, а так же указать на какой пин подключено наше устройство.
Каждый тип устройств имеет свой набор методов для управления и интерфейсов обратной связи.
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
Автор: ZAit