TIMBRE COLEGIO IOT CON PLACA D1 MINI Y TRIAC

 



           CIRCUITO



CODIGO ARDUINO

/*
//Downlaod the library: http://www.electronoobs.com/eng_arduino_liq_crystal.php
*/

#include "SinricPro.h"
#include "SinricProSwitch.h"
#include <RTClib.h> // for the RTC
#include <LiquidCrystal_I2C.h>  
LiquidCrystal_I2C lcd(0x27,16,2);  

#ifdef ENABLE_DEBUG
  #define DEBUG_ESP_PORT Serial
  #define NODEBUG_WEBSOCKETS
  #define NDEBUG
#endif

#include <Arduino.h>
#if defined(ESP8266)
  #include <ESP8266WiFi.h>
#elif defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
  #include <WiFi.h>
#endif

#define WIFI_SSID         "Jroyero"    
#define WIFI_PASS         "76110902502"
#define APP_KEY           "d5dc9adc-91d7-4e49-a3b0-9f5a17e19e45"      
#define APP_SECRET        "cf5f0225-2825-48f5-a442-6bb90a99929a-e8571a4f-360d-4ba9-8f4b-478533c8803c"  
#define SWITCH_ID         "63ca9f6f07e1833ecb45f1fb"  
#define BAUD_RATE         115200                // Change baudrate to your need



#define Boton2 12 // D6
#define BUTTON_PIN 13   // D7
#define LED_PIN   14  
#define Triac 15 //D8

bool myPowerState = false;


RTC_DS3231 rtc;     // crea objeto del tipo RTC_DS3231


 const int hora1[] = {
   7, 8, 8, 9, 10, 10, 11, 12, 13};

 const int minuto1[] = {
   10, 0, 50, 40, 30, 50, 40, 30, 10};

 const int hora2[] = {
   7, 7, 8, 9, 10, 10, 11, 12, 13};

 const int minuto2[] = {
   10, 50, 50, 40, 30, 50, 40, 30, 10};

 int segundosTimbre = 5;
 int estado_boton1 = LOW;
 int estado_boton2 = LOW;
 
 bool onPowerState(const String &deviceId, bool &state) {
  Serial.printf("Device %s turned %s (via SinricPro) \r\n", deviceId.c_str(), state?"on":"off");
  myPowerState = state;
  digitalWrite(LED_PIN, !myPowerState?LOW:HIGH);
  digitalWrite(Triac, !myPowerState?LOW:HIGH);
  return true; // request handled properly
}

void handleButtonPress() {
 
  if (digitalRead(BUTTON_PIN) == HIGH){
     digitalWrite(LED_PIN, HIGH);
     digitalWrite(Triac, HIGH);
     Serial.println("boton en alto");
     }
 
  if(myPowerState == false && digitalRead(BUTTON_PIN) == LOW){
      digitalWrite(LED_PIN, LOW);
      digitalWrite(Triac, LOW);
      Serial.println("boton en bajo - powerstate en bajo");
      }
 
  if (digitalRead(BUTTON_PIN) == LOW && myPowerState == true){
    digitalWrite(LED_PIN, HIGH);
    digitalWrite(Triac, HIGH);
    Serial.println("boton en bajo - powerstate en alto");
    }
 
  }

void setupWiFi() {
  Serial.printf("\r\n[Wifi]: Connecting");

  #if defined(ESP8266)
    WiFi.setSleepMode(WIFI_NONE_SLEEP);
    WiFi.setAutoReconnect(true);
  #elif defined(ESP32)
    WiFi.setSleep(false);
    WiFi.setAutoReconnect(true);
  #endif

  WiFi.begin(WIFI_SSID, WIFI_PASS);
/* //Descomenta las 3 lines para que espere a conectar con sinric pro.
  while (WiFi.status() != WL_CONNECTED) {
    Serial.printf(".");
    delay(250);
  }*/
  Serial.printf("connected!\r\n[WiFi]: IP-Address is %s\r\n", WiFi.localIP().toString().c_str());
}


void setupSinricPro() {
  // add device to SinricPro
  SinricProSwitch& mySwitch = SinricPro[SWITCH_ID];

  // set callback function to device
  mySwitch.onPowerState(onPowerState);

  // setup SinricPro
  SinricPro.onConnected([](){ Serial.printf("Connected to SinricPro\r\n"); });
  SinricPro.onDisconnected([](){ Serial.printf("Disconnected from SinricPro\r\n"); });
  SinricPro.begin(APP_KEY, APP_SECRET);
}


void setup() {
 
  pinMode(BUTTON_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
  pinMode(Triac, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  digitalWrite(Triac, LOW);
  Serial.begin(BAUD_RATE); Serial.printf("\r\n\r\n");
  setupWiFi();
  setupSinricPro();
 
  lcd.init();
  lcd.backlight();
  pinMode(Boton2, INPUT);
  digitalWrite (LED_PIN, LOW);
  digitalWrite (Triac, LOW);

  if(!rtc.begin()) {
    Serial.println(F("NO ENCUENTRO MODULO RTC"));
     while(1);
  }
}

void loop() {
 
  handleButtonPress();
  SinricPro.handle();
 
 
          DateTime fecha = rtc.now();
          lcd.setCursor(4,0);
          lcd.print(fecha.day());
          lcd.print("/");    
          lcd.print(fecha.month());
          lcd.print("/");
          lcd.print(fecha.year());  
          lcd.setCursor(4,1);
          lcd.print(fecha.hour());
          lcd.print(":");  
          lcd.print(fecha.minute());  
          lcd.print(":");
          lcd.print(fecha.second());
         
          if (fecha.minute() == 0 && fecha.second() == 0){  
          lcd.clear();}
         
  if(estado_boton2 == LOW){
   for(int i = 0; i<9; i++){
    if (fecha.hour() == (hora1[i]) && fecha.minute() == (minuto1[i]) && fecha.second() <= segundosTimbre - 1){
      Timbre();
     }}
    }


    if(estado_boton2 == HIGH){
     for(int i = 0; i<9; i++){
       if (fecha.hour() == (hora2[i]) && fecha.minute() == (minuto2[i]) && fecha.second() <= segundosTimbre - 1){
      Timbre();
       }}
    }
 
  } //AQUI FINALIZA EL LOOP



  void Timbre(){
    lcd.clear();
    lcd.print("TIMBRE ON");
    digitalWrite (Triac, HIGH);
    digitalWrite(LED_PIN, HIGH);
    delay(segundosTimbre*1000);
    digitalWrite (Triac, LOW);
    digitalWrite(LED_PIN, LOW);
    lcd.clear();
      }

Comentarios

Entradas populares de este blog

CLASIFICADOR DE COLORES CON SENSOR TCS3472 (I2C) CON ARDUINO NANO

PROTOTIPO - CONTROL DE ACCESO CON RFID + TECLADO CON ALMACENAMIENTO EN MICRO SD

CONTROL DE ACCESO CON RFID YMODULO RTC DS3231