ESP32 D1 Mini NodeMCU WiFi Module

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

4 comentarios

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

Publicaciones de blog recomendadas

  1. Wir bauen eine Smart Home Zentrale mit ArduiTouch
  2. Schrittmotor Steuerung für Antennen Rotor
  3. Arbeiten mit dem Cayenne Dashboard - einfacher Sensor (Teil 1)
  4. Mit dem ESP8266 8 Lampen steuern