Registro de Datos con ESP32: Sensor BME280 y Tarjeta MicroSD


Introducción

En el mundo de los sistemas embebidos, la capacidad de almacenar información para su posterior análisis es vital. Ya sea que estés monitoreando el clima de un invernadero o el rendimiento de una máquina, una tarjeta microSD es la herramienta perfecta para proyectos de Datalogging.

En este artículo, vamos a configurar un ESP32 para leer datos ambientales de un sensor BME280 y guardarlos en un archivo de texto dentro de una tarjeta microSD. Lo mejor de todo es que cada lectura incluirá una marca de tiempo precisa (Epoch time) obtenida mediante un servidor NTP vía WiFi, lo que te permitirá organizar tus datos cronológicamente de forma profesional.

El uso de una tarjeta microSD es especialmente útil para proyectos de registro de datos. Como ejemplo, le mostraremos cómo guardar las lecturas del sensor de un sensor BME280 con marcas de tiempo ( tiempo de época ).

Descripción general del proyecto de tarjeta microSD BME280 de registro de datos ESP32

Requisitos previos

Para este ejemplo, asegúrese de tener instaladas las siguientes bibliotecas:

Puede instalar estas bibliotecas utilizando el administrador de bibliotecas de Arduino. En tu IDE de Arduino, ve a Sketch > Incluir biblioteca > Administrar bibliotecas… Luego, busca los nombres de las bibliotecas e instálalos.

Diagrama esquemático

Para este ejemplo, debe conectar el módulo de la tarjeta microSD y el sensor BME280 al ESP32. Aquí hay una lista de las piezas necesarias:

  • Placa de desarrollo ESP32 (lea: Las mejores placas de desarrollo ESP32 )
  • sonda BME280
  • Módulo de tarjeta MicroSD
  • Tarjeta micro SD
  • Cables de puente
  • Tablero de circuitos

Conecte el circuito siguiendo el siguiente diagrama esquemático.

Diagrama esquemático del circuito de la tarjeta microSD ESP32 BME280

También puedes echar un vistazo a las siguientes tablas:

BME280ESP32
VIN3V3
TIERRATIERRA
SCLGPIO22
ASDGPIO21
módulo de tarjeta microSDESP32
3V33,3 V
CSGPIO5
MOSIGPIO23
CLKGPIO18
MISOGPIO19
TIERRATIERRA

https://8d47f2cdfa0fea8c35311dc564e24b83.safeframe.googlesyndication.com/safeframe/1-0-38/html/container.html

Código

Copie el siguiente código en su IDE de Arduino. Este boceto obtiene lecturas del sensor BME280 (temperatura, humedad y presión) y las registra en un archivo en la tarjeta microSD cada 30 segundos. También registra la marca de tiempo (tiempo de época solicitado a un servidor NTP).


// Libraries for SD card
#include "FS.h"
#include "SD.h"
#include <SPI.h>

//Libraries for BME280 sensor
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

// Libraries to get time from NTP Server
#include <WiFi.h>
#include "time.h"

// Replace with your network credentials
const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Timer variables
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;

// BME280 I2C
Adafruit_BME280 bme;

// Variables to hold sensor readings
float temp;
float hum;
float pres;
String dataMessage;

// NTP server to request epoch time
const char* ntpServer = "pool.ntp.org";

// Variable to save current epoch time
unsigned long epochTime; 

// Function that gets current epoch time
unsigned long getTime() {
  time_t now;
  struct tm timeinfo;
  if (!getLocalTime(&timeinfo)) {
    //Serial.println("Failed to obtain time");
    return(0);
  }
  time(&now);
  return now;
}

// Initialize WiFi
void initWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.print("Connecting to WiFi ..");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay(1000);
  }
  Serial.println(WiFi.localIP());
}

// Init BME280
void initBME(){
  if (!bme.begin(0x76)) {
    Serial.println("Could not find a valid BME280 sensor, check wiring!");
    while (1);
  }
}

