В этом руководстве мы расскажем, как реализовать бот Android Things для выполнения задач. Это интересная тема, потому что она сочетает в себе две новые технологии, такие как Интернет вещей (IoT) и боты. Как вы, возможно, знаете, Android Things — это новая ОС Google, созданная для Интернета вещей. Эта ОС помогает вам разрабатывать профессиональные проекты IoT, не зная много о встроенных системах. Android Things построен на Android, поэтому вы можете использовать свой опыт в Android и подготовиться к разработке IoT-проектов.
Более того, вы уже знаете, что такое бот. Возможно, вы много слышали об этой технологической теме. В любом случае, если вы новичок в этой концепции, бот — это приложение, которое выполняет автоматизированные задачи. Другими словами, это часть программного обеспечения, которую мы разрабатываем для выполнения определенной задачи. Эти задачи могут варьироваться от выполнения запросов в Интернете до поиска чего-либо или ответа на какую-либо команду и получения информации о погоде.
В этой статье мы подходим к теме бота, реализуя другой сервис, который использует бота для управления удаленной периферией. Этот проект IoT объединяет IoT и бот, предоставляя услугу, которую можно расширить и повторно использовать в реальном проекте IoT.
Обзор проекта IoT бота
Идея, стоящая за этим бот-проектом Android Things, заключается в управлении удаленной периферией с помощью бота, выполняющего задачи. В этом проекте бот Android Things будет управлять двумя разными светодиодами, анализирующими входящие команды и включающими или выключающими их.
Как указывалось ранее, этот проект может быть расширен и применен к реальным случаям использования. В этом проекте Telegram используется в качестве бот-платформы, поддерживающей стороннее приложение, работающее на платформе Telegram. Для взаимодействия с ботом мы используем чат, где отправляем на бот сообщения, которые являются командами.
Для создания этого IoT-бота нам нужно выполнить следующие шаги:
- Создайте и настройте бота в Telegram
- Разработать приложение-бот для Android Things, которое взаимодействует с ботом с помощью API
- Преобразуйте команду, поступающую в виде сообщений, в «аппаратную» команду для управления удаленной периферией.
Мы будем развивать этот проект с использованием Android Things, потому что это новая ОС, которая предлагает отличные возможности. Кроме того, мы можем использовать существующие библиотеки Android в Android Things, и есть несколько готовых к использованию библиотек Java для ботов Telegram.
Как создать бота
Первый шаг — создание бота в Telegram. Для этого мы можем выполнить шаги, описанные в этом руководстве . Для этого необходимо взаимодействовать с BotFather :
Мы начинаем разговор с BotFather с помощью команды /start
и команды /newbot
сообщающей боту, что мы хотим создать нового бота. Необходимо предоставить некоторую информацию, такую как:
- имя бота
- имя пользователя бота (оно должно заканчиваться ботом)
После этих простых шагов бот готов. Для этого проекта бота IoT мы создали бота под названием AndroidThingsBot :
В конце этого процесса бот telegram предоставляет токен HTTP API, который мы будем использовать в нашем боте Android Things IoT.
Это все, что наш бот готов принимать команды. Следующим шагом является внедрение бота Android Things, который обрабатывает входящие команды и взаимодействует с периферийными устройствами.
Разработка бота Android Things для выполнения задач IoT
В качестве первого шага необходимо создать новый проект Android Things в студии Android . В этом руководстве предполагается, что вы знакомы с Android Things. Если вы хотите узнать, как использовать Android Things в проекте IoT, вы можете прочитать мою книгу изданной Packt под названием «Android Things projects» .
Как только проект настроен, мы можем добавить зависимости. Этот проект IoT использует библиотеку с открытым исходным кодом для взаимодействия с Telegram. Для этого добавьте следующие строки в build.gradle:
1
2
3
4
5
|
dependencies { ... compile 'com.github.pengrad:java-telegram-bot-api:3.0.1' compile 'com.squareup.okhttp3:okhttp:3.8.1' } |
Это все, что мы готовы взаимодействовать с ботом. Наша цель — получать сообщения от AndroidThingsBot и обрабатывать их. Чтобы сделать это, мы должны инициализировать класс, который обрабатывает детали связи, используя Telegram API:
1
2
3
4
5
6
7
8
9
|
TelegramBot bot; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); Log.d(TAG, "onCreate" ); bot = TelegramBotAdapter.build(BOT_TOKEN); ... } |
где BOT_TOKEN — токен, который мы получили на этапе создания в предыдущем абзаце.
Есть несколько стратегий, которые мы можем использовать для получения сообщений. Эта библиотека предоставляет слушателю для прослушивания входящих сообщений:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
// start listening for incoming messages GetUpdates getUpdates = new GetUpdates() .limit( 100 ) .offset( 0 ) .timeout( 10 ); bot.setUpdatesListener( new UpdatesListener() { @Override public int process(List<Update> updates) { for (Update update : updates) { Message msg = update.message(); // Bot logic Here } return UpdatesListener.CONFIRMED_UPDATES_ALL; } }); |
Таким образом, как только бот получает сообщение, приложение Android Things получает уведомление и обрабатывает команду. Наконец, последний шаг, где приложение Android Things взаимодействует с периферийными устройствами.
Как обрабатывать команды
В этом разделе мы рассмотрим, как приложение Android Things управляет периферией, в данном случае это простые светодиоды. Конечно, вы можете расширить этот проект и использовать другие виды периферийных устройств. Схема показана ниже:
Подключение очень простое, два светодиода подключены к контактам Raspberry с помощью резисторов 220 Ом, чтобы ограничить ток, протекающий через сами светодиоды. Кроме того, управление светодиодами осуществляется с помощью двух выводов GPIO в Raspberry:
- Контакт 13 -> BCM 27
- Контакт 15 -> BCM 22
Для получения дополнительной информации взгляните на Android Things Raspberry Pinout .
Как только соединения будут готовы, мы можем сосредоточить наше внимание на разработке исходного кода. Как вы, возможно, уже знаете, сила Android Things заключается в том, чтобы абстрагировать аппаратное обеспечение, на котором оно работает, обеспечивая общий способ взаимодействия с компонентами и периферийными устройствами.
Давайте инициализируем Периферийный сервис, используемый для управления булавками, поэтому добавим следующие строки в Android Activity:
1
|
private PeripheralManagerService pmService = new PeripheralManagerService(); |
тогда необходимо инициализировать контакты:
01
02
03
04
05
06
07
08
09
10
11
|
private void initPins() { try { bluePin = pmService.openGpio( "BCM22" ); yellowPin = pmService.openGpio( "BCM27" ); bluePin.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW); yellowPin.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW); } catch (IOException ioe) { ioe.printStackTrace(); } } |
и вызвать его в классе MainActivity. Кроме того, полезно добавить еще один метод управления выводами, чтобы приложение могло включать или выключать светодиоды:
1
2
3
4
5
6
7
8
|
private void setPin(Gpio pin, String state) { try { pin.setValue(Boolean.parseBoolean(state)); } catch (IOException ioe) { ioe.printStackTrace(); } } |
Наконец, приложение должно обрабатывать входящие команды от бота и управлять светодиодами, поэтому необходимо изменить метод, который обрабатывает входящие сообщения:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
bot.setUpdatesListener( new UpdatesListener() { @Override public int process(List<Update> updates) { for (Update update : updates) { Message msg = update.message(); if (msg != null ) { String txt = msg.text(); if (txt.trim().startsWith( "LED" )) { Log.d(TAG, "LED COMMAND" ); String[] data = txt.split( " " ); if (data.length < 3 ) { Log.d(TAG, "Command format error" ); return UpdatesListener.CONFIRMED_UPDATES_ALL; } String value = data[ 2 ]; if (data[ 1 ].equalsIgnoreCase( "b" )) { Log.d(TAG, "Blue pin [" +value+ "]" ); setPin(bluePin, value); } else if (data[ 1 ].equalsIgnoreCase( "y" )) { setPin(yellowPin, value); } } } } return UpdatesListener.CONFIRMED_UPDATES_ALL; } }); |
Теперь вы можете проверить свой бот. Команда, которую обрабатывает бот, имеет формат:
1
|
LED y|b on|off |
Резюме
В конце этого поста мы рассмотрели интересную тему, которая объединяет две новейшие технологии Android Things и ботов . Этот бот Android Things IoT можно доработать, чтобы он мог обрабатывать больше команд или взаимодействовать с другими видами периферийных устройств. Это проект-прототип, но идея, стоящая за ним, может быть использована и применена в других областях.
Ссылка: | Бот Android Things: Как создать бот IoT для выполнения задач от нашего партнера JCG Франческо Аццолы в блоге Surviving с Android . |