-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
173 lines (145 loc) · 5.48 KB
/
Copy pathmain.js
File metadata and controls
173 lines (145 loc) · 5.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
// importa os bibliotecas necessários
const serialport = require('serialport');
const express = require('express');
const mysql = require('mysql2');
// constantes para configurações
const SERIAL_BAUD_RATE = 9600;
const SERVIDOR_PORTA = 3300;
// habilita ou desabilita a inserção de dados no banco de dados
const HABILITAR_OPERACAO_INSERIR = true;
// função para comunicação serial
const serial = async (
//valoresSensorAnalogico,
valoresSensorDigital
) => {
// conexão com o banco de dados MySQL
let poolBancoDados = mysql.createPool(
{
host: '10.18.32.189',
user: 'aluno',
password: 'Sptech#2024',
database: 'DB_FitAlert',
port: 3307
}
).promise();
// lista as portas seriais disponíveis e procura pelo Arduino
const portas = await serialport.SerialPort.list();
const portaArduino = portas.find((porta) => porta.vendorId == 2341 && porta.productId == 43);
if (!portaArduino) {
throw new Error('O arduino não foi encontrado em nenhuma porta serial');
}
// configura a porta serial com o baud rate especificado
const arduino = new serialport.SerialPort(
{
path: portaArduino.path,
baudRate: SERIAL_BAUD_RATE
}
);
// evento quando a porta serial é aberta
arduino.on('open', () => {
console.log(`A leitura do arduino foi iniciada na porta ${portaArduino.path} utilizando Baud Rate de ${SERIAL_BAUD_RATE}`);
mockarSegundo();
});
function mockarSegundo() {
let inseridoSensor2 = false;
let idRegistroSensor2 = null;
let valorMockado = 0;
setInterval(async () => {
if (valorMockado === 0 && inseridoSensor2 === false) {
valorMockado = 1;
const [result] = await poolBancoDados.execute(
'INSERT INTO TB_Registros (fkSensor, ativo) VALUES (2, ?)',
[valorMockado]
);
idRegistroSensor2 = result.insertId;
inseridoSensor2 = true;
console.log("Entrada registrada pelo segundo sensor.");
} else if (valorMockado === 1 && inseridoSensor2 === true) {
await poolBancoDados.execute(
'UPDATE TB_Registros SET data_saida = NOW() WHERE idRegistro = ?',
[idRegistroSensor2]
);
inseridoSensor2 = false;
idRegistroSensor2 = null;
valorMockado = 0;
console.log("Saída registrada pelo segundo sensor.");
}
}, 10000);
}
}
let inserido = false;
let idRegistroAtual = null;
// processa os dados recebidos do Arduino
arduino.pipe(new serialport.ReadlineParser({ delimiter: '\r\n' })).on('data', async (data) => {
console.log(data);
const valores = data.split(',');
const sensorDigital = parseInt(valores[0]);
// const sensorAnalogico = parseFloat(valores[1]);
// armazena os valores dos sensores nos arrays correspondentes
//valoresSensorAnalogico.push(sensorAnalogico);
valoresSensorDigital.push(sensorDigital);
// insere os dados no banco de dados (se habilitado)
if (sensorDigital === 1 && inserido === false) {
// este insert irá inserir os dados na tabela "medida"
const [result] = await poolBancoDados.execute(
'INSERT INTO TB_Registros (fkSensor, ativo) VALUES (1, ?)',
[sensorDigital]
);
inserido = true;
idRegistroAtual = result.insertId;
console.log("Entrada registrada.");
}
if (sensorDigital === 0 && inserido == true) {
// este update irá atualizar a tabela "registro", registrando a saída da pessoa no provador.
await poolBancoDados.execute(
'UPDATE TB_Registros SET data_saida = (NOW()) WHERE idRegistro = ?',
[idRegistroAtual]
);
inserido = false;
idRegistroAtual = null;
console.log("Saída registrada");
}
});
// evento para lidar com erros na comunicação serial
arduino.on('error', (mensagem) => {
console.error(`Erro no arduino (Mensagem: ${mensagem}`)
});
// função para criar e configurar o servidor web
const servidor = (
//valoresSensorAnalogico,
valoresSensorDigital
) => {
const app = express();
// configurações de requisição e resposta
app.use((request, response, next) => {
response.header('Access-Control-Allow-Origin', '*');
response.header('Access-Control-Allow-Headers', 'Origin, Content-Type, Accept');
next();
});
// inicia o servidor na porta especificada
app.listen(SERVIDOR_PORTA, () => {
console.log(`API executada com sucesso na porta ${SERVIDOR_PORTA}`);
});
// define os endpoints da API para cada tipo de sensor
// app.get('/sensores/analogico', (_, response) => {
//return response.json(valoresSensorAnalogico);});
app.get('/sensores/digital', (_, response) => {
return response.json(valoresSensorDigital);
});
}
// função principal assíncrona para iniciar a comunicação serial e o servidor web
(async () => {
// arrays para armazenar os valores dos sensores
//const valoresSensorAnalogico = [];
const valoresSensorDigital = [];
// inicia a comunicação serial
await serial(
//valoresSensorAnalogico,
valoresSensorDigital
);
// inicia o servidor web
servidor(
//valoresSensorAnalogico,
valoresSensorDigital
);
})();