ACTIVITY CLASS
"Read the following code, analyze it, and in your notebook, summarize the essential steps of this code."
#include <Arduino.h> // Librería base para que funcione el ESP32
#include <U8g2lib.h> // Librería para controlar la pantalla OLED
#include <Wire.h> // Librería para la comunicación I2C (protocolo de datos)
#include <WiFi.h> // Librería para conectar el ESP32 a Internet
#include <HTTPClient.h> // Librería para enviar datos a plataformas web (TagoIO)
#include <Adafruit_SHT31.h> // Librería específica para el sensor de temperatura SHT31
// 1. CONFIGURACIÓN DE RED Y PLATAFORMA
char ssid[] = "leo"; // Nombre de tu red WiFi
char pass[] = "leoloxano"; // Contraseña de tu red WiFi
String device_token = "9ff5091b-ef99-4089-b050-566ce438cb4a"; // "Llave" privada para entrar a TagoIO
// CONFIGURACIÓN DE DISPOSITIVOS
// Creamos el objeto 'u8g2' para la pantalla, definiendo que usa los pines 19 (SCL) y 18 (SDA)
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE, 19, 18);
// Creamos el objeto 'sht31' para representar al sensor físico
Adafruit_SHT31 sht31 = Adafruit_SHT31();
void setup() {
Serial.begin(115200); // Abre la comunicación con el computador para ver mensajes
// A. Iniciar Pantalla (Usando los pines 18 y 19)
Wire.begin(18, 19); // Abre el "camino" de datos hacia la pantalla
u8g2.begin(); // Enciende la pantalla
u8g2.clearBuffer(); // Borra cualquier dibujo previo
u8g2.setFont(u8g2_font_ncenB08_tr); // Elige un tipo de letra
u8g2.drawStr(0, 20, "SISTEMA IOT 6I"); // Escribe el título del proyecto
u8g2.drawStr(0, 45, "Iniciando..."); // Escribe un mensaje de carga
u8g2.sendBuffer(); // Envía lo dibujado a la pantalla física
Wire.end(); // Cierra el camino para no saturar el procesador
// B. Iniciar WiFi
WiFi.begin(ssid, pass); // Intenta conectarse a la red "leo"
// C. Iniciar Sensor (Usando los pines 21 y 22)
Wire.begin(21, 22); // Abre el "camino" de datos hacia el sensor
sht31.begin(0x44); // Identifica al sensor en su dirección de fábrica (0x44)
Wire.end(); // Cierra el camino de nuevo
}
void loop() {
// --- PASO 1: LEER SENSOR (EL "SENTIDO" DEL ROBOT) ---
Wire.begin(21, 22); // Abre comunicación con el sensor en los pines 21/22
delay(100); // Pequeña pausa para estabilizar la lectura
float t = sht31.readTemperature(); // Captura la temperatura y la guarda en 't'
float h = sht31.readHumidity(); // Captura la humedad y la guarda en 'h'
Wire.end(); // Cierra comunicación con el sensor
// --- PASO 2: ACTUALIZAR PANTALLA (VISUALIZACIÓN LOCAL) ---
Wire.begin(18, 19); // Abre comunicación con la pantalla en los pines 18/19
u8g2.clearBuffer(); // Limpia la pantalla para la nueva lectura
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.drawStr(0, 12, "ESTACION GRADO 6I");
// Si el sensor falla (isnan significa "no es un número"), avisa en pantalla
if (isnan(t)) {
u8g2.drawStr(0, 40, "RE-INTENTANDO...");
u8g2.drawStr(0, 55, "Leyendo bus 21/22");
} else {
// Si todo está bien, muestra los valores reales
u8g2.setCursor(0, 35); u8g2.print("TEMP: "); u8g2.print(t, 1); u8g2.print(" C");
u8g2.setCursor(0, 55); u8g2.print("HUM: "); u8g2.print(h, 0); u8g2.print(" %");
}
u8g2.sendBuffer(); // Muestra los datos finales en la pantalla OLED
Wire.end(); // Cierra comunicación con la pantalla
// --- PASO 3: ENVIAR A TAGOIO (SUBIR DATOS A LA NUBE) ---
// Si hay datos válidos y tenemos Internet, enviamos el reporte
if (!isnan(t) && WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("http://api.tago.io/data"); // Dirección de la plataforma TagoIO
http.addHeader("Content-Type", "application/json"); // Formato de datos
http.addHeader("Device-Token", device_token); // Presentamos nuestra llave
// Construimos el mensaje en formato JSON (lenguaje de servidores)
String json = "[{\"variable\":\"temperature\",\"value\":" + String(t) + "},";
json += "{\"variable\":\"humidity\",\"value\":" + String(h) + "}]";
http.POST(json); // Realiza el envío (POST) del mensaje
http.end(); // Finaliza la conexión con el servidor
}
delay(5000); // Espera 5 segundos antes de volver a medir (Muestreo)
}
No hay comentarios:
Publicar un comentario