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.
15 commentaires
Eric McLean
Das Problem mit dem “Nicht bootenden Board” liegt an einem Kontruktionsfehler. Das Board kann theoretisch nur per USB gestartet werden. Dies liegt an dem Fakt, dass IO 0, der beim normalen Booten HIGH sein muss nur durch einen Transistor auf 3,3V gezogen wird. Dieser Transistor wird durch den USB-UART Controller geschaltet. Dieser läuft nicht bei Versorgung über VCC oder 3V3, da es eine Diode in Sperrichtung von VCC nach USB + gibt.
Andreas Wolter
@Rainer Rebhan: unabhängig von diesem Bord ist es immer ratsam, eine höhere Spannung an die VCCs anzulegen, wenn ein Spannungsregler verbaut ist. Denn der möchte 5V erzeugen. Oft funktioniert das eben nicht, wenn 5V reingehen. Somit ist meine Aussage schon korrekt.
Die Frage ist nun, warum es in Ihrem Fall nicht funktioniert. Ich habe etwas recherchiert und es scheint öfter das Problem mit diesen Entwicklungsboards zu geben.
Es hängt davon ab, was Sie für ein Netzteil verwenden. Es gibt Steckernetzteile, die keine Saubere Welle erzeugen. Dazu gibt es dann noch Probleme, wenn WiFi aktiviert ist. Möglichweise ist dann auch die Belastung zu hoch, wenn wie in diesem Projekt ein Display angeschlossen ist. Dann sollten es mehr als 8V sein und auch genug Strom.
Als Lösungsvorschläge hätte ich da nur:
anderes Netzteil,
höhere Spannung an 5V VCC (Max 12V)
3,3V Pin verwenden (mit 3,3V!)
nur den Blink Sketch ohne WiFi und ohne weitere Hardware testen
Workarounds wären entweder den USB-Port zu verwenden. Über ein Steckernetzteil oder ein aufgetrenntes USB-Kabel an ein anderes Netzteil mit 5V Spannug am Ausgang. Man könnte auch auf die Pads der USB-Buchse löten.
Ich kann nicht genau sagen, warum diese Boards das Problem haben. Meistens liegt das scheinbar an den Spannungsreglern, die darauf verbaut sind.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Rainer Rebhan
> Ext. Versorgungsspannung am +5V Pin.
Hallo Hr. Wolter,
meine Frage zur ext. Spannungsversorgung am +5V Pin des ESP32 Mini wurde von ihnen bereits öfters beantwortet. Jedoch ist ihre Aussage “bei einer etwas höheren Spannungsvers. ca. 6-9V” dann funktioniert der Betrieb über eine ext. Spannung nicht zutreffend. Ich habe letzte Woche bei AZ-D 3 ESP32 D1 Mini bestellt und erhalten und muß diese über eine externe Spannungsversorgung betreiben. Leider funktioniert keines der ESP32 Module bei +8V am VCC Pin der Module. Eine Versorgung über die USB-Buchse ist nicht möglich.
Haben sie eine Lösung?
Viele Grüße Rainer Rebhan
Andreas Wolter
@Erwin: auf die GPIO-Pins sollte generell keine Spannung gelegt werden. Sie liefern 3,3V. Am 5V-Pin ist auf dem Entwicklungsboard ein Spannungsregler verbaut. Dort sollte man eine Spannung zwischen 6V und 12V anlegen. Der Spannungsregler erzeugt dann daraus 5V bzw. 3,3V.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Erwin
in der Anleitung von Ihnen steht, daß auf allen Pins nie mehr als 3,3 Volt angelegt werden dürfen. Wieso jetzt auf de 5v Pin bis zu 12 Volt?
Danke für Erklärung
Andreas Wolter
@Ineichen: der VIN auf dem Board ist ein geregelter Eingang und braucht daher mehr als 5V. Ich würde es mit 9V versuchen. Das ist auf vielen Boards gleich und eigentlich kein Problem. Man könnte auch über den USB-Eingang gehen, wenn man nur 5V zur Verfügung hat. Dann wäre ein Adapter notwendig.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Ineichen
Hallo zusammen
Hat den jemand das Problem gelöst mit den VIN. Das Bord läuft nicht mit angelegten geregelten 5VOLT. Über den usb Anschluß kein Problem.
Gruss bruno und danke für Hilfe.
Andreas Wolter
@Marc: ich bedauere, aber 3D-Vorlagen der Module bietet AZ derzeit nicht an.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Marc
Guten Tag, ich suche für den ESP32 Mini die CAD Files, damit ich ihn in Fusion360 importieren kann und so z.B. für das Design von Gehäusen die richtigen Maße habe. Andere Hersteller (z.B. adafruit) bieten diese auch auf Github an. Leider Ist ihr Repo leer.
Stelle sie die *.f3s, *.stl sowie *.step zur Verfügung?
Danke für eine Rückmeldung.
Andreas Wolter
@Thomas Wolter: ich vermute, dass die Spannung (oder der Strom) noch nicht ausreicht. Unbedingt darauf achten, dass der 5V-Pin und nicht der 3.3V-Pin verwendet wird. Siehe eines meiner älteren Kommentare.
Grüße,
Andreas Wolter
Thomas Wolter
Hallo Zusammen
Habe das selbe Problem, das über USB das Board läuft und über den VCC anschluß mit externem Netzteil (gibt 5,5V raus) nicht läuft.
Hat da einer eine Lösung für.
VG
Thomas
Andreas Wolter
@Marco Roll: versuchen Sie bitte meine Lösung aus dem Kommentar direkt darüber. Der Vin eines ESP32 ist regulated. Also müssen mehr als 5V anliegen. Im günstigsten Fall 6V-7V. Meistens werden 9V genutzt (z.B. 9V Block), maximal 12V.
Marco Roll
Ich habe das selbe Problem wie Fabio Tensi beschreibt.
Über USB lassen sich die Boards problemlos betreiben, mit 5V am VCC tut sich nichts.
Grüße
Marco
Andreas Wolter
@Fabio Tensi:
You can power the board in three different ways: via USB port, via Vin 5V pin (unregulated), via Vin 3.3V (regulated).
If you want to use the 5V Vin pin, you should apply a voltage between 5V and 12V. The higher the voltage, the warmer the voltage regulator becomes. Therefore, 9V is often used.
If the 3.3V Vin Pin is used, the 3.3V should not be exceeded. Also, avoid using multiple voltage sources at the same time.
Fabio Tensi
Hi I bought 3 x D1 mini esp-32, all 3 work correctly when I use the usb port, when I use the 5V power supply connected to the VCC PIN (+ 5V),it does not boot.
I have tried with the D1-mini and the D1-mini-pro which are currently working.
Can you help me ?
Thank you.
Fabio Tensi