Scanner I2C con display LC

Ciao e benvenuto al nostro post sul blog di oggi.

Il bus I2C (inglese:I-Squared-C) è un bus dati seriale. Questo è noto anche come TWI (Two-Wire-Interface).
Permette la comunicazione tra un controller Mickro e diversi moduli su solo 2 linee, e lo rende molto facile da collegare e programmare sensori e moduli.

Ogni dispositivo abilitato per I2C ha un indirizzo specificato dal produttore. Per alcuni moduli, i 3 bit più bassi possono essere impostati su 3 pin di controllo. In questo caso, fino a otto IC simili possono essere azionati su un bus I2C.

Per scoprire l'indirizzo I2C di un modulo, gli hobbisti amano utilizzare un piccolo schizzo come i2cdetect, che cerca i diversi indirizzi del bus I2C e lo elenca nel monitor seriale.
Tuttavia, se si dispone di molti moduli I2C, o spesso è necessario testare grandi quantità, si consiglia uno scanner i2C con display.

Per questo progetto sono state utilizzate le seguenti parti:

- un modulo NodeMCU ESP32 (perché ha 2 bus I2C separati)
- il pacchetto display HD44780 1602 con interfaccia I2C
- 2x Breadboard
- 8x Cavo Jumper m2f
- 2x cavo ponticello m2m
- Cavo Micro USB per ESP32

Il circuito è cablato come nella tabella seguente.

 

tavolo

Quando carichiamo il nostro schizzo su ESP32, il seguente messaggio appare alternativamente sul display:

Display LC 1

Non appena colleghiamo un modulo I2C alle nostre linee di prova per SDA e SCL/SCK e lo forniamo con alimentazione, l'indirizzo trovato appare sul display:

Display LC 2
Si consiglia di etichettare le connessioni di prova e installare il tutto in un alloggiamento.

Etichetta

Ciò significa che abbiamo creato un semplice dispositivo di test con il quale possiamo determinare in modo rapido e affidabile l'indirizzo I2C dei nostri moduli in futuro e senza un computer.

Siamo lieti di fornirvi lo schizzo corrispondente:

 

Scanner di indirizzi slave I2C
Kutscher07: Modificato per la scheda TTGO TQ con OLED integrato
fonte: https://github.com/espressif/arduino-esp32/issues/977
Consegna a A: modificato per ESP32 con 1602 LCD
*/
#include <Filo.H>
#include <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 (Colonne di lcd) = 16;
uint8_t lcdRows (informazioni in base ai colori in = 2;
Bool Rilevato=False;
Regolare l'indirizzo del display utilizzato qui.
LiquidCrystal_I2C Lcd(0x3F (in modo di, lcdColumns (Colonne di lcd), lcdRows (informazioni in base ai colori in);   Vuoto scansione2(){   Rilevato=False;   Lcd.Setcursor(0,0);   Lcd.Chiaro();   Lcd.Stampare("I2C trovato a: ");   Lcd.Setcursor(0,1);   uint8_t Cnt=0;   Per(uint8_t Ho.=0;Ho.<128;Ho.++){     I2Ctwo.beginTransmission(Ho.);     uint8_t Ce=I2Ctwo.endTransmission(Vero);     Se(Ce==0){       Rilevato=Vero;       Se(Ho.<16) Lcd.Stampare("0");       Lcd.Stampare("0x");       Lcd.Stampare(Ho.,Hex);       Lcd.Stampare(" ");       Cnt++;     }   }   Se (Rilevato==False){     Lcd.Chiaro();     Lcd.Setcursor(0,0);     Lcd.Stampare("Nessun dispositivo I2C");     Lcd.Setcursor(0,1);     Lcd.Stampare("trovato ...");   }
}   Vuoto Installazione(){
I2Cone.Iniziare(SDA1,SCL1,400000); SDA pin 21, SCL pin 22 TTGO TQ
I2Ctwo.Iniziare(SDA2,SCL2,400000); SDA2 pin 17, sCL2 pin 16    Lcd.Init();   Lcd.Retroilluminazione();
}

Vuoto Ciclo(){   Lcd.Setcursor(0, 0);   Lcd.Chiaro();   Lcd.Stampare("Scansione bus I2C...");   Ritardo(2000);   scansione2();   Ritardo(4000);
}

 


Speriamo che ti sia piaciuto il progetto di oggi. Forse avete idee e suggerimenti su come espandere il tutto? Attendiamo con ansia il tuo feedback e ti salutiamo fino al prossimo post.

DisplaysEsp-32Progetti per principianti

3 Kommentare

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?

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Post di blog consigliati

  1. Installa ESP32 ora dal gestore del consiglio di amministrazione
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - Programmazione ESP tramite WLAN