Ir a contenido
📢 ¡Nos mudamos! 🏢✨ Av. Lapislázuli 2074-Interior 7, colonia Victoria, Guadalajara, Jal. Lunes - viernes 10am - 6:30pm
📢 ¡Nos mudamos! 🏢✨ Av. Lapislázuli 2074-Interior 7, colonia Victoria, Guadalajara, Jal. Lunes - viernes 10am - 6:30pm
¿Como mandar datos a otro arduino por I2C?

¿Como mandar datos a otro arduino por I2C?

Muchas veces tenemos la necesidad de comunicar dos microcontroladores y para ello una de las mejores alternativas es el protocolo de comunicación I2C.

¿Que es i2c? Circuito inter-integrado (Inter-Integrated Circuit) es un bus serie de datos desarrollado en 1982 por Philips. Poco a poco fue aceptado por otros fabricantes hasta convertirse en un estándar.

El bus I2C requiere únicamente dos cables para su funcionamiento.

  • Señal de reloj (CLK)
  • Señal de datos (SDA)

¿Cuando usar protocolo i2c?

Se utiliza en muchas aplicaciones como la lectura de múltiples sensores con la ventaja de solo conectar 2 cables algunos módulos que funcionan bajo este protocolo se encuentran RTC DS3231, sensores de temperatura DHT11, Humedad DHT22, acelerometros/giroscopios MPU6050, pantallas LCD entre muchos mas.

El bus I2C por lo general está construido por un maestro y una serie de esclavos. Los maestros son los que determinan los tiempos y a que esclavo se dirigen los datos.

Ubicación pines SDA SCL

Tarjeta

SDA

SCL

Arduino UNO

A4

A5

Arduino NANO

A4

A5

Arduino MEGA

20

21

 

Comunicar 2 arduinos por I2C

Para este ejemplo usaremos la librería "wire.h" por lo que deberemos incluirla en el programa que vamos a escribir.

Funciones principales

Wire.begin (dirección)

Se utiliza para establecer comunicación con dispositivos I2C.

Dirección: la dirección del esclavo de 7 bits es opcional y si la dirección no se especifica, se une al bus como un maestro.

Wire.read()

Esta función se usa para leer un byte que se recibió del dispositivo maestro o esclavo.

Wire.write()

Esta función se utiliza para escribir datos en un dispositivo esclavo o maestro.

Material

 Para este ejemplo un arduino nano cumplirá la tarea como maestro y un arduino UNO (esclavo) sera el encargado de ejecutar tareas que el maestro le asigne.

Las tareas o procesos se controlaran con una maquina de estados, ese estado sera actualizado por el usuario.

El usuario podrá seleccionar 4 tareas diferentes desde el modulo touch de 4 canales. Los procesos se realizan con una función que acepta como parametro el tiempo de transición entre cada relevador.

void Proceso(int Tiempo)

Proceso_1

Encenderá los relevadores (ch1 al ch4) dejando un tiempo de 200 ms entre cada cambio.

Proceso_2

Encenderá los relevadores (ch1 al ch4) dejando un tiempo de 400 ms entre cada cambio.

Proceso_3

Encenderá los relevadores (ch1 al ch4) dejando un tiempo de 800 ms entre cada cambio.

Proceso_4

Detendrá todo el proceso, los procesos en este ejemplo no pueden ser interrumpidos a la mitad.

Diagrama de conexión maestro

Código maestro NANO

 

 Codigo Esclavo Arduino UNO

 Repositorio Github

Referencias

https://es.wikipedia.org/wiki/I%C2%B2C

https://www.arduino.cc/en/Reference/Wire

 

Artículo anterior Control touch para casco IRON MAN

Dejar un comentario

Los comentarios deben ser aprobados antes de aparecer

* Campos requeridos