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.

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#

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.
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()
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SDA_PIN 4
#define SCL_PIN 5
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(9600);
Wire.setSDA(4);
Wire.setSCL(5);
Wire.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Error en la inicialización de la pantalla"));
for(;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println(F("UNIT ELECTRONICS!"));
display.display();
delay(4000);
}
void loop() {
display.clearDisplay();
display.setCursor(0, 10);
display.setTextSize(2);
display.print(F("Contador: "));
display.println(millis()/1000);
display.display();
delay(500);
}

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) {
}
}

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:
Conectar el Conector JST: Conecta el conector JST a la placa DualMCU usando el conector JST SH de 1.0mm y 4 pines.
Conectar el ESP32: Conecta el ESP32 a la placa DualMCU mediante el protocolo de comunicación I2C.

Figura 18 Conector JST SH de 1.0mm y 4 pines conectado al ESP32.#
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.

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.
Conectar la Pantalla OLED: Conecta la pantalla OLED al ESP32 usando el protocolo de comunicación I2C.
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)
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.
Cargar la Batería: Conecta la batería al cargador y monitorea el estado de carga usando la pantalla OLED.

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