Proyecto Final

Documentación del proyecto final

Regresar a Portafolio

Descripción

El proyecto trató del desarrollo de un sistema de monitoreo para domótica, en donde se muestran datos de diferentes sensores conectados a internet mediante el NodeMCU ESP32; los cuales se reflejan en un dashboard alojado en Render.

A continuación se muestra la presentación del proyecto y su documentación.

...
Render Logo Ir al Dashboard en Render Github del proyecto Flutterflow Logo Ir a WebApp

Timer

Código Timer

//José Pablo Hernández Alonso
#include <WiFi.h>
#include <HTTPClient.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define BUZZER_PIN 23

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

const int buttonIncreasePin = 27;
const int buttonDecreasePin = 26;
const int buttonModePin = 25;
const int buttonStartStopPin = 33;

volatile bool increaseFlag = false;
volatile bool decreaseFlag = false;
volatile bool modeFlag = false;
volatile bool startStopFlag = false;

volatile bool timerRunning = false;
volatile int seconds = 0;
volatile int minutes = 0;
volatile int hours = 0;
volatile int mode = 0; // 0 = seconds, 1 = minutes, 2 = hours
volatile bool buzzerActive = false;
unsigned long buzzerEndTime = 0;

const char* ssid = "EXAMPLE";  // SSID
const char* password = "EXAMPLE";  // Contraseña
const char* serverUrl = "https://proyecto-redes.onrender.com/dashboard/?apikey=123";

void setup() {
    Serial.begin(115200);
    pinMode(buttonIncreasePin, INPUT_PULLUP);
    pinMode(buttonDecreasePin, INPUT_PULLUP);
    pinMode(buttonModePin, INPUT_PULLUP);
    pinMode(buttonStartStopPin, INPUT_PULLUP);
    pinMode(BUZZER_PIN, OUTPUT);

    if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
    }
    display.display();
    delay(2000);
    display.clearDisplay();

    attachInterrupt(digitalPinToInterrupt(buttonIncreasePin), []() { increaseFlag = true; }, FALLING);
    attachInterrupt(digitalPinToInterrupt(buttonDecreasePin), []() { decreaseFlag = true; }, FALLING);
    attachInterrupt(digitalPinToInterrupt(buttonModePin), []() { modeFlag = true; }, FALLING);
    attachInterrupt(digitalPinToInterrupt(buttonStartStopPin), []() { startStopFlag = true; }, FALLING);

    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    printWifi(false);
    }
    Serial.println("WiFi connected");
    printWifi(true);
}

void loop() {
    if (increaseFlag) {
    buzzerActive = false;
    handleIncrease();
    increaseFlag = false;
    }
    if (decreaseFlag) {
    buzzerActive = false;
    handleDecrease();
    decreaseFlag = false;
    }
    if (modeFlag) {
    handleMode();
    modeFlag = false;
    }
    if (startStopFlag) {
    handleStartStop();
    startStopFlag = false;
    sendDataToServer(); // Send data whenever the start/stop button is pressed
    }

    if (timerRunning) {
    delay(1000); // Wait for one second
    decrementTime();
    }
    if (buzzerActive && millis() < buzzerEndTime) {
    beepBuzzer(1000, 500); // 1000 Hz, beep for 500 ms
    } else if (millis() >= buzzerEndTime && buzzerActive) {
    buzzerActive = false; // Stop the buzzer after 30 seconds
    }
}

void handleIncrease() {
    if (mode == 0) { // Seconds
    if (seconds < 59) seconds++;
    else { seconds = 0; minutes++; }
    } else if (mode == 1) { // Minutes
    if (minutes < 59) minutes++;
    else { minutes = 0; hours++; }
    } else { // Hours
    hours++;
    }
    printTime();
}

void handleDecrease() {
    if (mode == 0) { // Seconds
    if (seconds > 0) seconds--;
    else { seconds = 59; if (minutes > 0) minutes--; }
    } else if (mode == 1) { // Minutes
    if (minutes > 0) minutes--;
    else { minutes = 59; if (hours > 0) hours--; }
    } else { // Hours
    if (hours > 0) hours--;
    }
    printTime();
}

