Este projeto foi desenvolvido durante a disciplina de Projeto Integrador 1 do curso de Engenharia de Computação da UFSC Araranguá no semestre de 2024.1.
- Augusto Daleffe
- Ludmila Silveira
- Débora Castro
- Eduardo Swarowsky
- Vinicius Muchulski
O objetivo deste projeto como um todo é desenvolver uma estação meteorológica utilizando quatro sensores: Anemômetro, Pluviómetro, DHT11 e BMP280. Estes sensores coletam dados como temperatura, umidade, quantidade de chuva, velocidade e direção do vento, etc.
Os dados são enviados por meio de um ESP32 para um banco de dados na nuvem. Onde os dados serão tratados adequadamente e poderão ser vizualizados e analizados através de uma aplicaçã web.
A equipe de software composta por Augusto Daleffe e Ludmilla Silveira. Ficou responsável pelo desenvolvimento completo da aplicação web mensionada anteriormente. Neste presente repositório será encontrada toda o back-end de tal aplicação.
O objetivo dessa parte do desenvolvimento era primeiramente desenvolver um banco de dados robusto o suficie para comportar todos os dados que irão ser recebidos das estações de coleta, e garantir a segurança dos mesmos.
Considerando isso, foi desenvolvido todo um sistema de controle de acesso a interface web, onde existe um usuário master e somente ele pode cadastras novos usuários, garantindo acesso restrito a tal análise. No presente repositório vai ser encontrado desde a lógica da criação das tabelas no banco de dados, até a lógica de segurança das requisições.
A parte do front-end desenvolvida pela mesma equipe comentada anteriormente fica no repositório: Estação meteorológica front-end
Diagrama de alto nivel do software:
Fluxo grama simplificado do software:
A aplicação web possui as seguintes funcionalidades:
- Login e cadastro de usuários
- Análise de dados meteorológicos
- Envio de dados extras ao banco ( não coletados pelo sistema do esp32)
- Adição de novas estações (mesmos sensores porém em diferentes localidades)
- Controle de acesso baseado na posição do usuário (Admin, Aluno, Professor)
- JavaScript
- Node.js
- Express.js
- PostgreSQL
docs/: Contém documentos como modelagem do banco de dados e diagramas de caso de uso.src/: Contém todos os queries, controllers, middlewares, routes e schemas do backend. Além do arquivoserver.js.tables.sql: Contém as tabelas do banco de dados.vercel.json: Utilizado para hospedar o backend e o banco de dados gratuitamente na Vercel.package.json: Contém as dependências e scripts do projeto.package-lock.json: Contém o bloqueio das versões das dependências instaladas.
-
queries/: Contém os arquivos que definem as consultas ao banco de dados.sensorQueries.js: Consultas relacionadas aos dados dos sensores.userQueries.js: Consultas relacionadas aos dados dos usuários.
-
controllers/: Contém os arquivos que controlam a lógica da aplicação.sensorController.js: Controla a lógica de leitura e gravação dos dados dos sensores.userController.js: Controla a lógica de autenticação e gerenciamento de usuários.
-
middlewares/: Contém os middlewares utilizados na aplicação.authMiddleware.js: Middleware para verificação de autenticação de usuários.errorMiddleware.js: Middleware para tratamento de erros na aplicação.
-
routes/: Contém as definições das rotas da aplicação.sensorRoutes.js: Define as rotas relacionadas aos sensores.userRoutes.js: Define as rotas relacionadas aos usuários.
-
schemas/: Contém os esquemas de validação de dados.sensorSchema.js: Valida os dados dos sensores antes de serem processados.userSchema.js: Valida os dados dos usuários antes de serem processados.
-
server.js: Arquivo principal que configura e inicia o servidor Express.
- Node.js instalado (versão 14 ou superior)
- PostgreSQL instalado e configurado
-
Clone o repositório:
git clone https://github.com/usuario/repositorio.git cd repositorio -
Instale as dependências:
npm install
-
Configure o banco de dados:
Crie um banco de dados PostgreSQL e configure as tabelas executando o arquivo
tables.sql:psql -U seu_usuario -d seu_banco_de_dados -f tables.sql
-
Configure as variáveis de ambiente:
Crie um arquivo .env na raiz do seu projeto e use o .env.example como inspiração
-
Inicie o servidor:
npm start
-
Acesse a aplicação:
A aplicação estará disponível em http://localhost:3000.
No diretório Docs/ existe o arquivo Guia de deploy.pdf nele pode ser encontrado um passo a passo de como nós fizemos o deploy da nossa aplicação de forma gratuita na plataforma do Vercel.
O guia trás de forma muito bem detalhada, com presença de imagens o passo a passo que você deve seguir para conseguir utilizar essa aplicação na nuvem.
No diretório Docs/ existe o arquivo Requisitos de Software.pdf nele pode ser encontrado todosos requisitos funcionais e não funcionais do projeto de software, bem como as regras de negócio que foram utilizadas para o desenvolvimento do mesmo.
Para o desenvolvimento desse projeto foi utilizado o banco de dados do tipo PostgreSQL que segundo a nossa equipe seria um banco de dados adequado para a nossa abordagem e que nossos membros ja tinham trabalhado com ele anteriormente.
O script SQL do banco está no arquivo tables.sql na raiz desse diretório.
-- Recreate the public schema
DROP SCHEMA IF EXISTS public CASCADE;
CREATE SCHEMA public AUTHORIZATION postgres;
COMMENT ON SCHEMA public IS 'standard public schema';
-- Create tables
CREATE TABLE public."User"
(
cpf VARCHAR(11) PRIMARY KEY,
email VARCHAR(50) NOT NULL
"name" VARCHAR(50) NOT NULL,
position INT NOT NULL DEFAULT 1,
"password" VARCHAR(255) NOT NULL,
CHECK (position BETWEEN 0 AND 3)
);
CREATE TABLE public."Station"
(
idStation serial4 INT PRIMARY KEY DEFAULT,
"location" VARCHAR(100) NOT NULL,
"status" INT NOT NULL DEFAULT 1,
lastCheckUp DATE,
CHECK ("status" BETWEEN 0 AND 1)
);
CREATE TABLE public."DHT11"
(
idDHT11 serial4 INT PRIMARY KEY,
'date' DATE NOT NULL,
temperature FLOAT NOT NULL,
humidity FLOAT NOT NULL,
idStation INT NOT NULL,
CONSTRAINT dht11_station_fkey FOREIGN KEY (idStation) REFERENCES public."Station" (idStation)
);
CREATE TABLE public."Pluviometer"
(
idPluviometer serial4 INT PRIMARY KEY DEFAULT,
'date' DATE NOT NULL,
rainfall FLOAT NOT NULL,
idStation INT NOT NULL,
CONSTRAINT pluviometer_station_fkey FOREIGN KEY (idStation) REFERENCES public."Station" (idStation)
);
CREATE TABLE public."BMP280"
(
idBMP280 serial4 INT PRIMARY KEY,
'date' DATE NOT NULL,
pressure FLOAT NOT NULL,
temperature FLOAT NOT NULL,
altitude FLOAT NOT NULL,
idStation INT NOT NULL,
CONSTRAINT bmp280_station_fkey FOREIGN KEY (idStation) REFERENCES public."Station" (idStation)
);
CREATE TABLE public."Anemometer"
(
idAnemometer serial4 INT PRIMARY KEY,
'date' DATE NOT NULL,
windSpeed FLOAT NOT NULL,
windDirection VARCHAR(10) NOT NULL,
windAngle FLOAT NOT NULL,
idStation INT NOT NULL,
CONSTRAINT anemometer_station_fkey FOREIGN KEY (idStation) REFERENCES public."Station" (idStation)
);




