Arduino i2c scanner, varios devices en i2c

IIC Arduino (I2C – Inter-Integrated Circuits) es un protocolo de comunicación serie en dos líneas de comunicación bidireccionales. Estas líneas también se denominan: SDA (Serial Data) – bus de datos y SCL (Serial Clock) – bus de reloj. Los buses SDA y SCL del Arduino se conectan al bus de alimentación mediante resistencias. Echemos un vistazo a lo que es el bus i2c de arduino y cómo comunicarse con múltiples dispositivos en el bus i2c Arduino.

Para esta actividad necesitaremos:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • sensor de presión barométrica bmp180;
  • pantalla LCD 16×2 i2c;
  • cables de conexion;
  • librerias SFE_BMP180.h y LiquidCrystal_I2C.h

Qué es I2C puerto Arduino

I2C es un sistema de comunicación bidireccional basado en 2 hilos, el SDA (Datos) y el SCL (reloj) muy parecido al formato de comunicación Serial. I2C significa Inter-Integrated Circuit (Inter-Circuitos Integrados). desarrollada en el año 1980 por Philips cuya patente caducó en 2006. La velocidad es de 100 kbit/s en el modo estándar, aunque también permite velocidades de 3.4 Mbit/s. El protocolo se basa en peticiones «Master – Slave» .

Comunicación en el bus i2c Arduino Nano, Uno
Comunicación en el bus i2c Arduino Nano, Uno

A cada dispositivo, cuando se conecta al microcontrolador, se le asigna una dirección única (se puede conectar un máximo de 127 dispositivos). No es posible cambiar la dirección del dispositivo en el bus, ya que está integrada en el chip. A menudo, los fabricantes ofrecen la posibilidad de cambiar la dirección del dispositivo dentro de un pequeño rango, lo que hace posible conectar varios dispositivos idénticos al bus i2c de Arduino Mega 2560.

Comunicación en el bus i2c Arduino Uno, Nano

Conexión y uso de la pantalla LCD i2c con Arduino
Conexión y uso de la pantalla LCD i2c con Arduino
LCD 1602 i2c Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
VCC 5V 5V 5V
SDA A4 A4 20
SCL A5 A5 21

Los microcontroladores Arduino utilizan dos pines para el funcionamiento i2c. En Arduino Uno y Nano, la línea SDA corresponde al puerto analógico A4 y SCL corresponde al puerto analógico A5. En el Ardunio Mega, SDA es de 20 pines y SCL es de 21 pines. Para facilitar el trabajo con el bus i2c y el intercambio de datos entre dispositivos, la librería estándar Wire está escrita para el IDE de Arduino (no es necesario descargarla e instalarla).

Programa Arduino para scanner bus i2c

#include "Wire.h"
 
void setup(){
    Wire.begin();    
    Serial.begin(9600);
} 
 
void loop(){
    byte error, address;
    int nDevices;
 
    Serial.println("Scanning...");
 
    nDevices = 0;
    for(address = 8; address < 127; address++ ){
        Wire.beginTransmission(address);
        error = Wire.endTransmission();
 
        if (error == 0){
            Serial.print("I2C device found at address 0x");
            if (address < 16)
                Serial.print("0");
            Serial.print(address,HEX);
            Serial.println(" !");
 
            nDevices++;
        }
        else if (error == 4) {
            Serial.print("Unknow error at address 0x");
            if (address < 16)
                Serial.print("0");
            Serial.println(address,HEX);
        } 
    }
    if (nDevices == 0)
        Serial.println("No I2C devices found\n");
    else
        Serial.println("done\n");
 
    delay(5000);
}

Explicación del código para scanner bus i2c Arduino:

  1. este código permite conocer todas las direcciones de los dispositivos conectados al bus iic. Si no se ha conectado un dispositivo o se ha conectado incorrectamente, el puerto serie mostrará un mensaje indicando que no se ha encontrado ningún dispositivo;
  2. se puede conectar cualquier dispositivo en lugar de una pantalla LCD – módulo DS1302 de tiempo real, sensor de presión BMP180, etc.

Conectar varios dispositivos en bus i2c Arduino Nano, Uno

Cómo conectar capteur bmp180 Arduino y LCD 16x2 i2c
Cómo conectar capteur bmp180 Arduino y LCD 16×2 i2c
BMP180 (GY-68) Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
VIN 5V 5V 5V
SDA A4 A4 20
SCL A5 A5 21

En el siguiente ejemplo, dos dispositivos, la pantalla 1602 y el sensor de presión bmp180 se conectarán al bus IIC. Después de ensamblar el circuito, puedes pre-escanear el bus, usando el programa publicado arriba. Las direcciones de los dispositivos son diferentes y sólo se puede cambiar la dirección de la pantalla. Para el resto de dispositivos, las direcciones están «cableadas» por el fabricante y se utilizan en las librerías por defecto.

Conexión de varios dispositivos al bus i2c Arduino

#include "Wire.h"
#include "SFE_BMP180.h"

SFE_BMP180 pressure;
#define ALTITUDE 1655.0

#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD(0x27,16,2);

void setup(){
   pressure.begin();
   LCD.init();
   LCD.backlight();
}

void loop(){
   char status;
   double T,P,p0,a;
 
   status = pressure.startTemperature();
   if (status != 0){
      delay(status);

      status = pressure.getTemperature(T);
      if (status != 0){
         LCD.setCursor(0, 0);
         LCD.print("Temp: ");
         LCD.print(T,2);
         LCD.print(" *C");

         status = pressure.startPressure(3);
         if (status != 0){
            delay(status);

            status = pressure.getPressure(P,T);
            if (status != 0){

              p0 = pressure.sealevel(P,ALTITUDE);
              LCD.setCursor(0, 1);
              LCD.print("Pres: ");
              LCD.print(p0,2);
              LCD.print(" mb, ");
           }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");

  delay(5000);
}

Explicación del código conectar varios dispositivos i2c arduino:

  1. modificando el programa, puede mostrar la presión atmosférica absoluta y relativa;
  2. para este ejemplo se utiliza la biblioteca estándar LiquidCrystal.h

Conclusión. Hemos investigado la posibilidad de conectar varios dispositivos i2c a la placa Arduino, lo que será útil conocer a la hora de diseñar diferentes DIYs proyectos, por ejemplo una estación meteorológica en el Arduino con un sensor de presión. Si aún tienes preguntas sobre el escáner de bus i2c o la conexión de varios dispositivos mediante este protocolo, no dudes en dejarlas en los comentarios de este artículo.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *