I²C Scanner mit LC Display - AZ-Delivery

Hallo und willkommen bei unserem heutigen Blog-Beitrag.

El I2C Bus (en inglés "I-Quadrat-C" o "I-Squared-C") es un autobús de datos en serie. Esto también se conoce como la TWI (interfaz de dos cables).
Permite la comunicación entre un Mickrocontroller y varios módulos a través de solo 2 líneas, y le permite cambiar fácilmente y programar sensores y módulos.

Cada dispositivo habilitado con I2C tiene una dirección establecida por el fabricante. Para algunos módulos, los 3 bits inferiores se pueden establecer en 3 pines de control. En este caso, hasta ocho IC pueden operarse en un autobús I2C.

Para obtener la dirección I2C de un módulo en contacto, a Bastler le gusta recurrir a un pequeño boceto como i2cdetect, que busca las diversas direcciones del bus I2C, y lo enumera en el monitor en serie.
Wer jedoch viele I2C Module hat, oder öfters groe Mengen testen muss, für den bietet sich ein i2C Scanner mit Display an.

Para este proyecto se utilizaron los siguientes componentes:

- un módulo ESP32 NodeMCU (ya que este 2 tiene autobuses I2C separados)
- el paquete de pantalla HD44780 1602 con interfaz I2C
- 2x Breadboard
- 8x Jumper Kabel m2f
- 2x Jumper Kabel m2m
- Cable micro USB para el ESP32

El circuito está conectado como en la siguiente tabla.

 

Cuadro

Si ahora subimos nuestro boceto al ESP32, se mostrará el siguiente mensaje en la pantalla:

LC Display 1

Una vez que conectamos un módulo I2C a nuestras líneas de prueba para SDA y SCL / SKK y fuente de alimentación, la dirección encontrada aparece en la pantalla:

LC Display 2
Se recomienda etiquetar las conexiones de prueba e insertar el todo en una carcasa.

etiqueta

Esto significa que hemos creado un dispositivo de prueba simple que nos permitirá ser rápidos y confiables en el futuro, y sin computadoras que puedan determinar la dirección I2C de nuestros módulos.

Estaremos encantados de proporcionarle el boceto:

 

/* Escáner de dirección de esclavos I2C
Kutscher07: Geändert für TTGO TQ Board mit integriertem OLED
Fuente: https://github.com/espressif/arduino-esp32/issues/977
Entrega AZ: Modifiziert für ESP32 mit 1602 LCD
*/
#incluir <Draht.h>
#incluir <LiquidCrystal_I2C.h>
#define SDA1 21
#define SCL1 22
#define SDA2 17
#define SCL2 16
TwoWire I2Cone = TwoWire(0);
TwoWire I2Ctwo = TwoWire(1);
uint8_t lcdColumns = 16;
uint8_t lcdRows = 2;
Bolsa erkannt=falsch;
//Hier die Adresse des verwendeten Displaya anpassen.
LiquidCrystal_I2C lcd(0x3F, lcdColumns, lcdRows);   read scan2(){   erkannt=falsch;   lcd.setCursor(0,0);   lcd.klar();   lcd.drucken("I2C gefunden bei: ");   lcd.setCursor(0,1);   uint8_t cnt=0;   für(uint8_t i=0;i<128;i++){     I2Ctwo.comenzarTransmisión(i);     uint8_t ec=I2Ctwo.Transmisión final(wahr);     wenn(ec==0){       erkannt=wahr;       wenn(i<16) lcd.drucken("0");       lcd.drucken("0x");       lcd.drucken(i,HEX);       lcd.drucken(" ");       cnt++;     }   }   wenn (erkannt==falsch){     lcd.klar();     lcd.setCursor(0,0);     lcd.drucken("Keine I2C-Geräte");     lcd.setCursor(0,1);     lcd.drucken("encontrado...");   }
}   read Configuración(){
I2Cone.beginnen(SDA1,SCL1,400000); // SDA pin 21, SCL pin 22 TTGO TQ
I2Ctwo.beginnen(SDA2,SCL2,400000); // SDA2 pin 17, SCL2 pin 16    lcd.entrada();   lcd.Hintergrundlicht();
}

read Schleife(){   lcd.setCursor(0, 0);   lcd.klar();   lcd.drucken("Escaneando autobús I2C...");   Verzögerung(2000);   scan2();   Verzögerung(4000);
}

 


Esperamos que te haya gustado el proyecto de hoy. ¿Tal vez tienes ideas y sugerencias sobre cómo extender el todo? Esperamos con interés su opinión y despídenos del próximo post.

DisplaysEsp-32Projekte für anfänger

3 comentarios

ad

ad

/* I2C slave Address Scanner
Kutscher07: Modified for TTGO TQ board with builtin OLED
Quelle: https://github.com/espressif/arduino-esp32/issues/977
AZ-Delivery: Modified for ESP32 with 1602 LCD
*/
#include
#include
#define SDA1 21
#define SCL1 22
#define SDA2 17
#define SCL2 16
TwoWire I2Cone = TwoWire(0);
TwoWire I2Ctwo = TwoWire(1);
uint8_t lcdColumns = 16;
uint8_t lcdRows = 2;
bool detected=false;
//Hier die Adresse des verwendeten Displaya anpassen.
LiquidCrystal_I2C lcd(0×3F, lcdColumns, lcdRows);  

void scan2(){
 detected=false;
 lcd.setCursor(0,0);
 lcd.clear();
 lcd.print(“I2C found at:  ”);
 lcd.setCursor(0,1);
 uint8_t cnt=0;
 for(uint8_t i=0;i<128;i++){
   I2Ctwo.beginTransmission(i);
   uint8_t ec=I2Ctwo.endTransmission(true);
   if(ec==0){
     detected=true;
     if(i<16) lcd.print(“0”);
     lcd.print(“0x”);
     lcd.print(i,HEX);
     lcd.print(" “);
     cnt++;
   }
 }
 if (detected==false){
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print(”No I2C devices");
   lcd.setCursor(0,1);
   lcd.print(“found …”);
 }
}  

void setup(){
I2Cone.begin(SDA1,SCL1,400000); // SDA pin 21, SCL pin 22 TTGO TQ
I2Ctwo.begin(SDA2,SCL2,400000); // SDA2 pin 17, SCL2 pin 16
 lcd.init();
 lcd.backlight();
}

void loop(){
 lcd.setCursor(0, 0);
 lcd.clear();
 lcd.print(“Scanning I2C Bus…”);
 delay(2000);
 scan2();
 delay(4000);
}

Armin Walter

Armin Walter

In der Prozedur setup() fehlt die Initialisierung von IIC.

Einfügen Wire.begin(); vor “I2Cone.begin………”

Michael Reichelt

Michael Reichelt

Hallo, beim Compilieren erhalte ich den Fehler
no matching function for call to ‘TwoWire::TwoWire(int)’
Ich habe es dann mit dem oben erwähnten Script i2cdetect versucht, der produziert den gleichen Fehler – was mache ich falsch?

Deja un comentario

Todos los comentarios son moderados antes de ser publicados