void handleMode() {
    mode = (mode + 1) % 3;
    display.println("Mode changed to: " + String(mode == 0 ? "Seconds" : (mode == 1 ? "Minutes" : "Hours")));
    delay(1000);
    printTime();
}

void handleStartStop() {
    timerRunning = !timerRunning;
    display.println("Timer " + String(timerRunning ? "started" : "stopped"));
    delay(1000);
    printTime();
}

void decrementTime() {
    if (seconds > 0) {
    seconds--;
    } else if (minutes > 0) {
    minutes--;
    seconds = 59;
    } else if (hours > 0) {
    hours--;
    minutes = 59;
    seconds = 59;
    } else {
    timerRunning = false;
    buzzerActive = true; // Activate buzzer when countdown reaches 0
    buzzerEndTime = millis() + 10000; // Set the buzzer to sound for 30 seconds
    sendDataToServer();
    }
    printTime();
}

void printTime() {
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(0,0);
    display.printf("%02d:%02d:%02d\n", hours, minutes, seconds);
    display.setCursor(0,20);
    display.setTextSize(1);
    if (timerRunning) {
    display.println("Status: Running");
    } else {
    display.println("Status: Stopped");
    }
    display.display();
}

void printWifi(bool stad) {
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(0,0);
    if (stad) {
    display.println("Wifi: ON");
    } else {
    display.println("Wifi: NOT FOUND");
    }
    
    display.display();
}

void beepBuzzer(int frequency, int duration) {
    tone(BUZZER_PIN, frequency, duration);
    delay(duration);
    noTone(BUZZER_PIN);
    delay(duration);
}

void sendDataToServer() {
    if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;

    String timeString = formatTime(hours) + ":" + formatTime(minutes) + ":" + formatTime(seconds);
    String url = String(serverUrl) 
                    + "&status=" + String(timerRunning ? 0 : (buzzerActive ? 2 : 1))
                    + "&time=" + timeString;
    http.begin(url);
    Serial.println("URL: " + url);
    int httpResponseCode = http.GET();
    http.end();
    }
}

String formatTime(int timeValue) {
    if (timeValue < 10) {
    return "0" + String(timeValue); // Añade un cero si el número es menor de 10
    } else {
    return String(timeValue); // Usa el número tal cual si no es menor de 10
    }
}

Proximidad

Código Proximidad

//Dirk Anton Topcic Martinez
#include <NewPing.h>
#include <WiFi.h>
#include <HTTPClient.h>

#define PIN_TRIG 26
#define PIN_ECHO 27

int ledV  = 32;
int ledA = 33;
int ledR = 25;

//PHP server
String url = "https://proyecto-redes.onrender.com/dashboard/?apikey=123&";
String sensor= "dist";


void setup(){
    pinMode(ledV, OUTPUT);
    pinMode(ledA, OUTPUT);
    pinMode(ledR, OUTPUT);

    pinMode(PIN_TRIG, OUTPUT);
    pinMode(PIN_ECHO, INPUT);

    delay(1000);
    Serial.begin(115200);

    WiFi.begin("Jp Phone", "yayoyayo");

    while((WiFi.status() != WL_CONNECTED)) {
        delay(500);
        Serial.print(".");
    }
        Serial.println("Wifi conected");
}

void loop(){
    delay(1000);
    digitalWrite(PIN_TRIG, HIGH);
    delayMicroseconds(10);
    digitalWrite(PIN_TRIG, LOW);

    long duration = pulseIn(PIN_ECHO, HIGH);
    int distance = duration / 58;
    Serial.print("Distance in: ");
    Serial.println(distance);
    
    if (distance > 7) {
    digitalWrite(ledV, HIGH);
    digitalWrite(ledA, LOW);
    digitalWrite(ledR, LOW);
    } else if (distance <= 7 && distance > 2) {
    digitalWrite(ledV, LOW);
    digitalWrite(ledA, HIGH);
    digitalWrite(ledR, LOW);
    } else if (distance <= 2) {
    digitalWrite(ledV, LOW);
    digitalWrite(ledA, LOW);
    digitalWrite(ledR, HIGH);
    } else {
    digitalWrite(ledV, LOW);
    digitalWrite(ledA, LOW);
    digitalWrite(ledR, LOW);
    }
    if((WiFi.status() == WL_CONNECTED)) {
    HTTPClient http;
    String message=url+sensor+"="+String(distance);
    http.begin(message);

    int httpCode = http.GET();
    Serial.println(message);
    Serial.print("Get code");
    Serial.println(httpCode);
    http.end();
    }
    delay (3000);
}

