PublicidadLa comunicación entre Arduino abre un mundo de posibilidades para sistemas integrados y proyectos de IoT. Un método poderoso para lograr esto es utilizar el protocolo I2C (circuito interintegrado). I2C permite una comunicación perfecta entre microcontroladores, lo que permite el intercambio de datos y comandos de control. En este artículo, profundizaremos en el proceso de controlar una placa Arduino desde otra usando I2C, explorando sus principios, configuración e implementación práctica. Lea también: ¿Qué es el protocolo I²C? Relevancia de I²C en Arduino Aquí está la documentación oficial de Arduino: https://docs.arduino.cc/learn/communication/wire/https://docs.arduino.cc/learn/communication/wire/ Comprensión de la comunicación I2C I2C es una serie síncrona Protocolo de comunicación que facilita la comunicación entre circuitos integrados utilizando sólo dos cables: una línea de datos (SDA) y una línea de reloj (SCL). Opera en una arquitectura maestro-esclavo, donde un dispositivo actúa como maestro e inicia la comunicación, mientras que los otros dispositivos actúan como esclavos y responden a los comandos del maestro. Por ejemplo, el dispositivo maestro puede generar pulsos de reloj para sincronizar la transmisión y recepción de datos. . Cada dispositivo esclavo en el bus tiene una dirección única, lo que permite al maestro seleccionar el esclavo deseado para la comunicación. Este espacio de direcciones permite que varios dispositivos coexistan en el mismo bus. Configuración del hardware Para controlar un Arduino desde otro a través de I2C, necesitará dos placas Arduino (una que actúa como maestra y la otra como esclava), junto con algunos componentes básicos: Dos placas Arduino (por ejemplo, Arduino Uno, Nano , o Mega)Cables de conexiónPlaca de pruebas (opcional, para creación de prototipos)Un LEDUna resistencia – 220OhmUn potenciómetroFuente de alimentación (USB o fuente de alimentación externa)El potenciómetro funciona gracias a PWM. Lea ¿Qué es la modulación de ancho de pulso (PWM)? Conecte las placas de la siguiente manera: Implementación de la comunicación maestro-esclavo Ahora, implementemos la comunicación maestro-esclavo entre los dos Arduinos: Configuración del Arduino esclavo (Arduino 2): Defina un I2C único dirección para el esclavo Arduino usando la función Wire.begin (dirección). Es Wire.begin(2) en nuestro caso. Implemente funciones de devolución de llamada para manejar los datos entrantes del maestro. En las funciones de devolución de llamada, procese los datos recibidos y realice las acciones deseadas. En este caso, leeremos al maestro Arduino y instruir al LED. #incluir

constante int ledPin = 10; // pin digital para LED int brillo = 0; // Brillo del LED configuración nula() { Wire.begin(2); // Inicializa la comunicación I2C con la dirección 2 Wire.onReceive(receiveEvent); // Configurar la función para recibir datos I2C pinMode(ledPin, OUTPUT); // Establece el pin LED como salida } void loop() { // No es necesario código adicional en el bucle ya que estamos usando interrupciones I2C } void recibirEvent(int byteCount) { if (byteCount == 1) { brillo = Cable. leer(); // Lee el valor enviado desde Arduino 1 analogWrite(ledPin, brillo); // Establece el brillo del LED según el valor recibido } }123456789101112131415161718192021#include constante int ledPin = 10; // pin digital para brillo LEDint = 0; // Brillo del LED configuración nula() { Wire.begin(2); // Inicializa la comunicación I2C con la dirección 2 Wire.onReceive(receiveEvent); // Configurar la función para recibir datos I2C pinMode(ledPin, OUTPUT); // Establece el pin LED como salida} void loop() { // No es necesario código adicional en el bucle ya que estamos usando interrupciones I2C} void recibirEvent(int byteCount) { if (byteCount == 1) { bright = Wire. leer(); // Lee el valor enviado desde Arduino 1 analogWrite(ledPin, brillo); // Establece el brillo del LED según el valor recibido }}Configuración del Master Arduino (Arduino 1): Básicamente, es fácil de leer desde un potenciómetro. El valor asignado se enviará a través de I2C. #incluir

potenciómetro const intPin = A0; // pin analógico para potenciómetro int potValue = 0; // Valor del potenciómetro void setup() { Wire.begin(); // Inicializa la comunicación I2C } void loop() { potValue = analogRead(potentiometerPin); // Leer el valor del potenciómetro int mappedValue = map(potValue, 0, 1023, 0, 255); // Asignar al rango PWM (0-255) // Enviar el valor asignado a través de I2C a Arduino 2 Wire.beginTransmission(2); // La dirección I2C de Arduino 2 es 2 Wire.write(mappedValue); Wire.endTransmission(); retraso(10); // Agregue un pequeño retraso para evitar una comunicación I2C excesiva }1234567891011121314151617181920#include potenciómetro const intPin = A0; // Pin analógico para potenciómetro potValue = 0; // Valor del potenciómetro void setup() { Wire.begin(); // Inicializa la comunicación I2C} void loop() { potValue = analogRead(potentiometerPin); // Leer el valor del potenciómetro int mappedValue = map(potValue, 0, 1023, 0, 255); // Asignar al rango PWM (0-255) // Enviar el valor asignado a través de I2C a Arduino 2 Wire.beginTransmission(2); // La dirección I2C de Arduino 2 es 2 Wire.write(mappedValue); Wire.endTransmission(); retraso(10); // Agregue un pequeño retraso para evitar una comunicación I2C excesiva}Aquí está la simulación: Conclusión La comunicación entre Arduino a través de I2C proporciona una forma flexible y eficiente de controlar múltiples placas Arduino en un entorno de red. Al comprender los principios de la comunicación I2C y seguir los procedimientos de configuración, puede integrar sin problemas múltiples dispositivos Arduino en sus proyectos, desbloqueando infinitas posibilidades de automatización, robótica, redes de sensores y más. Experimente con diferentes escenarios y amplíe sus conocimientos sobre sistemas integrados y aplicaciones de IoT con este potente protocolo de comunicación.