Crear un alarma interna en mi ESP32

Buenas días, busco ayuda con la parte de mi código lo que busco es que en mi documento sheet (ese Excel pero de Google drive), lea valores hh:mm de una columna, para ser mas exacto la columna B, y que un led parpadee respecto a la cantidad numérica colocada en la columna C.
Mi inconveniente y ayuda que necesito es que cuando yo coloque una hora en una celda B(i), parpadee el led la cantidad de veces en C(i), ejemplo seria:
B3= 14:23 , C3=5---> Cuando llegue la hora de 14:23 el led parpadea 5 veces.
***NOTA: mi codigo es capaz de leer los valores colocados en las celdas, pero la rutina de parpadeo de led en la hora especifica que deseo o que coloco en mi sheet y la cantidad de veces que parpadea no la hace., ademas deseo mantener su rutina de impresion y deteccion, osea lo que ya tiene dentro el void readAutomaticSheet(), lo siga manteniendo ***
NOTA 2: trate de usar la pagina Current time in America/Lima, via World Time API: Simple JSON/plain-text API to obtain the current time in, and related data about, a timezone. , con otro codigo muy diferente y me funciono correctamente, pero cuando intento implementarlo en el código de mi proyecto no funciona, les adjunto mi código del proyecto donde necesito ayuda.
NOTA 3: Los datos de wifi, contraeña , ID y apikey lo borre por seguridad.
NOTA 4: Todo lo deseo para el void readAutomaticSheet(), ya que esa parte hace que lea e imprima lo que hay en mi documento sheet.
NOTA 5: ignoren la parte o biblioteca que dicen servo o que no tiene que ver con el void readAutomaticSheet(), , ya que mas abajo hay otro void, pero es para otra cosa diferente que no tiene nada que ver si afecta a void que quiero modificar

#include <WiFi.h>
#include <HTTPClient.h>
#include <Arduino_JSON.h>
#include <TimeLib.h>
#include <ESP32Servo.h>

const char* ssid = " ";
const char* password = " ";

const char* sheetID = " ";
const char* apiKey = "  ";

const int LED_PIN = 2; // Define el pin del LED azul del ESP32
const int SERVO_PIN = 5; // Pin utilizado para controlar el servo motor

Servo myservo;  // Creamos un objeto de tipo Servo

void setup() {
  Serial.begin(115200);
  delay(1000);  // Espera para que la conexión serial se estabilice
  connectToWiFi();
  configTime(0, 0, "pool.ntp.org");  // Configura la hora desde un servidor NTP
  pinMode(LED_PIN, OUTPUT);

}

unsigned long lastCheckTime = 0;
const unsigned long checkInterval = 1000; // Verificar cada 1 segundo

void loop() {
  unsigned long currentTime = millis();

  // Verificar si ha pasado suficiente tiempo desde la última verificación
  if (currentTime - lastCheckTime >= checkInterval) {
    // Realizar la verificación de las hojas de Google Sheets
    readAutomaticSheet();
    readManualSheet();

    // Actualizar el tiempo de la última verificación
    lastCheckTime = currentTime;
  }
}

void connectToWiFi() {
  Serial.println("Conectando a WiFi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Conectando...");
  }
  Serial.println("Conectado a la red WiFi");
}

unsigned long lastAutomaticCheckTime = 0; // Declaración única de lastAutomaticCheckTime
String lastAutomaticValue = ""; // Declaración única de lastAutomaticValue
unsigned long lastManualCheckTime = 0; // Declaración de lastManualCheckTime
String lastManualValue = ""; // Variable para almacenar el último valor de MANUAL


void readAutomaticSheet() {
  unsigned long currentTime = millis();
  if (currentTime - lastAutomaticCheckTime >= 1000) { // Leer cada segundo
    lastAutomaticCheckTime = currentTime;

    // Construir la URL para obtener los datos de la hoja AUTOMATICO
    String url = "https://sheets.googleapis.com/v4/spreadsheets/" + String(sheetID) + "/values/AUTOMATICO!B2:C13?key=" + String(apiKey);

    HTTPClient http;
    http.begin(url);
    int httpCode = http.GET();

    if (httpCode == HTTP_CODE_OK) {
      String payload = http.getString();
      JSONVar response = JSON.parse(payload);

      String currentAutomaticValue = ""; // Variable para almacenar el valor actual de AUTOMATICO

      // Recorrer los valores de la respuesta JSON
      for (int i = 0; i < 12; i++) {
        String hora = response["values"][i][0];
        String valor = response["values"][i][1];

        // Construir el valor actual de AUTOMATICO
        if (hora != "" && valor != "") {
          currentAutomaticValue += "COMIDA (" + String(i + 1) + ") Hora: " + hora + ", Valor: " + valor + "\n";
        }
      }

      // Verificar si el valor actual es diferente al último valor almacenado
      if (currentAutomaticValue != lastAutomaticValue) {
        // Imprimir en el monitor serie si hay un cambio
        Serial.println("Cambios en AUTOMATICO:");
        Serial.println(currentAutomaticValue);
        lastAutomaticValue = currentAutomaticValue; // Actualizar el último valor almacenado
      }
    }
    else {
      Serial.println("Error al obtener datos de AUTOMATICO");
    }

    http.end();
  }
}

Les agradezco un montón que me den ideas de como hachearlo ya que trate de ayudarme con CHAT gpt, pero no ayuda mucho y de programacion se poco.

Su publicacion se MUEVE a su ubicacion actual ya que es mas adecuada.

Esta rutina modificada verifica si la hora actual coincide con alguna de las horas especificadas en la columna B de tu hoja de cálculo.
Si coincide, el LED parpadeará las veces indicadas por la columna C.

void readAutomaticSheet() {
  unsigned long currentTime = millis();
  if (currentTime - lastAutomaticCheckTime >= 1000) { // Leer cada segundo
    lastAutomaticCheckTime = currentTime;

    // Obtener la hora actual del sistema
    time_t now = time(nullptr);
    struct tm *localTime = localtime(&now);

    // Construir la URL para obtener los datos de la hoja AUTOMATICO
    String url = "https://sheets.googleapis.com/v4/spreadsheets/" + String(sheetID) + "/values/AUTOMATICO!B2:C13?key=" + String(apiKey);

    HTTPClient http;
    http.begin(url);
    int httpCode = http.GET();

    if (httpCode == HTTP_CODE_OK) {
      String payload = http.getString();
      JSONVar response = JSON.parse(payload);

      // Recorrer los valores de la respuesta JSON
      for (int i = 0; i < 12; i++) {
        String hora = response["values"][i][0];
        String valor = response["values"][i][1];

        // Verificar si la hora actual coincide con la hora especificada en la columna B
        if (hora != "" && valor != "") {
         int hour = hora.substring(0, 2).toInt();
         int minute = hora.substring(3).toInt();
          if (localTime->tm_hour == hour && localTime->tm_min == minute) {
            // Parpadear el LED la cantidad de veces especificada en la columna C
            int parpadeos = valor.toInt();
            for (int j = 0; j < parpadeos; j++) {
              digitalWrite(LED_PIN, HIGH);
              delay(500);
              digitalWrite(LED_PIN, LOW);
              delay(500);
            }
          }
        }
      }
    }
    else {
      Serial.println("Error al obtener datos de AUTOMATICO");
    }

    http.end();
  }
}

1 Like

Lo acabo de colocar en mi codigo, y no funciono.... pero gracias igual, la verdad es que sigo intentanto trantao de realizar esa pequeña rutina pero no me sale.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.