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.
//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
}
}
//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);
}
//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);
}
}
//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
}