// Initialize SD card
void initSDCard(){
   if (!SD.begin()) {
    Serial.println("Card Mount Failed");
    return;
  }
  uint8_t cardType = SD.cardType();

  if(cardType == CARD_NONE){
    Serial.println("No SD card attached");
    return;
  }
  Serial.print("SD Card Type: ");
  if(cardType == CARD_MMC){
    Serial.println("MMC");
  } else if(cardType == CARD_SD){
    Serial.println("SDSC");
  } else if(cardType == CARD_SDHC){
    Serial.println("SDHC");
  } else {
    Serial.println("UNKNOWN");
  }
  uint64_t cardSize = SD.cardSize() / (1024 * 1024);
  Serial.printf("SD Card Size: %lluMB\n", cardSize);
}

// Write to the SD card
void writeFile(fs::FS &fs, const char * path, const char * message) {
  Serial.printf("Writing file: %s\n", path);

  File file = fs.open(path, FILE_WRITE);
  if(!file) {
    Serial.println("Failed to open file for writing");
    return;
  }
  if(file.print(message)) {
    Serial.println("File written");
  } else {
    Serial.println("Write failed");
  }
  file.close();
}

// Append data to the SD card
void appendFile(fs::FS &fs, const char * path, const char * message) {
  Serial.printf("Appending to file: %s\n", path);

  File file = fs.open(path, FILE_APPEND);
  if(!file) {
    Serial.println("Failed to open file for appending");
    return;
  }
  if(file.print(message)) {
    Serial.println("Message appended");
  } else {
    Serial.println("Append failed");
  }
  file.close();
}

void setup() {
  Serial.begin(115200);
  
  initWiFi();
  initBME();
  initSDCard();
  configTime(0, 0, ntpServer);
  
  // If the data.txt file doesn't exist
  // Create a file on the SD card and write the data labels
  File file = SD.open("/data.txt");
  if(!file) {
    Serial.println("File doesn't exist");
    Serial.println("Creating file...");
    writeFile(SD, "/data.txt", "Epoch Time, Temperature, Humidity, Pressure \r\n");
  }
  else {
    Serial.println("File already exists");  
  }
  file.close();
}

void loop() {
  if ((millis() - lastTime) > timerDelay) {
    //Get epoch time
    epochTime = getTime();
    
    //Get sensor readings
    temp = bme.readTemperature();
    //temp = 1.8*bme.readTemperature() + 32;
    hum = bme.readHumidity();
    pres = bme.readPressure()/100.0F;

    //Concatenate all info separated by commas
    dataMessage = String(epochTime) + "," + String(temp) + "," + String(hum) + "," + String(pres)+ "\r\n";
    Serial.print("Saving data: ");
    Serial.println(dataMessage);

    //Append the data to file
    appendFile(SD, "/data.txt", dataMessage.c_str());

    lastTime = millis();
  }
}

Inserte sus credenciales de red en las siguientes variables y el código funcionará de inmediato:

const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Este ejemplo utiliza las funciones que hemos visto anteriormente para escribir y agregar datos a la tarjeta microSD (escribirArchivo()yagregar archivo ()funciones).

Demostración

Sube el código a tu tablero. Puede comprobar en el monitor serie si todo funciona como se esperaba.

ESP32 BME280 Registro de datos en tarjeta microSD Monitor serie

Deje que el proyecto funcione durante un tiempo para recopilar algunas lecturas. Luego, inserte la tarjeta microSD en su computadora, y debería tener un archivo llamado datos.txt con las lecturas del sensor.

ESP32 BME280 Registro de datos a archivo en tarjeta microSD

Conclusión

Implementar un sistema de registro en SD te permite independizar tus proyectos de una conexión constante a la nube y asegurar que no se pierda ninguna lectura importante. Este método es la base para estaciones meteorológicas autónomas y sistemas de monitoreo industrial.

Si te ha gustado este tutorial, no te pierdas nuestro último post donde exploramos como optimizar un ordenador portátil para ejecutar aplicaciones avanzadas [Optimizar un portátil para uso con herramientas avanzadas].

Guía completa: Analiza tu PC y optimiza AutoCAD (Caso real HP Core i3)


