alios things_4个可用于Android Things的外部显示器:TM1637,Max7219,SSD1306,LCD 1602,LCD 2004...

alios things

alios things

外部显示器是我们可以与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

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

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

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

Android Things

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

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

如何在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");
}

结果如下图所示:

Android Things

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

2.如何将Max7219连接到Android Things

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

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

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

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

Android Things

如何在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)。 以相同的方式,应用程序沿列绘制边框。

最终结果如下图所示:

Android Things

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

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的详细信息:

Android Things

如何在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应用可以选择每个像素的状态。 最终结果如下所示(应该有一行,但是看不到!!!):

Android Things

即使打开或关闭每个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连接:

Android Things

它具有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。 下一步是设置背光,最后显示消息。

结果如下所示:

Android Things

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

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

alios things

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的信息,“installing : xdg-utils-1.1.0-0.16.20120809git.1.alios7.noarch 87/92 installing(正在安装:xdg-utils-1.1.0-0.16.20120809git.1.alios7.noarch 87/92)”是在进行软件安装过程中的显示信息。 这段信息表示正在安装一个名为xdg-utils的软件包。软件包的版本号为1.1.0,构建号为0.16,构建日期为2012年8月9日。包的类型为noarch,适用于任何体系结构。该软件包是由alios7构建,并且该软件包在安装顺序中是在总共92个软件包中的第87个。 安装软件包的目的是为了增强Linux系统的桌面集成功能。xdg-utils是一个由freedesktop.org提供的软件套件,提供一系列与桌面环境集成相关的实用工具。通过安装xdg-utils,用户可以更方便地进行程序的启动、文件的打开和浏览器的调用等操作。 在安装过程中,系统会检查软件包的依赖关系,以确保所需的其他软件包已经安装并满足要求。安装过程还可能涉及从软件源或安装媒体下载软件包文件,并将其解压到相应的目录中。 安装软件包的具体过程通常是自动化的,用户只需要等待安装完成。在安装过程中可能还会显示其他信息,如进度百分比或其他配置选项。完成安装后,用户可以根据软件包的使用指南来使用新安装的软件。 总而言之,“installing : xdg-utils-1.1.0-0.16.20120809git.1.alios7.noarch 87/92 installing”是软件安装过程中的显示信息,表示正在安装xdg-utils软件包,该软件包是用于增强Linux系统的桌面集成功能的实用工具套件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值