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
Publicar un comentario