#include <WiFi.h>
#include <InfluxDbClient.h>
#include <InfluxDbCloud.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.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 "vE1nH_uBcboKrrMXhuuft8SXJ5ECDziSotyaN8ns7K_Yc8eC1RS-j3FGNnyFMuUUXzNrSTX5_ljLqYX81cN6aA=="
#define INFLUXDB_ORG "b640856a4edb6d4d"
#define INFLUXDB_BUCKET "Lab1"
// Zona horaria (Colombia UTC-5)
#define TZ_INFO "COT5"
// ── Pines ────────────────────────────────────────────────
#define PIN_POTE 35 // Potenciómetro
#define PIN_LDR 34 //LDR fotoresistor
LiquidCrystal_I2C lcd(0x27, 16, 2);
// ── 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);
lcd.init();
lcd.backlight();
// 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");
sensor.addTag("estudiante", "Diego Estevez");
// 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);
int valorLdr = analogRead(PIN_LDR);
// Convertir potenciómetro a voltaje (0–3.3V)
float voltaje = (valorPote / 4095.0) * 3.3;
//convertir ldr a porcentaje % (0-100)
int porcentaje = 100-(valorLdr/4095.0)*100;
//int valorMin = 0; // medir en luz fuerte real
//int valorMax = 4095; // medir en oscuridad real
//int porcentaje = ((valorMax - valorLdr) * 100) / (valorMax - valorMin);
lcd.setCursor(0, 0);
lcd.print("Luz: ");
lcd.print(porcentaje);
lcd.print("% ");
lcd.setCursor(0, 1);
lcd.print("Vol: ");
lcd.print(voltaje);
lcd.print("V ");
// Enviar a InfluxDB
sensor.clearFields();
sensor.addField("voltaje", voltaje);
sensor.addField("pote_raw", valorPote);
sensor.addField("porcentaje", porcentaje);
sensor.addField("ldr_raw", valorLdr);
if (!client.writePoint(sensor)) {
Serial.println("Error escritura InfluxDB: " + client.getLastErrorMessage());
} else {
Serial.println("Dato enviado a InfluxDB correctamente.");
}
delay(2000); // Enviar cada 5 segundos
}