Seamos realistas: no todo el mundo tiene un presupuesto de miles de euros para una estación de trabajo dedicada. A veces, nos toca trabajar con lo que hay. Si tienes un portátil modesto y necesitas que AutoCAD funcione con dignidad sin que el ventilador parezca una turbina de avión, has llegado al lugar indicado.

Hoy vamos a hacer un ejercicio de «forense informático». Primero te enseñaré a destripar la arquitectura de tu PC para ver dónde flaquea, y luego pasaremos a la acción optimizando tanto Windows como AutoCAD. ¡Vamos a ello!

📌 Parte 1: El diagnóstico. ¿Qué lleva tu ordenador por dentro?

Antes de tocar ningún tornillo o cambiar ajustes, hay que conocer las fortalezas y debilidades de tu equipo. Olvídate de instalar programas raros; Windows 11 ya trae todo lo que necesitas para auditar tu hardware.

1.1 El chequeo rápido

Si solo quieres un vistazo general, la combinación de teclas Win + I te llevará directo a Sistema y luego a Acerca de. Ahí verás de un plumazo el procesador que tienes y la RAM instalada. Si quieres ver cómo respira tu ordenador en tiempo real, pulsa Ctrl + Mayús + Esc para abrir el Administrador de tareas y vete a la pestaña de Rendimiento. Verás si tu CPU está pidiendo auxilio o si la memoria está al límite.

1.2 Profundizando en las tripas de la máquina

Para los que queremos el número de serie de la pieza y el modelo exacto, el comando rey es msinfo32. Pulsa Win + R, escríbelo y dale a Enter. Se abrirá una ventana que parece sacada de los años 90, pero que te dirá desde el modelo exacto de tu placa base hasta la versión de la BIOS.

1.3 La gran duda: ¿Tienes un disco mecánico o un SSD?

Esto marca la diferencia entre un ordenador que vuela y uno que desespera. Para averiguarlo sin abrir el portátil, puedes ir de nuevo al Administrador de tareas (Ctrl + Mayús + Esc) y en la pestaña Rendimiento, haz clic en Disco 0. Arriba a la derecha te pondrá claramente «SSD» o «HDD».

💡 Un truco para perfeccionistas: Si quieres saber el modelo exacto de tu disco, abre PowerShell (puedes buscarlo en el menú de Windows) y escribe: Get-PhysicalDisk | Format-Table -AutoSize. En mi HP, por ejemplo, apareció un SK hynix BC511, lo que me confirmó que tenía un SSD NVMe rapidísimo. ¡Punto positivo para el equipo!

1.4 Gráficos y RAM: El talón de Aquiles

Para AutoCAD, la tarjeta gráfica es vital. Si vuelves al Administrador de tareas y buscas la sección GPU 0, verás qué gráfica tienes. En equipos modestos lo normal es ver algo como «Intel UHD Graphics» con apenas 128 MB de memoria dedicada. No es para tirar cohetes, pero con lo que te enseñaré más adelante podremos trabajar.

Por último, si estás pensando en ampliar la memoria RAM, necesitas saber si tienes ranuras libres. Abre la consola de comandos (Cmd) y escribe esta línea mágica:

wmic memorychip get Capacity, Speed, MemoryType, DeviceLocator

En mi caso, descubrí que el portátil venía con un solo módulo de 8 GB DDR4 y, afortunadamente, ¡un zócalo completamente libre para el futuro!

⚙️ Parte 2: El tratamiento. ¡Acelerando AutoCAD!

Ahora que ya conocemos al paciente, vamos a operarlo. No hace falta que compres nada todavía; muchos de los atascos de AutoCAD se solucionan cambiando cómo procesa la información el programa.

2.1 Los comandos «mágicos» que aligeran el programa

AutoCAD viene por defecto con muchos efectos visuales bonitos, pero que consumen recursos de forma innecesaria. Escribe estos comandos directamente en la barra de AutoCAD y cambia sus valores para notar una mejora instantánea:

  • Fuera efectos visuales: Pon SELECTIONEFFECT y PRESELECTIONEFFECT en 0. Esto quitará ese resplandor azul brillante cada vez que seleccionas o pasas el ratón por encima de un objeto.
  • Adiós a las transiciones suaves: Pon VTENABLE en 0 para desactivar las animaciones cuando cambias de vista. El cambio será más brusco, pero mucho más rápido.
  • Optimiza el sombreado: Cambia HPQUICKPREVIEW a 0 para que el programa no intente calcular una vista previa de los sombreados pesados antes de que hagas clic.
  • Vuelve a lo clásico y estable: Escribe GFXDX12 y ponlo en 0. Esto obligará a AutoCAD a usar DirectX 11 en lugar de DirectX 12, algo que suele dar mucha más estabilidad en tarjetas gráficas integradas de Intel.

