#include <WiFi.h>
#include <InfluxDbClient.h>
#include <InfluxDbCloud.h>
// ── Configuración WiFi ──────────────────────────────────
const char* WIFI_SSID = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
// ── Configuración InfluxDB Cloud ────────────────────────
// REEMPLAZAR con los valores del panel de InfluxDB Cloud
#define INFLUXDB_URL "https://us-east-1-1.aws.cloud2.influxdata.com"
#define INFLUXDB_TOKEN "36aeZzIMQLYuI1E9_6TljzZoVY2-2bDRqmIzOxI0OiFNxk3O6UMTTrPCwaVsgdegsUVbKr3FGB9ED_ghH75CCQ=="
#define INFLUXDB_ORG "b5afd91cd1ef6c9e"
#define INFLUXDB_BUCKET "lab2"
// Zona horaria (Colombia UTC-5)
#define TZ_INFO "COT5"
// ── Pines ────────────────────────────────────────────────
#define PIN_POTE 35 // Potenciómetro
// ── Cliente InfluxDB ─────────────────────────────────────
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG,
INFLUXDB_BUCKET, INFLUXDB_TOKEN,
InfluxDbCloud2CACert);
// Punto de dato (measurement)
Point sensor("potenciometro");
// ────────────────────────────────────────────────────────
void conectarWiFi() {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Conectando a WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi conectado. IP: " + WiFi.localIP().toString());
}
// ────────────────────────────────────────────────────────
void setup() {
Serial.begin(115200);
// Conectar WiFi
conectarWiFi();
// Sincronizar hora NTP (necesario para InfluxDB)
timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov");
// Agregar etiquetas al punto de dato
sensor.addTag("dispositivo", "ESP32-Wokwi");
sensor.addTag("ubicacion", "laboratorio");
// Verificar conexión con InfluxDB
if (client.validateConnection()) {
Serial.println("Conectado a InfluxDB: " + client.getServerUrl());
} else {
Serial.println("Error InfluxDB: " + client.getLastErrorMessage());
}
}
// ────────────────────────────────────────────────────────
void loop() {
// Leer sensores
int valorPote = analogRead(PIN_POTE);
// Convertir potenciómetro a voltaje (0–3.3V)
float voltaje = (valorPote / 4095.0) * 3.3;
// Enviar a InfluxDB
sensor.clearFields();
sensor.addField("voltaje", voltaje);
sensor.addField("pote_raw", valorPote);
if (!client.writePoint(sensor)) {
Serial.println("Error escritura InfluxDB: " + client.getLastErrorMessage());
} else {
Serial.println("Dato enviado a InfluxDB correctamente.");
}
delay(5000); // Enviar cada 5 segundos
}