Статьи

Бот Android Things: Как создать бот IoT для выполнения задач

В этом руководстве мы расскажем, как реализовать бот 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 .