4个可与Android Things配合使用的外部显示器:TM1637,Max7219,SSD1306,LCD 1602,LCD 2004...

外部显示器是我们可以与Android Things一起使用以显示信息的外围设备。 本文介绍了如何在Android Things中使用4个外部显示器。 当需要显示信息时,显示很重要。 当我们基于Android Things开发智能设备时,通常需要向用户显示信息。 即使我们可以使用RGB LED来显示某种信息,但在需要显示消息或其他信息时,连接到Android Things的外部显示器也起着重要作用。

Android Things支持多个外部显示器,并且可以使用不同的驱动程序来与这些外部显示器进行交互。

本Android Things教程介绍了如何在Android Things中使用以下外部显示:

  • TM1637这是4位数字的显示屏
  • Max7219此矩阵LED通常为8×8。 它由64个可寻址的单个LED制成。 此外,它具有SPI接口
  • 基于HD44780芯片并由PCF8574芯片控制的LCD显示屏( LCD 1602LCD 2004
  • SSD1306具有0.96英寸屏幕的OLED显示器。 这款OLED显示器的分辨率为128×64,可以控制每个LED的开和关状态

本文将逐步介绍如何将外部显示器与Android Things连接以及如何显示信息。

目录

1.如何将TM1637外接显示器连接到Android Things
2.如何将Max7219连接到Android Things
3.如何将SSD1306外接显示器连接到Android Things
4.如何将LCD显示器1602或2004连接到Android Things
5.总结

1.如何将TM1637外接显示器连接到Android Things

让我们从可用于Android Things的最简单的外部显示器开始:TM1637。 它具有四个必须连接到Android Things的引脚:

  • Vcc(+ 3V或+ 5V)
  • 地线
  • DIO(数据)
  • CLK(时钟)

连接Android Things与TM1637的草图如下所示:

4个可与Android Things配合使用的外部显示器:TM1637,Max7219,SSD1306,LCD 1602,LCD 2004..._第1张图片

我们在哪里可以使用此显示? 该外部显示器可以在以下情况下使用:

  • 时间显示
  • 显示传感器数据

如何在Android Things中使用TM1637

第一步是导入正确的驱动程序,以便我们可以与TM1637交互。 TM1637显示屏具有 Android Things中受支持的驱动程序 。

要使用此显示,必须在build.gradle添加以下行:

dependencies {
 implementation 'com.google.android.things.contrib:driver-tm1637:1.0'
 ......
}

让我们创建一个新类来处理TM1637外部显示器。 此类名为TM1637Display ,其外观类似于:

public class TM1637Display {

    private NumericDisplay display;

    private String DATA_PIN = "BCM4";
    private String CLK_PIN  = "BCM3";

    private static TM1637Display me;

    public static TM1637Display getInstance() {
        if (me == null)
            me = new TM1637Display();

        return me;
    }

    private TM1637Display() {
        init();
    }

  ....
}

此类是单例类,在init()方法中,应用程序使用Data引脚Clock引脚初始化驱动程序:

private void init() {
  try {
    display = new NumericDisplay(DATA_PIN, CLK_PIN);
  }
  catch(IOException ioe) {
     ioe.printStackTrace();
  }
}

现在可以使用此方法显示数据:

public void display(String data) {
  try {
   display.display(data);
   display.setColonEnabled(true);
   display.setBrightness(NumericDisplay.MAX_BRIGHTNESS);
 }
 catch (IOException ioe) {
   ioe.printStackTrace();
 }
}

如您setBrightness ,可以使用setBrightness更改显示亮度。 MainActivity我们可以使用TM1637显示屏通过以下方式显示数据:

private void testTM1637() {
   TM1637Display display = TM1637Display.getInstance();
   display.display("1420");
}

结果如下图所示:

4个可与Android Things配合使用的外部显示器:TM1637,Max7219,SSD1306,LCD 1602,LCD 2004..._第2张图片

该外部显示器非常易于使用。

2.如何将Max7219连接到Android Things

Max7219显示器是一个LED矩阵,具有8×8个LED,可以通过打开或关闭每个LED来解决。 通常,它是单色显示器,但是还有其他带有RGB LED的变体。 它是一个SPI接口 ,有趣的方面是链接它们的能力。 它具有5个不同的引脚:

  • Vcc(+ 5V)
  • 地线
  • CLK(时钟>
  • CS
  • 数据

即使有一些限制,该外接显示器也可以有多种用途,也可以用于显示简单图像。

以下架构显示了如何将Max7219连接到Android Things:

4个可与Android Things配合使用的外部显示器:TM1637,Max7219,SSD1306,LCD 1602,LCD 2004..._第3张图片

如何在Android Things中使用Max7219

在将Max7219与Android Things结合使用之前,必须添加处理该外围设备的驱动程序。 不幸的是,Android Things不正式支持该显示,因此,有必要找到一个非官方的驱动程序。

有几种可用的驱动程序,本文中使用的一种是:

dependencies {
  implementation 'rocks.androidthings:max72xx-driver:0.2'
  ....
}

当然,您也可以使用其他驱动程序,但要注意类可能会更改。

要处理此外部显示(Max7219),我们可以创建一个名为Max7219Display的简单类,该类为单例 ,如前所述:

public class Max7219Display {

    private MAX72XX display;
    private static Max7219Display me;

    private Max7219Display() {
        init();
    }

    public static Max7219Display getInstance() {
        if (me == null)
            me = new Max7219Display();

        return me;
    }
....
}

Android Things应用在init()方法中的哪个位置初始化显示:

private void init() {
  try {
    display = new MAX72XX("SPI0.0", 1);
    //
    display.setIntensity(0, 13);
    display.shutdown(0, false);
    display.clearDisplay(0);
  }
  catch(IOException ioe) {
     ioe.printStackTrace();
  }
}

在前面的代码中,我们使用setIntensity方法初始化LED强度。 为了更好地了解如何使用此外部显示器,让我们假设我们想创建一个简单的盒子。

第一步,必须创建一个byte数组:

private byte ROW = (byte) 0b11111111;

在此阵列中,1表示LED点亮,而0则熄灭。 在此示例中,所有LED均亮起。 阵列大小为8,作为矩阵中LED的数量。 下一步是绘制方框边框:

public void drawBorder() {
   try {
     display.setRow(0, 0, ROW);
     display.setRow(0, 7, ROW);
     display.setColumn(0, 0, ROW);
     display.setColumn(0, 7, ROW);
     display.close();
   }
   catch(IOException ioe) {
     ioe.printStackTrace();
   }
}

在上面的代码中,Android Things应用程序使用setRow将字节数组应用于行中的所有LED。 在这种情况下,第一行(x = 0,y = 0)和最后一行(x = 0,y = 7)。 以相同的方式,应用程序沿列绘制边框。

最终结果如下图所示:

4个可与Android Things配合使用的外部显示器:TM1637,Max7219,SSD1306,LCD 1602,LCD 2004..._第4张图片

我们可以做更多的事情,并展示可以用于所有行和列的更复杂的数组。 将此数组添加到类中:

private byte[] table = 
    {(byte) 0b10101010,
     (byte) 0b01010101,
     (byte) 0b10101010,
     (byte) 0b01010101,
     (byte) 0b10101010,
     (byte) 0b01010101,
     (byte) 0b10101010,
     (byte) 0b01010101};

这是显示上面绘制的方法:

public void drawTable() {
        try {
           for (int i=0 ; i < table.length; i++)
               display.setRow(0, i, table[i]);

           display.close();
        }
        catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }

您可以运行它并验证结果。

3.如何将SSD1306外接显示器连接到Android Things

如前所述,SSD1306是分辨率为128×64的外部显示器。 它是OLED显示器,可以在打开或关闭期间控制每个像素。 该显示器有两种不同的变体:一种带有SPI接口,另一种带有I2C接口。 本文中使用的一个具有I2C接口。 因此,有四个不同的引脚:

  • Vcc(+ 3V或+ 5V)
  • 地线
  • 数据
  • 时钟

下面显示了有关如何将SSD外部显示器连接到Android Things的详细信息:

4个可与Android Things配合使用的外部显示器:TM1637,Max7219,SSD1306,LCD 1602,LCD 2004..._第5张图片

如何在Android Things中使用SSD1306

Android Things 正式支持 SSD1306外部显示器。 因此,有一个我们可以用来连接到该外围设备的驱动程序。

要使用此LCD显示屏,必须将此驱动程序添加到build.gradle

dependencies {
    implementation 'com.google.android.things.contrib:driver-ssd1306:1.0'
    ....
}

和之前一样,让我们​​创建一个新类来处理所有详细信息,并将id称为SSD1306Display 这个类看起来像:

public class SSD1306Display {

    private  static SSD1306Display me;
    private Ssd1306 display;

    private SSD1306Display() {
        init();
    }

    public static SSD1306Display getInstance() {
        if (me == null)
            me = new SSD1306Display();

        return me;
    }
   ..
}

init()方法定义为:

private void init() {
  try {
    display = new Ssd1306("I2C1");
    display.clearPixels();
  }
  catch (IOException ioe) {
    ioe.printStackTrace();
  }
}
[/code]

最后,我们可以开始使用此LCD显示器。 Android Things应用可以打开或关闭此显示屏中的每个LED,以便使用此功能可以画一条简单的线:

public void drawLine(int y) {
   for (int x = 0; x < display.getLcdWidth(); x++)
     display.setPixel(x, y, true);

     try {
       display.show();
     }
     catch (IOException ioe) {
        ioe.printStackTrace();
     }
}

使用setPixel ,Android Things应用可以选择每个像素的状态。 最终结果如下所示(应该有一行,但是看不到!!!):

4个可与Android Things配合使用的外部显示器:TM1637,Max7219,SSD1306,LCD 1602,LCD 2004..._第6张图片

即使打开或关闭每个LED有用,当我们想要显示更复杂的图像时,它也可能非常复杂。

因此,可以使用如下所示的另一种方式:

public void drawBitmap(Resources res) {
    Bitmap img = BitmapFactory.decodeResource(res, R.drawable.weathersun);
    BitmapHelper.setBmpData(display, 0,0, img, false);
    try {
      display.show();
    }
    catch (IOException ioe) {
      ioe.printStackTrace();
    }
}

可以直接加载图像并将其显示在LCD显示屏上。 这是非常有用和容易的。

就这样。

更多有用的资源:

如何使用Android Things和Twilio通过SMS发送通知
如何集成Android Things和Tensorflow来构建智能对象

4.如何将LCD显示器1602或2004连接到Android Things

我们在本文中介绍的最后一个外部显示器是一个简单的LCD显示器。 它可以显示标准字符或自定义字符。
它有多种尺寸,但它们的工作方式相同。 最容易找到16×2和20×4大小。 第一个可以在两行中显示16个字符,而第二个可以在四行中显示20个字符。

下图显示了如何将Android Things与LCD 2004连接:

4个可与Android Things配合使用的外部显示器:TM1637,Max7219,SSD1306,LCD 1602,LCD 2004..._第7张图片

它具有I2C接口,并且也具有背光。

如何将LCD显示器连接到Android Things

不管怎样,Android Things本身不支持这种设备,但是有几种驱动程序可用。

我们将使用的驱动程序如下所示:

dependencies {
  ...
 implementation 'com.leinardi.android.things:driver-hd44780:1.0'
}

让我们再次开始创建一个名为LCDDisplay的新类,该类与前面描述的类相似,唯一的区别在于init()

private void init() {
  try {
     driver = new Hd44780(I2C_PIN, I2C_ADDR, GEOMETRY);
     driver.cursorHome();
     driver.clearDisplay();
     driver.setBacklight(true);
  }
  catch(Exception e) {
     e.printStackTrace();
  }
}

哪里

private static final String I2C_PIN = "I2C1";
private static final int I2C_ADDR = 0x27;
private static final int GEOMETRY = Hd44780.Geometry.LCD_20X4;

小费

请注意,I2C_ADDR可能与上面显示的不同

让我们假设Android Things应用程序希望在LCD屏幕上显示一条消息。 使用的代码如下所示:

public void display(String data) {
  try {
    driver.clearDisplay();  
    driver.cursorHome();
    driver.setBacklight(true);
    driver.setText(data);
    driver.close();
  }
  catch (Exception e) {
     e.printStackTrace();
  }
}

此方法一开始会清除显示,并将光标设置为home。 下一步是设置背光,最后显示消息。

结果如下所示:

4个可与Android Things配合使用的外部显示器:TM1637,Max7219,SSD1306,LCD 1602,LCD 2004..._第8张图片

如果我们想在显示屏上滚动消息,可以使用以下方法:

public void shift(final String word, final int speed) {
  final int size = 20 - word.length();

  Runnable r = new Runnable() {
     @Override
     public void run() {
        try {
           driver.createCustomChar(empty, 0);
           for (int i = 0; i <= size; i++) {
              if (i > 0) {
                driver.setCursor(i - 1, 0);
                driver.writeCustomChar(0);
              }
              driver.setCursor(i, 0);
              driver.setText(word);
              Thread.sleep(speed);
            }
         }
         catch (Exception e) {
             e.printStackTrace();
         }
       }
    };

    Thread t = new Thread(r);
    t.start();
}

需要注意的重要有趣方面是,我们可以创建一个自定义字符。 在这种情况下,自定义字符为空字符:

int[] empty = {0b000000, 0b000000, 
               0b000000, 0b000000, 
               0b000000, 0b000000, 
               0b000000, 0b000000};

5.总结

在本文的结尾,希望您已了解如何将外部显示与Android Things一起使用。 如您所知,有几个具有不同功能的外部显示器。 根据我们的需求和方案,我们可以选择最佳的外接显示器与Android Things一起使用。

翻译自: https://www.javacodegeeks.com/2018/10/external-displays-android-things.html

你可能感兴趣的:(java,python,android,linux,编程语言)