domingo, 20 de octubre de 2024

No9 monitoreo de datos en internet con plataformas IOT y esp32 - ThingS...

codigo
// Importamos las librerías necesarias
#include <WiFi.h>           // Librería para la conexión WiFi en ESP32
#include "ThingSpeak.h"     // Librería para conectarnos a ThingSpeak

// Configuración de la conexión WiFi
const char* ssid = "el nombre de tu red wifi";         // Nombre de tu red WiFi
const char* password = "tu clave";   // Contraseña de tu red WiFi

// Configuración de ThingSpeak, copiar los datos de la página
unsigned long myChannelNumber = 123456;   // Reemplaza con tu número de canal en ThingSpeak
const char* myWriteAPIKey = "copia y pega tu clave write manten las comillas"; // Reemplaza con tu API Write Key de ThingSpeak

// Variables para manejar la conexión
WiFiClient client;          // Cliente para la conexión WiFi

// Pin analógico del ESP32 que queremos leer (puedes usar cualquier otro pin analógico disponible)
const int Pinadc = 34;   // En este ejemplo, usamos el pin GPIO 34 del ESP32

// Tiempo de espera entre envíos de datos (15 segundos como mínimo por restricciones de ThingSpeak)
unsigned long Tiempo_inicio = 0;  // Inicializamos el tiempo inicial
unsigned long Tiempo_final = 15000;     // 15000 ms = 15 segundos

void setup() {
  // Inicializamos la comunicación serial para depuración
  Serial.begin(115200); // Velocidad del puerto serial

  // Configuramos el pin como entrada analógica
  pinMode(Pinadc, INPUT);

  // Conectamos a la red WiFi
  WiFi.begin(ssid, password); // Inicia la conexión a la red WiFi
  Serial.print("Conectando a WiFi...");
  
  while (WiFi.status() != WL_CONNECTED) {
    // Esperamos hasta que se establezca la conexión
    delay(1000);
    Serial.print(".");
  }

  // Imprimimos la dirección IP obtenida
  Serial.println("Conectado a la red WiFi.");
  Serial.println("Dirección IP: ");
  Serial.println(WiFi.localIP());

  // Inicializamos ThingSpeak con el cliente WiFi
  ThingSpeak.begin(client); // Inicializamos la comunicación con ThingSpeak
  delay(2000);
}

void loop() {
  // Verificamos si ha pasado el tiempo suficiente desde el último envío
  if (millis() - Tiempo_inicio >= Tiempo_final) {
    // Leemos el valor analógico desde el pin configurado
    int bits = analogRead(Pinadc); // Leemos el valor desde el pin

    // Calculamos el voltaje correctamente
    float voltaje = (float(bits) / 4095.0) * 3.3;  // Corrección del cálculo del voltaje

    // Mostramos el valor leído en la consola serial
    Serial.print("Valor voltaje leído: ");
    Serial.println(voltaje);

    // Enviamos los datos a ThingSpeak
    ThingSpeak.setField(1, voltaje); // Configuramos el valor leído en el campo 1 del canal

    // Intentamos enviar los datos a ThingSpeak
    int estado_codigo = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey); 

    // Verificamos el código de estado
    if (estado_codigo == 200) {
      // Si los datos se envían correctamente, lo indicamos en la consola serial
      Serial.println("Datos enviados a ThingSpeak con éxito.");
    } else {
      // Si hubo un error, mostramos el código de error
      Serial.print("Error al enviar los datos. Código de error: ");
      Serial.println(estado_codigo);
    }

    // Actualizamos el tiempo de la última actualización correctamente
    Tiempo_inicio = millis();  // Actualizamos el tiempo inicial correctamente
  }
}