2.2 Configuración visual obligatoria

Escribe GRAPHICSCONFIG en la barra de comandos. Si notas que el programa se te congela o hace cosas raras, desactiva la Aceleración por hardware y la Geometría de alta calidad.

Además, un consejo de oro para el día a día: trabaja siempre con el estilo visual «2D Wireframe» (estructura alámbrica 2D). Los modos «Conceptual», «Realista» o «Sombreado» están prohibidos si tu gráfica es integrada y no quieres que el ordenador se arrastre.

2.3 El mantenimiento de tus planos

Si estás trabajando con solo 8 GB de RAM, un archivo mal optimizado puede colapsar tu sistema. Acostúmbrate a usar estos comandos de limpieza con frecuencia:

  • Usa AUDIT para buscar y reparar errores internos en el dibujo.
  • Lanza el comando -PURGE (con el guion delante) para eliminar de golpe capas, bloques y estilos que ya no estés usando y que solo hacen bulto.
  • Pasa el comando OVERKILL para borrar líneas duplicadas o que estén superpuestas. Tu plano pesará menos y AutoCAD te lo agradecerá.

🧩 Parte 3: El veredicto de mi caso real y la solución definitiva

Tras analizar mi HP 14s, el diagnóstico estaba claro. El disco SSD NVMe era excelente, pero el procesador Core i3, la gráfica integrada y, sobre todo, los escasos 8 GB de RAM eran un auténtico cuello de botella para mover planos alegremente.

¿La solución? Una pequeña inversión en hardware.

El secreto del «Dual Channel»

La mejor mejora que puedes hacerle a un portátil como este, y que rara vez pasa de los 69 euros, es ampliar la RAM a 16 GB. Pero ojo, no vale comprar cualquier memoria.

En mi caso, como el portátil tenía un módulo de 8 GB y una ranura libre ( como se ve en la imagen superior) , compré otro módulo exactamente igual: 8 GB DDR4 a 2666 MHz en formato SO-DIMM (el tamaño pequeño para portátiles). Al poner dos módulos idénticos, el sistema activa el modo Dual Channel, lo que duplica el ancho de banda de la memoria y le da un empujón brutal de rendimiento tanto al procesador como a la tarjeta gráfica integrada.

⚠️ ¡Mucho cuidado al comprar! No compres memoria DDR3 (no encajará físicamente), ni quites tu módulo para poner uno solo de 16 GB (perderías el beneficio del Dual Channel).

La instalación es ridículamente sencilla: apagas el equipo, quitas la tapa trasera, introduces la memoria en un ángulo de unos 30 grados hasta que encaje y empujas hacia abajo hasta oír el «clic» de las pestañas metálicas. Al encenderlo, si vas al Administrador de tareas, deberías ver flamantes 16 GB listos para la acción.

🧠 Reflexión final

Vamos a ser honestos: tu portátil con Core i3 nunca se convertirá en una bestia para renderizar proyectos en 3D hiperrealistas. Sin embargo, aplicando estos pequeños trucos de software y gastando apenas lo que cuesta una cena en un módulo de RAM, puedes conseguir un equipo perfectamente usable, fluido y estable para planos en 2D.

Si alguien te dice que para usar AutoCAD necesitas obligatoriamente gastarte 1.500 euros en un portátil «Gaming», enséñale este post. A veces, solo es cuestión de saber qué botones tocar.

¿Qué te ha parecido este análisis? Si te animas a probar los comandos en tu AutoCAD o estás pensando en ampliar la RAM de tu equipo y tienes dudas sobre qué modelo elegir, ¡déjamelo en los comentarios y lo vemos juntos!