He registrado la experiencia de obtener temperatura, humedad y presión atmosférica del BME280 y enviarlos directamente a Graphite a través de la conexión WiFi del ESP32.
No se incluyen explicaciones sobre Graphite o Grafana.
Elementos utilizados
| Nombre del producto | Lugar de compra |
|---|---|
| ESP-32S | AliExpress Amazon Rakuten |
| BME280 | AliExpress Amazon Rakuten |
Diagrama de conexión

El BME280 se conecta al ESP-32S a través de I2C.
En el ESP-32S, GPIO21 es SDA y GPIO22 es SCL.
| ESP-32S | BME280 |
|---|---|
| 3.3V | VIN |
| GND | GND |
| GPIO21 | SDA |
| GPIO22 | SCL |
Contenido
- Conexión a WiFi
- Consultar un servidor NTP para obtener la hora
- Crear una interrupción de tiempo para enviar datos cada segundo
Código
#include <Arduino.h>
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_BME280.h>
#include <Ticker.h>
#include <WiFiUdp.h>
#include <time.h>
// Wifi
const char SSID[] = "";
const char PASSWORD[] = "";
// Servidor NTP
const char NTP_SERVER[] = "ntp.nict.jp";
// Graphite
IPAddress graphite(192,168,0,10);
// Ticker
Ticker ticker;
bool flagTicker = false;
// Sensor BME280
Adafruit_BME280 bme;
void setTicker() {
flagTicker = true;
}
// UDP
WiFiUDP udp;
void setup() {
Serial.begin(115200);
while (!Serial);
if (!bme.begin(0x76)) {
Serial.println("¡Error en el sensor BME280!");
while (1);
}
// Conexión WiFi
WiFi.begin(SSID, PASSWORD);
Serial.print("Conectando a WiFi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
IPAddress ipaddr, gateway;
ipaddr = WiFi.localIP();
gateway = WiFi.gatewayIP();
Serial.println("WiFi Conectado.");
Serial.print("IPAddr:");
Serial.println(ipaddr);
Serial.print("Gateway:");
Serial.println(gateway);
// NTP
configTime(9 * 3600L, 0, NTP_SERVER);
// ms
struct timeval tv;
int ms = 0;
while(1) {
if (gettimeofday(&tv, NULL) != 0) {
Serial.println("error gettimeofday.");
}else{
ms = tv.tv_usec / 1000LL;
}
if(ms == 0) {
ticker.attach_ms(1000, setTicker);
Serial.println("ticker configurado");
break;
}
}
}
void send() {
time_t now;
time(&now);
udp.beginPacket(graphite, 2003);
udp.println("sec.esp32.temperature " + String(bme.readTemperature()) + " " + now);
udp.println("sec.esp32.humidity " + String(bme.readHumidity()) + " " + now);
udp.println("sec.esp32.pressure " + String(bme.readPressure() / 100) + " " + now);
udp.endPacket();
}
void loop() {
if(flagTicker) {
send();
flagTicker = false;
}
}
Bibliotecas utilizadas
Creando gráficos en Grafana

Se pudo obtener los datos del sensor BME280 con el ESP32, almacenarlos en Graphite (go-carbon) a través de WiFi y graficarlos con Grafana.
Con los datos siendo añadidos cada segundo, se ha logrado obtener datos bastante en tiempo real.
También se logró mantener el consumo de energía por debajo de 0.5W, lo que parece facilitar mucho la recolección de datos dentro de casa.