Humedad

Código Humedad

//Máximo Arenas Roa
#include <DHT.h>
#include <WiFi.h>
#include <HTTPClient.h>

//int led=32;
String url="https://proyecto-redes.onrender.com/dashboard/?";
String apikey="123";
String sensor="hum";

DHT dht (15, DHT22);

int valor_temperatura=0; 
int valor_humedad=0;
void setup() {
    //pinMode (led, OUTPUT);// Configurar puerto 2 como salida 
    dht.begin();//Inicializamos DHT
    Serial.begin (115200);
    //Conect to wifi network
    WiFi.begin("EXAMPLE", "EXAMPLE"); //WiFi_Network, Wifi_Password
    //Wait until connection
    while((WiFi.status() != WL_CONNECTED)){
    delay(500);
    Serial.print(".");
    }
    Serial.println("Wifi conected");
}

void loop(){
    delay (1000);
    valor_temperatura=dht.readTemperature();
    valor_humedad=dht.readHumidity();
    Serial.print ("Temperatura:");
    Serial.println(valor_temperatura);
    Serial.print ("Humedad:");
    Serial.println(valor_humedad);

    if(valor_humedad>=50){//Si la temperatura es mayor a 50%
    //digitalWrite(led,HIGH);
//Wait for WIFI connection
    if((WiFi.status() == WL_CONNECTED)){
        //Start connection and send HTTP header, return error code
        HTTPClient http;
        //String message= url+"apikey="+apikey+"&"+sensor+"="+ String(valor_temperatura) + "&field2=" + String(valor_humedad);
        String message= url+"apikey="+apikey+"&"+sensor+"="+String(valor_humedad);
        http.begin(message); //HTTP
        int httpCode = http.GET();
        Serial.println(message);
        Serial.print("GET code:");
        Serial.println(httpCode);
        http.end();
    }
    delay(3000);
    }
}

Presencia

Código Presencia

//Mary Tere Füguemann Sardá
#include <WiFi.h>
#include <HTTPClient.h>
// Definimos los pines
int pirPin = 33;
int ledPin = 32;
String url = "https://proyecto-redes.onrender.com/dashboard/?";
String apikey = "123";
String sensor = "mov";
void setup() {
    pinMode(pirPin, INPUT); // Configurar puerto 33 como entrada para el sensor PIR
    pinMode(ledPin, OUTPUT); // Configurar puerto 32 como salida para el LED
    Serial.begin(115200);

    // Conectar a la red WiFi
    WiFi.begin("EXAMPLE", "EXAMPLE"); // WiFi_Network, Wifi_Password

    // Esperar hasta que se conecte
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
    Serial.println("WiFi conectado");
}

void loop() {
    int pirValue = digitalRead(pirPin); // Leer el valor del sensor PIR

    if (pirValue == HIGH) { // Si detecta movimiento
    digitalWrite(ledPin, HIGH); // Encender el LED

    // Esperar conexión WiFi
    if (WiFi.status() == WL_CONNECTED) {
        // Iniciar conexión y enviar encabezado HTTP
        HTTPClient http;
        String message = url + "apikey=" + apikey + "&" + sensor + "=" + String(pirValue);
        http.begin(message); // HTTP

        int httpCode = http.GET();
        Serial.println(message);
        Serial.print("GET code:");
        Serial.println(httpCode);
        http.end();
    }
    } else {
    digitalWrite(ledPin, LOW); // Apagar el LED si no hay movimiento
    }
    delay(3000); // Esperar 3 segundos antes de la siguiente lectura
}