Das dreiundzwanzigste Türchen

Il existe aujourd'hui une variante spéciale de la ESP32, à savoir la ESP32-Mini. Cette carte se caractérise par le fait qu'elle est compatible avec le D1-Mini. Cela signifie que les boucliers pour le D1-Mini peuvent être utilisés sans problème.

 


Les broches avec le bord blanc sont celles qui sont compatibles avec le D1-Mini. Si vous les équipez avec les connecteurs mâles et femelles combinés fournis, vous pouvez également utiliser l'ESP32-Mini sur le Dual-Base Shield.

Mais le tableau comporte deux autres rangées de broches, afin qu'un maximum de GPIO de la ESP32 soit utilisable. Voici le brochage complet.

 

Dans le projet d'aujourd'hui, nous voulons réaliser un petit scanner I2C compact avec l'ESP32-Mini et un écran OLED de 0,66 pouce. Le câblage est très simple, car il suffit de brancher l'écran sur l'ESP32-Mini. Nous équipons la carte ESP32 avec les quatre connecteurs femelles à dix broches. Sur les deux connecteurs femelles internes, nous branchons le bouclier de l'écran en laissant les deux broches en direction du connecteur USB libres.

Pour le bus I2C à l'étude, il serait bon que les broches requises soient situées les unes à côté des autres de manière à ce que le module I2C puisse être facilement branché. Cela peut être facilement réalisé en alimentant le module I2C via les broches GPIO. La seule restriction de cette méthode est que le module ne doit pas nécessiter plus de 30 mA, ce qui est certainement le cas de tous les modules de capteurs.
Nous utiliserons pour cela les broches GPIO27, GPIO25, GPIO32 et GPIO12 sur l'en-tête extérieur droit.

  • GPIO27 = Vcc 3,3V
  • GPIO25 = GND 0V
  • GPIO32 = SCL
  • GPIO12 = SDA

C'est le brochage typique de la plupart des modules avec bus I2C.

La photo montre l'ESP32-Mini avec son écran et un module de capteur BMP180.

 


Toutefois, cette structure présente encore un léger inconvénient. Il existe également des modules de capteurs avec la même affectation des broches, mais avec des broches supplémentaires. Ces broches ne doivent pas être connectées aux broches adjacentes du connecteur femelle ESP32. En outre, il n'est plus possible de brancher simplement le module de test lorsque le scanner doit être installé dans un boîtier. La solution est une extension à quatre broches pour les broches de test.

 


Nous fabriquons cette extension à partir de l'un des deux connecteurs combinés broche et femelle inclus. Nous le coupons de manière à ce qu'il reste quatre broches. Nous branchons cette extension sur les broches de test. Maintenant, les broches supplémentaires des modules de capteurs se trouvent juste à l'extérieur du connecteur femelle. Lorsqu'elles sont installées dans un boîtier, les broches d'essai dépassent du boîtier de manière à être facilement accessibles.

Le programme est très simple. Pour le balayage, une connexion est essayée avec les 127 adresses I2C l'une après l'autre.  Si la connexion est réussie, l'adresse correspondante est affichée à l'écran. La mesure est effectuée pour différentes vitesses de bus.

  • 100kHz Standard I2C
  • 400kHz Fast I2C
  • 1 MHz Fast Plus I2C
  • 4 MHz High Speed I2C

Pour la compilation, nous avons besoin du paquet ESP32 et des bibliothèques Adafruit_GFX.h et Adafruit_SSD1306.h pour l'affichage.

#include<Wire.h> //I2C Bibliothek im Package enthalten
#include <Adafruit_GFX.h> //Allgemeine Grafik Bibliothek
#include <Adafruit_SSD1306.h> //Bibliothek für den verwendeten Display Treiber


#define SDA1 21 //Daten Pin für den ersten I2C Bus für das Display
#define SCL1 22 //Takt Pin für den ersten I2C Bus für das Display

