随着物联网(IoT)的发展,开发人员和工程师不得不重新考虑用户如何与设备进行日常交互。
尽管屏幕对于网站和大多数应用程序运行良好,但是如果您必须使用多个按钮或屏幕才能正常运行,那么与现实世界进行交互的设备可能会更加繁琐。 解决此问题的方法之一是在设备上启用语音控制。
在本教程中,您将了解Google Assistant以及如何将其添加到Android Things IoT设备。
助理SDK
Google Assistant SDK可让您向IoT设备添加具有关键字检测,自然语言处理和其他机器学习功能的语音控件。 使用Assistant SDK可以完成很多工作,但是本教程仅关注基础知识:如何将其包含在Android Things设备中,以便提出问题,获取信息以及与标准的“开箱即用”进行交互助手功能。
至于硬件要求,您有几种选择。 您可以将带有Android Things的Raspberry Pi与AIY语音工具包一起使用 。
或者,您可以使用带有AUX连接器和USB麦克风的标准扬声器。
另外,您可以使用任何其他I²S硬件配置。 尽管我们不会在本教程中详细讨论I²S,但值得注意的是,语音工具包将使用此协议。 设置好麦克风和扬声器后,还需要在设备上添加一个按钮。 此按钮需要跟踪两种状态:按下和释放。 您可以通过多管拱廊按钮或在两个电极之一上连接了下拉电阻的标准按钮来完成此操作。
证书
连接硬件后,就可以将Assistant SDK添加到设备中了。 首先,您将需要为设备创建一个新的凭证文件。 您可以在Google助手文档中找到相关说明。 拥有了certificate.json文件后,您需要将其放入Android Things模块的res / raw目录中。
使用Google创建凭据后,您需要为您的应用声明一些权限。 打开AndroidManifest.xml文件,并在manifest
标记中但在application
标记之前添加以下几行。
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.things.permission.MANAGE_AUDIO_DRIVERS" />
值得注意的是,在安装具有这些权限的应用程序后,需要重新启动设备才能授予它们。
接下来,您需要将gRPC模块复制到您的应用中,以便与家用设备进行通信。 这有点棘手,所以最好的地方是来自Google Assistant Android Things示例应用程序,该应用程序可在Android Things GitHub帐户中找到 。 然后,您将需要更新您的settings.gradle文件以反映新模块。
include ':mobile', ':things', ':grpc'
更新settings.gradle之后 ,通过在物联网模块的build.gradle文件中包含以下行,将该模块作为您物联网模块的依赖项,并包括Google的按钮驱动程序(激活麦克风需要此驱动程序)和可选的Voice Hat驱动程序(如果需要)您正在使用该硬件。
compile project(':grpc')
compile 'com.google.android.things.contrib:driver-button:0.4'
//optional
compile 'com.google.android.things.contrib:driver-voicehat:0.2'
您还需要在项目级别的build.gradle文件中包含protobuf作为依赖项 。
classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.0"
接下来,通过打开事物模块的build.gradle文件并在dependencies
节点下添加以下内容,将oauth2库包含在我们的项目中:
compile('com.google.auth:google-auth-library-oauth2-https:0.6.0') {
exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
如果您的项目具有Espresso依赖项,那么您可能会在此处遇到冲突,并显示类似以下错误消息:
Warning:Conflict with dependency 'com.google.code.findbugs:jsr305' in project ':things'. Resolved versions for app (1.3.9) and test app (2.0.1) differ. See http://g.co/androidstudio/app-test-app-conflict for details.
如果是这样,只需从build.gradle中删除Espresso依赖项 。
同步项目后,创建一个名为Credentials.java的新类以访问您的凭据。
public class Credentials {
static UserCredentials fromResource(Context context, int resourceId)
throws IOException, JSONException {
InputStream is = context.getResources().openRawResource(resourceId);
byte[] bytes = new byte[is.available()];
is.read(bytes);
JSONObject json = new JSONObject(new