Usando I2C en ODROIDs con Android Things

Este es la continuación del artículo inicial “Android Things” del número de Enero 2020 de la revista, en el que se detalla cómo usar el nuevo sistema operativo de Google que facilita el uso de los pines GPIO en dispositivos ODROID

I2C

Figura 01 - Tabla I2C disponible

También puedes usar I2C en la placa ODROID con Android. Puedes usar cualquier API I2C proporcionada por Android. Android Things admite varios tamaños de transmisión de datos, bytes, palabras y datos almacenados en búfer.

Exporté el ejemplo de Weather board 2 (https://www.hardkernel.com/product-category/sensor/) a Android con Android things. También exporte la pantalla I2C  (https://www.hardkernel.com/product-category/display/). Al igual que otros dispositivos I2C conocidos, estos dos dispositivos están conectados con 4 cables, voltaje, tierra, I2C SDA e I2C SCL. En los ejemplos, conecté los cables I2C al I2C-2.

Figura 02 - Diagrama de Weather Board 2

Figura 03 - Diagrama LCD I2C

La mayoría de los procedimientos previos son iguales al procedimiento GPIO. Añadir permiso al manifiesto, importar y llamar la instancia de Peripheral Manager al código fuente del proyecto. Sin embargo, no necesitas coger una instancia de GPIO. Debes llamar al método openI2cDevice para obtener la instancia del dispositivo I2C.

...
List i2cBusList = manager.getI2cBusList();

I2cDevice device  = manager.openI2cDevice(i2cBusList.get(0), 
                      I2C_DEVICE_ADDRESS);
// or i2cDevice device = manager.openI2cDevice(“I2C-2”, 
//                         I2C Device Address);
...
Los nombres de la interfaz I2C son I2C-2 e I2C-3. Cada interfaz I2C consta de los pines 3,5 y 27, 28. Cuando obtengas el dispositivo de bus I2C, debe configurar la dirección del dispositivo I2C para cada chip I2C. En este caso, la weather board 2 consta de dos chips I2C. De modo que, creé dos instancias de dispositivo I2C. Una instancia está vinculada por 0x76 al BME280. El chip ofrece valores de temperatura, presión y humedad. Y la otra instancia está vinculada por 0x60 al SI1132. El chip ofrece valores UV, visibles e IR. Y la LCD I2C tiene un chip I2C, así que creé una instancia de I2C. Se vincula por 0x27 para controlar la pantalla LCD. De esta manera, debes crear una instancia de dispositivo I2C para cada dispositivo con su propia dirección

A través de la instancia I2C, puede comunicarte con el dispositivo. Android things proporcionan muchos métodos. Para leer los datos de un dispositivo, proporciona los métodos read, readRegBuffer, readRegByte y readRegWord. También para escribir datos en el dispositivo, proporciona write, writeRegBuffer, writeRegByte y writeRegWord. En el sitio web oficial de Android Things tienes mucha información al respecto.

Referencia del método del dispositivo I2C - https://bit.ly/36yY6N0.

Usando la API I2C, compilé una clase envoltura para weather board2 y I2C LCD. Aquí tienes una parte del código de ejemplo para leer y escribir datos con la API de Android things.

…
private void softrst() throws IOException {
    device.writeRegByte(reg.RST, POWER_MODE.SOFT_RESET_CODE);
}

private byte getPowerMode() throws IOException {
    return (byte) (device.readRegByte(reg.CTRL_MEAS) & 0b11);
}
...
El código es parte de BME280.java. El primer método se llama para reiniciar el chip y el segundo método para obtener el modo de energía del chip. El primer parámetro de cada API es la dirección del registro en el chip. En el método de escritura, el segundo parámetro suele ser la información a transferir. En el método de lectura, el segundo parámetro generalmente no existe. Sin embargo, si desea leer datos por búfer, necesita un búfer para leer y el búfer se pasa como un segundo parámetro.

Puedes probar o usar el proyecto. Aquí tienes el link.

Weather board2 con ejemplo de android things - https://bit.ly/3aKqjnr. Ejemplo de I2C LCD con android things - https://bit.ly/2RUvIzJ.

A continuación, se muestra la conexión del hardware de la Weather board 2:

Figura 04

El resultado de la salida Weather Board 2 sería así:

Figura 05

A continuación, se muestra la conexión y el resultado del hardware LCD I2C:

Figura 06

Figura 07

PWM

Figura 08 - Tabla PWM disponible

Las cosas de Android también son compatibles con PWM. Existen muchos métodos para configurar y controlar la interfaz PWM. Puedes configurar la frecuencia PWM a través de setPwmFrequency. Antes de habilitar el pin, debe establecer la frecuencia a través de este método. También puede fijar el ciclo de trabajo PWM estableciendo setPwmDutyCycle entre 0 y 100. Las configuraciones de frecuencia y ciclo de trabajo se pueden ajustar en estado habilitado y deshabilitado y serán recordadas.

Por favor, consulta la referencia. https://developer.android.com/things/sdk/pio/pwm.

Aquí está el proyecto de prueba PWM. En este ejemplo, puede activar y desactivar un pin PWM. y cambiar el ciclo de trabajo a través de la barra de progreso en la Aplicación: https://github.com/xiane/thingsGpioExample/tree/pwm.

Figura 09 - Estado PWM OFF

Figura 10 - PWM LED OFF

Figura 11 - PWM LED scope OFF

Figura 12 - PWM ON 50%

Figura 13 - PWM LED ON

Figurea14 - PWM LED scope ON

Figura 15 - PWM ON 100%

Ten en cuenta que el voltaje en los pines GPIO en ODROID-N2 es de 3.3V.

Referencia https://bit.ly/36qpFrW

Be the first to comment

Leave a Reply