domingo, 5 de abril de 2026

CODE TAGO 6

 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