在本教程中,我们将介绍如何实现Android Things机器人来执行任务。 这是一个有趣的话题,因为它融合了两种新兴技术,如物联网(IoT)和机器人。 如您所知,Android Things是为物联网而构建的新Google操作系统。 该操作系统可帮助您开发专业的IoT项目,而无需对嵌入式系统有太多了解。 Android Things是基于Android构建的,因此您可以重用您的Android专业知识,并准备开发IoT项目。
而且,您已经知道什么是机器人。 也许您听到了很多有关此技术主题的信息。 无论如何,如果您是这个概念的新手,则机器人是一种执行自动化任务的应用程序。 换句话说,这是我们开发的用于执行某些特定任务的软件。 这些任务的范围从在线执行查询到搜索内容,或者回答某些命令并检索天气信息。
在本文中,我们探讨了机器人主题,该主题实现了一个不同的服务,该服务使用机器人来控制远程外围设备。 该物联网项目集成了物联网和机器人,提供了可以在现实的物联网项目中扩展和重用的服务。
物联网机器人项目概述
这个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