-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.cpp
196 lines (166 loc) · 4.14 KB
/
main.cpp
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#include <Arduino.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <Adafruit_Sensor.h>
//ADC max value = 4095 / 3.3V
//Pinout
#define led 2
#define bat_v 35
#define ecg_sensor 34
#define temp_sensor 23
#define exam_reset 22
#define loN 27
#define loP 28
//Wi-Fi
const char* ssid ="SSID";
const char* password="SECRETPASS";
//MQTT
const char* broker_mqtt= "192.168.1.103"; //Broker ip
int broker_port= 1883; // Broker port
#define id_mqtt "ecg_device"
//Global objects and variables
WiFiClient espClient;
PubSubClient mqtt(espClient);
#define DHTTYPE DHT11 // Define DHT sensor type
DHT dht(temp_sensor, DHTTYPE);
unsigned long prevTimerEcg =0; //Store last ECG send time
unsigned long prevTimerTemp =0; //Store last Temperature send time
unsigned long prevTimerBpm =0; //Store last BPM send time
int bpm_val=0;
float bat_past=0;
//Prototypes
void pinInit();
void serialInit();
void wifiInit();
void wifiConect();
void mqttInit();
void mqttReconect();
void isConected(void);
void readEcgSignal();
void readTemperature();
void readBateryLevel();
void resetExam();
//Setup
void setup() {
pinInit();
serialInit();
wifiInit();
mqttInit();
bat_past= analogRead(bat_volt); // Read batery voltage on start
char sendBuffer[6];
dtostrf(bat_past,5,0,sendBuffer); //Convert value to char array
mqtt.publish("BATTERY", sendBuffer); //Send MQTT message to broker (tópico, mensagem)
}
//Pinout mode
void pinInit(){
pinMode(ecg_sensor, INPUT);
pinMode(loN, INPUT);
pinMode(loP, INPUT);
pinMode(temp_sensor, INPUT);
pinMode(bat_volt, INPUT);
pinMode(exam_reset, INPUT);
pinMode(led,OUTPUT);
}
void serialInit(){
Serial.begin(115200);
Serial.println("");
Serial.println("------- Serial Communication starting -------");
Serial.println("Connection estabilished");
Serial.println("--Baud: 115200");
Serial.println("");
}
void wifiInit(){
delay(10);
Serial.println("-------Estabilishing Wi-Fi connection-------");
Serial.print("Connecting to: ");
Serial.println(ssid);
Serial.print("Wait");
wifiConect();
}
void wifiConect(){
if(WiFi.status() == WL_CONNECTED){
return;
}
else{
WiFi.begin(ssid,password);
digitalWrite(led,HIGH);
while(WiFi.status() != WL_CONNECTED){
delay(100);
Serial.print(".");
}
digitalWrite(led,LOW);
Serial.println("Connected");
Serial.print("--IP: ");
Serial.println(WiFi.localIP());
Serial.println("");
}
}
void mqttInit(){
Serial.println("-------Setting up MQTT Broker-------");
mqtt.setServer(broker_mqtt,broker_port);
Serial.print("--Broker: ");
Serial.print(broker_mqtt);
Serial.print(":");
Serial.println(broker_port);
Serial.println("");
}
void mqttReconect(){
while(!mqtt.connected()){
Serial.println("-------Connecting to Broker-------");
Serial.print("Wait");
delay(100);
Serial.print(".");
if(mqtt.connect(id_mqtt)){
Serial.println("Connected");
Serial.print("--Broker: ");
Serial.print(broker_mqtt);
Serial.print(":");
Serial.println(broker_port);
}
}
}
void isConected(){
if(!mqtt.connected()){
mqttReconect();
}
wifiConect();
}
void readTemperature(){
unsigned long interval = 300000; //5 minutes
unsigned long timerNow= millis();
char sendBuffer[6];
if((unsigned long)(timerNow-prevTimerTemp) >= interval){
float temperature= dht.readTemperature();
dtostrf(temperature,4,2,sendBuffer);
mqtt.publish("TEMPERATURE", sendBuffer);
prevTimerTemp=millis();
}
}
void readEcgSignal(){
unsigned long interval = 20;
unsigned long timerNow= millis();
char sendBuffer[6];
if((unsigned long)(timerNow-prevTimerEcg) >= interval){
int ecg= analogRead(ecg_sensor);
dtostrf(ecg,5,0,sendBuffer);
mqtt.publish("ECG", sendBuffer);
prevTimerEcg=millis();
}
}
void readBateryLevel(){
char sendBuffer[6];
float bat_now = analogRead(bat_volt);
if(bat_now < bat_past){
dtostrf(bat_now,5,0,sendBuffer);
mqtt.publish("BATTERY", sendBuffer);
bat_past = bat_now;
}
}
void loop() {
isConected();
readTemperature();
readEcgSignal();
readBateryLevel();
mqtt.loop(); //Keep Broker connection
}