本文介绍如何将Android Things与Firebase同步,以便我们可以实时远程控制RGB LED。 更详细地讲,该项目展示了如何通过无线方式实时控制远程RGB LED,从而更改Firebase数据库中的某些值。 您可能已经知道Android Things是Android OS的一个分支,因此Android Things支持开箱即用的Firebase。 本教程描述了将Android Things与Firebase集成所需的所有步骤,以及如何将RGB LED连接到Android Things板。 将Android Things与Firebase同步,此IoT项目根据我们使用Firebase设置的值实时更改LED颜色。

在本教程中,我们假定您已经熟悉Android Things OS并且已经安装了它。 如果这是您第一次使用Android Things,则可以阅读如何在板上安装Android Things OS 。 这个Android Things IoT项目可以进一步扩展,以便我们可以使用不同类型的信息将Android Things与Firebase同步。 在多种情况下,Android Things和Firebase之间的同步起着重要作用,因此了解如何做到这一点很重要。

在深入研究这个Android Things Firebase同步项目之前,弄清楚我们将使用哪些组件非常有用:

  • Raspberry Pi 3(或Android Things兼容板)
  • 普通阳极RGB LED

此外,您需要一个Firebase帐户,以便可以测试此Android Things IoT项目。

如何将Android Things与Firebase Project概述同步

现在我们知道了我们将在该项目中使用的组件,对此同步项目进行概述很有用,这样您就可以清楚地了解该项目。 下图描述了该项目的工作方式:

android Glide 设置图片色值_java

每当我们更改Firebase数据库中的值时,一旦将Android Things连接到Firebase,新值就会触发一个事件,以便进行Android Things和Firebase数据库之间的同步,并将新值传输到Android Things板上,进而设置RGB LED颜色。

如何使用Android Things设置Firebase

在本节中,我们将描述如何配置Firebase项目,以便我们可以将其与Android Things集成。 第一步是创建一个免费帐户 。 获得免费帐户后,您可以创建一个新的Firebase项目,如下所示:

android Glide 设置图片色值_java_02

下一步是配置您的应用程序:

android Glide 设置图片色值_android_03

在此配置过程中,您必须遵循Firebase的说明。 最后,在与Firebase进行交互之前,有必要修改安全性方面:

android Glide 设置图片色值_java_04

最后,我们可以配置数据库来保存LED颜色: android Glide 设置图片色值_java_05

在应用程序级别, build.gradle看起来像:

......
dependencies {
  provided 'com.google.android.things:androidthings:0.4.1-devpreview'
  compile 'com.google.firebase:firebase-core:11.4.0'
  compile 'com.google.firebase:firebase-database:11.4.0'
  apply plugin: 'com.google.gms.google-services'
}

如何在Firebase中使用Android Things

在Firebase项目设置过程中按照说明进行操作后,就可以开始编写Android Things应用了。 现在,所有Firebase依赖项和配置均已准备就绪,我们可以深入研究Android Things项目。 如前所述,Android Things应用必须侦听Firebase的值变化并做出控制RGB LED的反应。

RGB LED有3个引脚,每种颜色一个,我们将它们连接到Raspberry GPIO引脚。 根据Firebase数据库中的值,Android Things应用程序通过控制LED颜色的方式打开或关闭每个GPIO引脚。 此应用程序没有UI,因为Android Things是受远程控制的 。

为了创建此Android IoT应用,有必要创建一个新的Android Things项目,以克隆模板项目 。 如果您是新手,并且这是您第一次使用Android Things,则可以按照本教程介绍如何开始使用Android Things 。

在上一步中,我们在Firebase数据库中创建了一个表,其中包含代表LED颜色的三个不同字段。 为了保留Firebase的新值,我们必须创建一个代表表的简单POJO类:

public class RGBColor {

  private int red;
  private int green;
  private int blue;

  public RGBColor() {}

  public int getRed() {
    return red;
  }

  public void setRed(int red) {
    this.red = red;
  }

  public int getGreen() {
    return green;
  }

  public void setGreen(int green) {
    this.green = green;
  }

 public int getBlue() {
   return blue;
 }

 public void setBlue(int blue) {
   this.blue = blue;
  }
}

我们将使用这个简单的类来控制GPIO引脚。

现在,我们可以将注意力集中在主要活动上,该活动将处理Android Things和Firebase之间的所有同步。 为此,您可以使用项目中已经配置的活动模板。 在onCreate() ,我们必须初始化与Firebase的连接并获取对PeripheralManagerService的引用:

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Log.d(TAG, "onCreate");
  databaseRef = FirebaseDatabase.getInstance().getReference();
  databaseRef.addValueEventListener(veListener);
  pms = new PeripheralManagerService();
  initPin();
}

其中databaseRef是DatabaseReference的实例。 此外,该应用程序向databaseRef添加了一个侦听器,以在值更改时接收通知。 此外,在这种方法中,我们初始化应用程序用来控制LED的引脚:

private void initPin() {
   try {
     redPin = pms.openGpio("BCM26");
     redPin.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
     greenPin = pms.openGpio("BCM6");
     greenPin.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
     bluePin = pms.openGpio("BCM5");
     bluePin.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
  }
  catch (IOException ioe) {
     Log.e(TAG, "Unable to open pins");
  }
}

请务必注意,在上面的代码中,Android Things IoT应用程序直接引用了引脚名称。 如果您希望自己的应用不是最佳实践 可移植在不同的板上 。 无论如何,对于本教程,我们可以使用引脚直接访问。

将Android Things与Firebase同步

一旦“硬件”部分准备就绪并初始化了引脚,则必须在Firebase值更改时接收通知。 为此,必须定义一个侦听器:

private ValueEventListener veListener = new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
     RGBColor color = dataSnapshot.getValue(RGBColor.class);

     // update pins
    updatePin(redPin, color.getRed());
    updatePin(greenPin, color.getGreen());
    updatePin(bluePin, color.getBlue());
  }

  @Override
  public void onCancelled(DatabaseError databaseError) {}
};

上面的代码非常简单,当更改数据库中的一个或多个值时,将调用onDataChange方法。 如前所述,类RGBColor包含新值。 最后一步是更新设置正确颜色的图钉:

private void updatePin(Gpio pin, int value) {
  try {
    pin.setValue( value > 0 ? false : true);
  } catch (IOException e) {
    e.printStackTrace();
  }
}

在此示例中,我们假设如果该值大于零,则PIN处于打开状态,否则为PIN。 请注意,我们使用的是公共阴极LED,因此,我们关闭了该引脚。

现在,您可以使用Firebase控制台更改RGB值进行播放,并注意LED会更改颜色。

摘要

在本文的最后,您获得了有关如何将Android Things与Firebase同步的知识,以便我们可以实时地远程控制Android Things板。

翻译自: https://www.javacodegeeks.com/2017/10/synchronize-android-things-firebase-control-rgb-led-remotely-real-time.html