[Из песочницы] Android Things

ba2c4da7e801426f9e053448bbabe5b2.png

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

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

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

  • Intel® Edison
  • NXP Pico i.MX6UL
  • Raspberry Pi 3

Поддержка еще двух ожидается в ближайшее время:
  • Intel® Joule™ 570x
  • NXP Argon i.MX6UL

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

Приложение


image alt

Структура приложение для 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 надо указать:

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

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


	
	
	


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

Периферия


Платформа поддерживает набор интерфейсов оборудования: GPIO, PWM, I2C, SPI, UART. Библиотеки для подключения различный периферийных устройств доступные из коробки:
  • RGB LED apa102
  • Сенсор температуры bmx280
  • Кнопка
  • Touch сенсор cap12xx
  • UART GPS
  • Дисплеи HT16K33, TM1637, OLED дисплей ssd1306
  • Акселерометр MMA7660FC
  • Сервопривод
  • Спикер
  • Rainbowhat

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

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

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

  • GPS
  • Human Interface Devices (HID)
  • Сенсоры

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

Для начала необходимо создать объект драйвера. Драйвер датчика должен наследовать абстрактный класс 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
Intents Google Api
CalendarContract AdMob
ContactsContract Android Pay
DocumentsContract Firebase App Indexing
DownloadManager Firebase Authentication
MediaStore Firebase Dynamic Links
Settings Firebase Invites
Telephony Firebase Notifications
UserDictionary Maps
VoicemailContract Play Games
Search
Sign-In

Так как в связи с отсутствием 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

Комментарии (0)

© Habrahabr.ru