En algunas situaciones, puede ser de utilidad la configuración de dos (o más) placas Arduino y Genuino para compartir
información entre sí. En este ejemplo, dos placas están programadas para comunicarse entre sí en una
configuración de Lector Maestro / Esclavo Remitente a través del protocolo
serie síncrono I2C
Para lograr esto se utilizan varias funciones de la Biblioteca Wire. Arduino 1, el Maestro, está programado para solicitar, y después leer, 6 bytes de datos
enviados desde un solo Esclavo Arduino direccionado. Una
vez que se recibe ese mensaje, a continuación se puede ver en la ventana de
monitor serie del Software (IDE)Arduino .
El protocolo I2C implica el uso de dos líneas para enviar y recibir datos:
-
un pin de reloj serie (SCL) envía los impulsos de la placa Arduino o Genuino Maestro a intervalos regulares,
-
un pin de datos serie (SDA) sobre el cual se envían los datos entre los dos dispositivos.
A medida que cambian las líneas de reloj de LOW a HIGH (conocido como el flanco de subida del pulso de reloj), un único
bit de información - que va a formar de la secuencia de la dirección de un
dispositivo específico y mando de datos - se transfiere desde la placa para el dispositivoI2C
a través de la línea SDA. Cuando se envía esta información - bit a bit -, la llamada del dispositivo ejecuta la
solicitud y transmite datos de nuevo es - si es necesario - a la placa sobre la
misma línea utilizando la señal de reloj que sigue siendo generada por el
Maestro en SCL como la sincronización.
Debido a que el protocolo I2Cpermite a cada dispositivo habilitado a tener su propia dirección única, y como
los dispositivos maestro y esclavo hacen turnos para comunicarse a través de una
sola línea, es posible que la placa Arduino o Genuino se comunique (a su vez)
con muchos dispositivos , u otras plataformas, utilizandp sólo dos pines del
microcontrolador.
Hardware necesario
-
2 placas Arduino o Genuino
-
cable de conexionado
Circuito
Conecte el pin 4 (pin d datos o SDA) y el pin 5 (pin de reloj, o SCL) en la placa principal con sus homólogos en la placa
esclavo. Asegúrese de que ambas placas comparten el común (GND). Con
el fin de permitir la comunicación serie, la placa maestra debe estar
conectada a su ordenador a través de USB.
Si la alimentación de los tableros de forma independiente es un problema, conecte la salida de 5 V del Maestro al
pin VIN en el esclavo.
Esquema
Código
Código para el Master Reader - Programa para Arduino 1
// Wire Master Reader
// por Nicholas Zambetti <http://www.zambetti.com>
// Demuestra el uso de la biblioteca Wire
// Lee los datos de un dispositivo esclavo I2C/TWI
// Referirse al ejemplo de "Wire Slave Sender" para usarlo con este
// Creado el 29 Marzo de 2006
// Este código es de dominio publico.
#include <Wire.h>
void setup() {
Wire.begin(); // se conecta al bus i2c (dirección opcional para el maestro)
Serial.begin(9600); // inicia la comunicacion Serie
}
void loop() {
Wire.requestFrom(8, 6); // pide 6 bytes del dispositivo esclavo numero 8
while (Wire.available()) { // el esclavo puede menos bts de los salicitados
char c = Wire.read(); // recibe un caracter como byte
Serial.print(c); // imprime el caracter
}
delay(500);
}
// por Nicholas Zambetti <http://www.zambetti.com>
// Demuestra el uso de la biblioteca Wire
// Lee los datos de un dispositivo esclavo I2C/TWI
// Referirse al ejemplo de "Wire Slave Sender" para usarlo con este
// Creado el 29 Marzo de 2006
// Este código es de dominio publico.
#include <Wire.h>
void setup() {
Wire.begin(); // se conecta al bus i2c (dirección opcional para el maestro)
Serial.begin(9600); // inicia la comunicacion Serie
}
void loop() {
Wire.requestFrom(8, 6); // pide 6 bytes del dispositivo esclavo numero 8
while (Wire.available()) { // el esclavo puede menos bts de los salicitados
char c = Wire.read(); // recibe un caracter como byte
Serial.print(c); // imprime el caracter
}
delay(500);
}
// Wire Slave Sender
// por Nicholas Zambetti <http://www.zambetti.com>
// Demuestra el uso de la biblioteca Wire
// Envía los datos como un dispositivo I2C TWI / esclavo
// Consulte el ejemplo "Wire Maestro Lector" para su uso con este
// Creado el 29 Marzo de 2006
// Este codigo es de dominio publico.
#include <Wire.h>
void setup() {
Wire.begin(8); // se conecta al bus i2c con la direccion numero 8
Wire.onRequest(requestEvent); // requiere el evento
}
void loop() {
delay(100);
}
// Función que se ejecuta cada vez que los datos se solicitan por el maestro
// Esta función se ha registrado como un evento, consulte setup()
// por Nicholas Zambetti <http://www.zambetti.com>
// Demuestra el uso de la biblioteca Wire
// Envía los datos como un dispositivo I2C TWI / esclavo
// Consulte el ejemplo "Wire Maestro Lector" para su uso con este
// Creado el 29 Marzo de 2006
// Este codigo es de dominio publico.
#include <Wire.h>
void setup() {
Wire.begin(8); // se conecta al bus i2c con la direccion numero 8
Wire.onRequest(requestEvent); // requiere el evento
}
void loop() {
delay(100);
}
// Función que se ejecuta cada vez que los datos se solicitan por el maestro
// Esta función se ha registrado como un evento, consulte setup()
void requestEvent() {
Wire.write("hello "); // responde con un mensaje de 6 bytes
// como era de esperar por el maestro
}
Wire.write("hello "); // responde con un mensaje de 6 bytes
// como era de esperar por el maestro
}
No hay comentarios:
Publicar un comentario