#define SDA2 12 //Daten Pin für den zweiten I2C Bus verwendet als Testbus
#define SCL2 32 //Takt Pin für den zweiten I2C Bus verwendet als Testbus
#define MVIN 27 //Pin für die Stromversorgubg immer auf HIGH
#define MGND 25 //Pin für GND immer auf LOW

#define X0 32 //Das Display hat nur 64 Pixel in der Breite, der SSD1306 kann aber nur mindestens
//96 Pixel richtig verarbeiten, wobei sich die übrigen 32 Pixel am linken Rand
//befinden. Alle Ausgaben auf das Display haben daher einen Offset von 32 Pixeln

//Instanzen für die beiden I2C Busse
TwoWire I2Ca = TwoWire(0);
TwoWire I2Cb = TwoWire(1);

//Instanz für das Display die Parameter sind
//Display-Breite, Display-Höhe und Adresse der I2C Bus Instanz
Adafruit_SSD1306 display(96,48,&I2Ca);

//Bufferspeicher für die gefundenen Adressen
//"--" bedeutet keine Adresse gefunden
char adresse[4][3] = {"--","--","--","--"};

//Ein Scan mit einer bestimmten Frequenz wird durchgeführt
//Der Parameter step gibt die Nummer der Messung an
void scan(uint32_t frequency, uint8_t step) {
bool error = false;
bool found = false;
I2Cb.setClock(frequency); //I2C Busfrequenz setzen
for(int i=1; i<128; i++){
I2Cb.beginTransmission(i); //I2C Übertragung starten
error = I2Cb.endTransmission(); //Beim Beenden prüfen wir auf Fehler
if(error == 0){ //War kein Fehler aufgetreten, merken wir uns die Adresse
sprintf(adresse[step],"%02x",i);//Adresse als zweistellige HEX Zahl speichern
found=true;
    }
  }
if (!found) {
strcpy(adresse[step],"--"); //es wurde keine funktionierende Adresse gefunden
}
  }
}

//Die gefundenen Adressen in der zweiten Spalte des Displays anzeigen
void displayResult(){
for (uint8_t i = 0;i<4; i++){
display.fillRect(X0+45,8*i+16,12,8,BLACK); //Zuerst einen alten Wert löschen
display.setCursor(X0+45,16+i*8); //Cursor setzen X=45 und Y ab Zeile 3 daher + 16
display.print(adresse[i]); //Daten aus dem Bufferspeicher ausgeben
}
display.display(); //Display aktualisieren
}



void setup() {
Serial.begin(115200);
//Pins für die Stromversorgung des Testmodul
pinMode(MVIN,OUTPUT);
pinMode(MGND,OUTPUT);
digitalWrite(MVIN,1);
digitalWrite(MGND,0);
//Beide i2C Busse initialisieren
I2Ca.begin(SDA1,SCL1,400000);
I2Cb.begin(SDA2,SCL2,400000);
//Display initialisieren
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
//Leeres Formular anzeigen
display.clearDisplay();
display.setFont(NULL);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setTextWrap(0);
display.setCursor(X0+8,2);
display.print("I2C-Scan");
display.setCursor(X0,16);
display.print("100kHz");
display.setCursor(X0,24);
display.print("400kHz");
display.setCursor(X0,32);
display.print("1.0MHz");
display.setCursor(X0,40);
display.print("3.4MHz");
display.display();
}

void loop() {
//Scans für die verschiedenen Frequenzen durchführen
scan(100000,0);
scan(400000,1);
scan(1000000,2);
scan(3400000,3);
//Ergebnis anzeigen
displayResult();
//1s warten
delay(1000);
}

Et voici à quoi ressemble notre scanner I2C dans un boîtier:


Amusez-vous à le construire.

Voici les liens vers le croquis et les fichiers d'impression 3D partie inférieure / partie supérieure.

Specials

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Messages de blogs recommandés

  1. Installez maintenant ESP32 via l'administrateur de la carte
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA-Over the Air-ESP Programmation par WiFi