Skip to content

Diegobh08/atmosync

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AtmoSync - Sistema de Monitoreo de Temperatura y Humedad

Dashboard

AtmoSync es una aplicación fullstack para monitorear temperatura y humedad en tiempo real desde dispositivos IoT (ESP32 + DHT11/DHT22). Incluye un backend con Node.js/Express, una base de datos MongoDB Atlas y una interfaz moderna con React/Vite.


Tabla de Contenidos


Características

  • Autenticación de usuarios con registro e inicio de sesión
  • API REST para recepción de datos de sensores IoT
  • Control de actuadores (LED)
  • Dashboard con gráficas en tiempo real
  • Base de datos MongoDB Atlas
  • Comunicación entre ESP32 y API REST

Objetivos del Proyecto

  • Implementar comunicación entre dispositivos IoT y una API REST
  • Monitorear temperatura y humedad en tiempo real
  • Almacenar datos en una base de datos NoSQL
  • Visualizar datos mediante dashboards interactivos

Integrantes

  • Richard Montes
  • Diego Barrios
  • Ronald Pradilla

Contexto Académico

Proyecto desarrollado aplicando conceptos de:

  • APIs REST
  • Comunicación HTTP
  • Bases de datos NoSQL
  • Desarrollo frontend y backend
  • Internet de las Cosas (IoT)

API REST

Base URL:

http://localhost:5000

Sensores

Guardar lectura del sensor

POST /sensor
Content-Type: application/json

{
  "temperatura": 25.5,
  "humedad": 65.2
}

Respuesta exitosa:

{ "ok": true }

Obtener lecturas

GET /lecturas

Respuesta:

[
  {
    "_id": "507f1f77bcf86cd799439012",
    "temperatura": 25.5,
    "humedad": 65.2
  }
]

Endpoints

Método Endpoint Descripción
GET /prueba Verificar conexión
POST /register Registrar usuario
POST /login Iniciar sesión
POST /sensor Guardar lectura
GET /lecturas Obtener lecturas
POST /led Cambiar estado LED
GET /led Obtener estado LED

Arduino / ESP32

imagen

En este apartado observamos el sensor DHT11 conectado a la placa ESP32 utilizada en el proyecto.

El sensor lee los valores de temperatura y humedad para enviarlos hacia la API REST desarrollada con Node.js y Express.


Código ESP32

#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>

#define LEDPIN 2
#define DHTPIN 4
#define DHTTYPE DHT11

Autenticación

Registrar nuevo usuario

Registro

La interfaz de registro permite crear nuevas cuentas dentro de la plataforma AtmoSync.

Cuando el usuario completa el formulario, React realiza una petición POST hacia /register.

fetch("http://127.0.0.1:5000/register", {
  method: "POST",
  headers: {
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    email,
    username,
    password
  })
});

Iniciar sesión

Inicio de sesion

La interfaz de inicio de sesión permite autenticar usuarios utilizando correo y contraseña.

Mensajes posibles:

  • Usuario no existe
  • Contraseña incorrecta
  • Completa todos los campos

Dashboard Web

Dashboard

La interfaz web fue desarrollada con React + Vite y permite visualizar en tiempo real los datos enviados desde el ESP32.

El dashboard muestra:

  • Temperatura actual
  • Humedad actual
  • Gráficas dinámicas
  • Historial de lecturas
  • Indicadores de estado
  • Control remoto del LED conectado al ESP32

Actualización en tiempo real

Dashboard

El dashboard obtiene nuevas lecturas automáticamente cada 3 segundos utilizando setInterval.

useEffect(() => {

  const obtenerDatos = () => {
    fetch("http://localhost:5000/lecturas")
      .then(res => res.json())
      .then(data => setDatos(data));
  };

  obtenerDatos();

  const interval = setInterval(obtenerDatos, 3000);

  return () => clearInterval(interval);

}, []);

Visualización de Datos con Chart.js

Librería Chart.js

Para representar gráficamente los datos de temperatura y humedad en tiempo real, se implementó la librería Chart.js junto con react-chartjs-2.


Configuración de Chart.js

import {
  Chart as ChartJS,
  CategoryScale,
  LinearScale,
  PointElement,
  LineElement,
  Title,
  Tooltip,
  Legend
} from 'chart.js';

Obtención de Datos desde la API

fetch("http://192.168.1.77:5000/lecturas")

Los datos son obtenidos desde el backend y actualizados automáticamente.


Creación de las Gráficas

const temperaturaData = {
  labels: datos.map((_, index) => `Lectura ${index + 1}`),
  datasets: [
    {
      label: 'Temperatura °C',
      data: datos.map(item => item.temperatura),
    },
  ],
};

Renderizado de las Gráficas

<Line data={temperaturaData} />

Dashboard con gráficas


Base de Datos Utilizada

Base de datos

El proyecto utiliza MongoDB Atlas para almacenar las lecturas del sensor.

Cada documento contiene:

  • _id
  • temperatura
  • humedad

Base de datos

También existe una colección para almacenar los usuarios registrados.


Control del LED desde el Dashboard

Dashboard

Dentro del dashboard se encuentra el apartado para controlar el LED conectado al ESP32.


Cambiar estado del LED

POST /led
Content-Type: application/json

{
  "estado": true
}
  • true → enciende LED
  • false → apaga LED

Obtener estado del LED

GET /led

Respuesta:

{
  "estado": true
}

Led

El LED puede controlarse remotamente desde la aplicación web.


Sobre Nosotros

About

About

En esta sección se presenta información sobre los desarrolladores y tecnologías utilizadas.

Tecnologías principales:

  • React
  • Vite
  • Node.js
  • Express.js
  • MongoDB Atlas
  • ESP32
  • Sensor DHT11 / DHT22
  • Chart.js
  • API REST
  • HTTP
  • JSON
  • Arduino IDE

Comunicación entre el ESP32 y la API REST

imagen

El ESP32 obtiene los datos del sensor DHT11 y los prepara para ser enviados mediante HTTP.


imagen

Los datos son convertidos a formato JSON.

String json = "{\"temperatura\":" + String(temp) + ",\"humedad\":" + String(hum) + "}";

Luego son enviados mediante un POST hacia /sensor.


imagen

El ESP32 también realiza una petición GET al endpoint /led.

httpLED.begin("http://192.168.1.77:5000/led");

imagen


Creación de la API REST con Express

const express = require('express');
const app = express();

La variable app representa la aplicación principal creada con Express.


imagen

Luego se crea el endpoint /sensor utilizando el método POST.

app.post('/sensor', async (req, res) => {

Envío y Recepción de Datos JSON

imagen

imagen

En esta parte del proyecto se convierten los datos del sensor a formato JSON para que la API pueda reconocerlos correctamente.

Luego el ESP32 envía la información al backend mediante una petición HTTP POST.


imagen

Finalmente el dashboard consulta los datos desde /lecturas para visualizarlos en tiempo real mediante gráficas y tablas.


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors