Skip to main content

I2C

El protocolo I2C se desarrolló originalmente en 1982 para receptores de TV, y juega principalmente con dos líneas (aparte de la alimentación 3.3V-5V):

  • SDA  que son los datos bidireccionales
  • SCL que es la señal de reloj

Un dispositivo hace de Master y proporciona la señal de reloj. (Puede haber extraordinariamente más de un master) y los otros dispositivos, hacen de Slave y tienen asociado una dirección.

Si quieres conectar dos Arduinos por comunicación I2C visita esta página.

En Arduino Alvik, los pines SDA y SCL están conectados en los pines 11 y 12

Podemos escanear los dispositivos I2C que estén conectados

from machine import I2C
from machine import Pin

i2c = I2C(0, scl=Pin(12, Pin.OUT), sda=Pin(11, Pin.OUT))

print()
print('Scan i2c bus...')
print()

devices = i2c.scan()

if len(devices) == 0:
    print("No i2c device !")
else:
    print('i2c devices found:',len(devices))
print()

for device in devices:
    print("Decimal address: ",device," | Hexa address: ",hex(device))

print()

Fuente : https://docs.arduino.cc/tutorials/alvik/user-manual/#grove-connectors

He conectado un OLED en el conector Grove

2025-05-07 13_24_53-WhatsApp.png

Y me ha salido que tenía dos dispositivos 

2025-05-07 13_29_41-Arduino Lab for MicroPython.png

Ejecuto el siguiente script

from machine import I2C
from machine import Pin

import ssd1306

i2c = I2C(0, scl=Pin(12, Pin.OUT), sda=Pin(11, Pin.OUT))

oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)

# step-3: reading data continuously inside loop
while True:
  try:
    oled.text('HOLA CATEDU !', 10, 10)      
    oled.show()

  except OSError as e: # Error Handling  
    print("Error Data")

Fuente https://dev.to/shemanto_sharkar/using-an-oled-display-with-micropython-on-esp32-d9h Autor Bidut Sharkar Shemanto

Y el resultado es :

2025-05-07 13_35_08-WhatsApp.png