I2C (Inter-Integrated Circuit)#

Descripción General del I2C#

I2C (Inter-Integrated Circuit o Inter-IC) es un bus de comunicación serial síncrono, multi-maestro, multi-esclavo, de conmutación de paquetes y referencia única. Se utiliza comúnmente para conectar periféricos de baja velocidad a procesadores y microcontroladores. La gran mayoría de las placas de desarrollo de UNIT ELECTRONICS, como DualMCU, DualMCU ONE y Cocket Nova, ofrecen capacidades de comunicación I2C, lo que te permite interconectar una amplia gama de dispositivos I2C. A pesar de que la Cocket Nova no cuenta con I2C nativo, se implementa bajo una técnica llamada bit-banging.

Bit-banging es una técnica de programación en la que se manipulan directamente los pines de un microcontrolador para implementar un protocolo de comunicación. En el caso de I2C, se utilizan dos pines, SDA (Serial Data) y SCL (Serial Clock), para la comunicación entre dispositivos.

I2C

Figura 14 Pines I2C Imagen obtenida de Application Note A Basic Guide to I2C#

Nota

Las tarjetas de desarrollo de UNIT ELECTRONICS son compatibles con Conector JST

Ejemplo de aplicación Pantalla SSD1306#

pantalla ssd1306

Figura 15 Pantalla SSD1306#

La pantalla OLED monocromática de 128x64 píxeles equipada con un controlador SSD1306 se conecta mediante un conector JST de 1.25mm de 4 pines. La siguiente tabla proporciona los detalles de conexión para la pantalla.

Tabla 7 Asignación de Pines de la Pantalla SSD1306#

Pin

Conexión

1

GND

2

VCC

3

SDA

4

SCL

MicroPython y Arduino IDE#

Biblioteca Enlace
ocks Ejemplo de instalación
dualmcu Biblioteca DualMCU
import machine
from dualmcu import *

i2c = machine.SoftI2C( scl=machine.Pin(22), sda=machine.Pin(21))

oled = SSD1306_I2C(128, 64, i2c)

oled.fill(1)
oled.show()

oled.fill(0)
oled.show()
oled.text('UNIT', 50, 10)
oled.text('ELECTRONICS', 25, 20)

oled.show()
pantalla ssd1306

Figura 16 Diagrama de Conexión de la Pantalla SSD1306 DualMCU#

Cocket Nova implementación de I2C#

Código Enlace
SSD1306 Proyecto Completo
#include "src/config.h"
#include "src/system.h"
#include "src/gpio.h"
#include "src/delay.h"
#include "src/oled.h"



void main(void) {
  CLK_config();
  DLY_ms(5);

  OLED_init();

  OLED_print("*  UNITelectronics  *");
  OLED_print("---------------------\n");
  OLED_print("Ready\n");
  while(1) {

  }
}
pantalla ssd1306

Figura 17 Pantalla OLED Cocket Nova#

Ejemplo de Integración#

Este ejemplo demuestra cómo integrar el Cargador Boost LiPo & Monitor I2C de UNIT con un ESP32 y mostrar el estado de la batería en una pantalla OLED.

Prudencia

Dado que el estándar Qwiic opera a 3.3V, se recomienda usar un regulador de voltaje después de la salida JST del módulo para reducir VSYS a 3.3V y proteger los dispositivos Qwiic conectados.

Pasos para integrar el Cargador Boost LiPo & Monitor I2C de UNIT con el ESP32 y la pantalla OLED usando el conector JST y la comunicación I2C:

  1. Conectar el Conector JST: Conecta el conector JST a la placa DualMCU usando el conector JST SH de 1.0mm y 4 pines.

  2. Conectar el ESP32: Conecta el ESP32 a la placa DualMCU mediante el protocolo de comunicación I2C.

ESP32

Figura 18 Conector JST SH de 1.0mm y 4 pines conectado al ESP32.#

  1. Soldar la Configuración de Pines de la Batería: Suelda las configuración apropiada para el cargador de batería. Configura la corriente de carga (0.2 mA) según las especificaciones de la batería.

Panel trasero

Figura 19 Configuración de Pines de la Batería#

Advertencia

Asegúrate de verificar la polaridad de la batería antes de conectarla al cargador.

  1. Conectar la Pantalla OLED: Conecta la pantalla OLED al ESP32 usando el protocolo de comunicación I2C.

  2. Subir el Código al ESP32: Copia el siguiente código al ESP32 y ejecútalo usando Thonny:

import machine
import time
from ocks import SSD1306_I2C
from max1704x import max1704x

i2c = machine.SoftI2C(sda=machine.Pin(21), scl=machine.Pin(22))
oled = SSD1306_I2C(128, 64, i2c)

my_sensor = max1704x(sda_pin=21, scl_pin=22)

def update_display():
  oled.fill(0)
  oled.text('UNIT Max', 25, 0)

  vcell = my_sensor.getVCell()
  soc = my_sensor.getSoc()
  compensate_value = my_sensor.getCompensateValue()
  alert_threshold = my_sensor.getAlertThreshold()
  in_alert = my_sensor.inAlert()

  oled.text("Voltaje: {:.2f}V".format(vcell), 0, 16)
  oled.text("SOC: {:.1f}%".format(soc), 0, 26)
  oled.text("Comp: {:.1f}".format(compensate_value), 0, 36)
  oled.text("Alerta: {}".format("Sí" if in_alert else "No"), 0, 46)

  oled.show()

while True:
  update_display()
  time.sleep(2)
  1. Monitorear el Estado de la Batería: La pantalla OLED mostrará el estado de la batería, incluyendo el voltaje, estado de carga, valor de compensación y estado de alerta.

  2. Cargar la Batería: Conecta la batería al cargador y monitorea el estado de carga usando la pantalla OLED.

Ejemplo de Integración

Figura 20 Ejemplo de Integración del Cargador Boost LiPo & Monitor I2C de UNIT con ESP32 y Pantalla OLED.#