android iot_Android Things机器人:如何构建IoT机器人来执行任务

android iot

在本教程中,我们将介绍如何实现Android Things机器人来执行任务。 这是一个有趣的话题,因为它融合了两种新兴技术,如物联网(IoT)和机器人。 如您所知,Android Things是专为物联网打造的新型Google操作系统。 该操作系统可帮助您开发专业的IoT项目,而无需对嵌入式系统有太多了解。 Android Things是基于Android构建的,因此您可以重用您的Android专业知识,并准备开发IoT项目。

而且,您已经知道什么是机器人。 也许您听到了很多有关此技术主题的信息。 无论如何,如果您是这个概念的新手,则bot是执行自动化任务的应用程序。 换句话说,这是我们开发的用于执行某些特定任务的软件。 这些任务的范围从在线执行查询到搜索内容,或者回答某些命令并检索天气信息。

在本文中,我们探讨了机器人主题,该主题实现了一个不同的服务,该服务使用机器人来控制远程外围设备。 该物联网项目集成了物联网和机器人,提供了可以在现实的物联网项目中扩展和重用的服务。

物联网机器人项目概述

这个Android Things机器人项目背后的想法是使用机器人执行任务来控制远程外围设备。 在此项目中,Android Things机器人将控制两个不同的LED来解析传入的命令并打开或关闭它们。

如前所述,可以进一步扩展该项目并将其应用于现实生活中的用例。 该项目使用Telegram作为支持在Telegram平台上运行的第三方应用程序的机器人平台。 为了与机器人进行交互,我们使用聊天程序,在其中我们将消息作为命令发送到机器人。

要构建此IoT机器人,我们需要遵循以下步骤:

  • 在Telegram中创建和配置机器人
  • 开发可使用API​​与机器人互动的Android Things机器人应用
  • 将消息中的命令转换为“硬件”命令以控制远程外围设备。

我们将使用Android Things开发该项目,因为它是一个新的操作系统,并且功能强大。 此外,我们可以在Android Things中使用现有的Android库,并且有几个Telegram bot Java库可供使用。

如何创建机器人

第一步是在Telegram中创建一个机器人。 为此,我们可以按照本指南中介绍步骤进行操作 。 为此,必须与BotFather进行交互:

我们使用/start命令和/newbot命令告诉/newbot我们要创建一个新的bot,与BotFather开始对话。 有必要提供一些信息,例如:

  • 机器人名称
  • 机器人用户名(必须以机器人结尾)

完成这些简单的步骤后,机器人就可以使用了。 对于此物联网机器人项目,我们创建了一个名为AndroidThingsBot的机器人:

在此过程结束时,电报机器人提供了我们将在Android Things IoT机器人中使用的HTTP API令牌。

这就是我们的机器人准备接收命令的全部。 下一步是实现可处理传入命令并与外围设备进行交互的Android Things机器人。

开发一个Android Things机器人来执行IoT任务

第一步,必须在Android Studio中创建一个新的Android Things项目 。 本教程假定您熟悉Android Things。 如果您想学习如何在IoT项目中使用Android Things,可以阅读Packt出版的名为“ Android Things项目”的书

配置项目后,我们可以添加依赖项。 该物联网项目使用开源库与Telegram进行交互。 为此,将以下行添加到build.gradle中:

dependencies {
    ...
    compile 'com.github.pengrad:java-telegram-bot-api:3.0.1'
    compile 'com.squareup.okhttp3:okhttp:3.8.1'
}

这就是我们准备与机器人进行交互的全部。 我们的目标是从AndroidThingsBot接收消息并进行处理。 为此,我们必须使用Telegram API初始化处理通信详细信息的类:

TelegramBot bot;

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Log.d(TAG, "onCreate");
  bot = TelegramBotAdapter.build(BOT_TOKEN);
  ...
}

其中BOT_TOKEN是我们在上一段的创建步骤中收到的令牌。

我们可以利用几种策略来接收消息。 该库提供了一个侦听器,用于侦听传入的消息:

// 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应用如何控制外围设备,在这种情况下,外围设备是简单的LED。 当然,您可以扩展此项目并使用其他类型的外围设备。 原理图如下所示:

连接非常简单,两个LED使用220Ω电阻连接到Raspberry引脚,以限制流过LED本身的电流。 此外,使用Raspberry中的两个GPIO引脚来管理LED:

  • 针13-> BCM 27
  • 针15-> BCM 22

有关更多信息,请查看Android Things Raspberry Pinout

连接准备就绪后,我们可以将精力集中在开发源代码上。 您可能已经知道,Android Things的功能是抽象化其工作所在的硬件,从而提供一种与组件和外围设备进行交互的通用方法。

让我们初始化用于管理引脚的外围服务,因此将以下行添加到Android Activity:

private PeripheralManagerService pmService = new PeripheralManagerService();

那么有必要初始化引脚:

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类中调用它。 此外,添加另一种方法来管理引脚很有用,以便应用程序可以打开或关闭LED:

private void setPin(Gpio pin, String state) {
 try {
   pin.setValue(Boolean.parseBoolean(state));
 }
 catch (IOException ioe) {
   ioe.printStackTrace();
 }
}

最后,应用程序必须处理来自机器人的传入命令并管理LED,因此,有必要修改处理传入消息的方法:

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;
  }
});

现在您可以测试您的机器人了。 机器人处理的命令具有以下格式:

LED y|b on|off

摘要

在本文的最后,我们讨论了一个有趣的主题,该主题集成了两种新兴技术Android Things和bots 。 可以进一步开发此Android Things IoT机器人,使其可以处理更多命令或与其他类型的外围设备进行交互。 这是一个原型项目,但其背后的想法可以被利用并应用于其他领域。

翻译自: https://www.javacodegeeks.com/2017/07/android-things-bot-build-iot-bot-execute-tasks.html

android iot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值