ESP32 D1 Mini NodeMCU WiFi Module - AZ-Delivery

Hoy es el turno de una variante especial del ESP32, llamada ESP32-Mini. Esta placa se caracteriza por ser compatible con los pines con la D1-Mini. Eso significa que se pueden usar shields para el D1-Mini sin ningún problema.

 


Los pines con el borde blanco son los que son idénticos con el D1-Mini. Si los equipa con las tiras combinadas de pines y resorte que se incluyen, también puede usar el ESP32-Mini en el Escudo de doble base utilizar.

La placa tiene dos filas adicionales de pines para que se puedan usar tantos GPIO del ESP32 como sea posible. Aquí está el pinout completo.

 

En el proyecto de hoy queremos trabajar con el ESP32-Mini y uno Protector de pantalla OLED de 0,66 pulgadas Realice un escáner I2C pequeño y compacto.El cableado es muy simple porque la pantalla solo tiene que conectarse al ESP32-Mini. Equipamos la placa ESP32 con las cuatro regletas de enchufes de diez pines. Conectamos la pantalla en las dos regletas de enchufes internos, dejando libres los dos pines en la dirección del conector USB.

Para examinar el bus I2C, sería bueno que los pines requeridos estuvieran uno al lado del otro de tal manera que el módulo I2C simplemente se pueda enchufar. Esto se puede hacer fácilmente si el módulo I2C se suministra a través de pines GPIO. La única restricción con este método es que el módulo no debe requerir más de 30 mA, que ciertamente es el caso de todos los módulos de sensor.

Para ello, utilizaremos los pines GPIO27, GPIO25, GPIO32 y GPIO12 a la derecha, la regleta de enchufe exterior.

  • GPIO27 = Vcc 3.3V
  • GPIO25 = TIERRA 0V
  • GPIO32 = SCL
  • GPIO12 = SDA

Esta es la asignación de pines típica de la mayoría de los módulos con un bus I2C.

La imagen muestra el ESP32-Mini con pantalla adjunta y un módulo de sensor BMP180.

 


Sin embargo, esta estructura todavía tiene una pequeña desventaja. También hay módulos de sensores con la misma asignación de pines, pero con pines adicionales. Estos pines no deben conectarse a los pines vecinos del conector hembra ESP32. Además, el módulo de prueba ya no se puede enchufar simplemente cuando el escáner se va a montar en una carcasa. La solución es una extensión de cuatro polos para los pines de prueba.


Fabricamos esta extensión a partir de una de las dos tiras de pines y resorte combinadas incluidas. Los cortamos para que queden cuatro alfileres. Ponemos esta extensión en los pines de prueba. Ahora los pines adicionales de los módulos de sensor están simplemente fuera del enchufe. Cuando se instala en una carcasa, los pines de prueba sobresalen fácilmente accesibles de la carcasa.

El programa es muy sencillo. Se intenta establecer una conexión una tras otra con las 127 direcciones I2C para escanear. Si la conexión se realiza correctamente, la dirección correspondiente se muestra en la pantalla. La medición se realiza para diferentes velocidades de bus.

  • I2C estándar de 100 kHz
  • I2C rápido de 400 kHz
  • 1 MHz Fast Plus I2C
  • I2C de alta velocidad de 4 MHz

Para la compilación, necesitamos el paquete ESP32 y las bibliotecas Adafruit_GFX.h y Adafruit_SSD1306.h para la pantalla.

#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);
}

Y así es como se ve nuestro escáner I2C en una carcasa:

 


Diviértete construyéndolo.


Aquí están los enlaces a eso bosquejo y los archivos de impresión 3D Parte inferior / Parte superior.

Specials

15 comentarios

Eric McLean

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

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

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

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

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

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

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

Andreas Wolter

@Marc: ich bedauere, aber 3D-Vorlagen der Module bietet AZ derzeit nicht an.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Marc

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

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

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

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

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

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

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

Deja un comentario

Todos los comentarios son moderados antes de ser publicados