first commit
This commit is contained in:
commit
ad10c19214
|
@ -0,0 +1,49 @@
|
|||
#include <Wire.h>
|
||||
#include <SoftwareSerial.h>
|
||||
#include "MAX30100_PulseOximeter.h"
|
||||
|
||||
#define REPORTING_PERIOD_MS 1000
|
||||
|
||||
SoftwareSerial mySerial(2, 0); // D3 -> TX, D4 -> RX
|
||||
|
||||
PulseOximeter pox;
|
||||
|
||||
uint32_t tsLastReport = 0;
|
||||
|
||||
void onBeatDetected() {
|
||||
Serial.println("Beat!");
|
||||
}
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
mySerial.begin(9600);
|
||||
|
||||
if (!pox.begin()) {
|
||||
Serial.println("FAILED");
|
||||
for(;;);
|
||||
} else {
|
||||
Serial.println("SUCCESS");
|
||||
}
|
||||
|
||||
pox.setOnBeatDetectedCallback(onBeatDetected);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
pox.update();
|
||||
|
||||
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
|
||||
float heartRate = pox.getHeartRate();
|
||||
float spO2 = pox.getSpO2();
|
||||
|
||||
Serial.print("Heart rate:");
|
||||
Serial.print(heartRate);
|
||||
Serial.print(" bpm / SpO2:");
|
||||
Serial.print(spO2);
|
||||
Serial.println(" %");
|
||||
|
||||
String dataToSend = String(heartRate) + "," + String(spO2);
|
||||
mySerial.println(dataToSend);
|
||||
|
||||
tsLastReport = millis();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,248 @@
|
|||
#include <Wire.h>
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266HTTPClient.h>
|
||||
#include <ESP8266WebServer.h>
|
||||
#include <WiFiClient.h>
|
||||
#include <SPI.h>
|
||||
#include <MFRC522.h>
|
||||
#include <SoftwareSerial.h>
|
||||
#include <LiquidCrystal_I2C.h>
|
||||
|
||||
#define SS_PIN 2 //--> SDA / SS terhubung ke pin D4
|
||||
#define RST_PIN 0 //--> RST terhubung ke pin D1
|
||||
#define BUZZER_PIN 15 // Pin untuk buzzer
|
||||
#define LM35_PIN A0 // Pin analog untuk sensor LM35
|
||||
|
||||
#define SDA_PIN 3 // RX untuk SDA
|
||||
#define SCL_PIN 1 // TX untuk SCL
|
||||
|
||||
MFRC522 mfrc522(SS_PIN, RST_PIN);
|
||||
|
||||
const char* ssid = "Nanad"; // Nama SSID WiFi
|
||||
const char* password = "12345678"; // Password WiFi
|
||||
const char* host = "172.20.10.4"; // Alamat IP server lokal
|
||||
|
||||
WiFiClient client;
|
||||
ESP8266WebServer server(80);
|
||||
|
||||
#define REPORTING_PERIOD_MS 500
|
||||
|
||||
uint32_t tsLastReport = 0; // Untuk mengembalikan ke 0
|
||||
|
||||
int readsuccess;
|
||||
byte readcard[4];
|
||||
char str[32] = "";
|
||||
String StrUID;
|
||||
|
||||
float suhu = 0; // Variabel untuk menyimpan suhu
|
||||
float heartRate = 0; // Variabel untuk menyimpan detak jantung
|
||||
float spO2 = 0; // Variabel untuk menyimpan SpO2
|
||||
String status; // Variabel untuk menyimpan status
|
||||
|
||||
SoftwareSerial espSerial(5, 4); // Gunakan D1 -> RX, D2 -> TX untuk komunikasi dengan ESP8266 pertama
|
||||
|
||||
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD dengan alamat I2C 0x27
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
espSerial.begin(9600); // Gunakan SoftwareSerial untuk berkomunikasi dengan ESP8266 pertama
|
||||
|
||||
pinMode(BUZZER_PIN, OUTPUT); // Atur pin BUZZER_PIN sebagai output
|
||||
digitalWrite(BUZZER_PIN, LOW); // Pastikan buzzer mati pada awalnya
|
||||
|
||||
SPI.begin();
|
||||
mfrc522.PCD_Init();
|
||||
Serial.println("Menginisialisasi...");
|
||||
|
||||
// Inisialisasi Wire dengan pin custom untuk SDA dan SCL
|
||||
Wire.begin(SDA_PIN, SCL_PIN);
|
||||
|
||||
// Inisialisasi LCD
|
||||
lcd.begin(16, 2);
|
||||
lcd.backlight();
|
||||
lcd.print("Inisialisasi...");
|
||||
|
||||
connectToWifi();
|
||||
lcd.clear();
|
||||
lcd.print("WiFi Terhubung");
|
||||
delay(2000);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
readsuccess = getid();
|
||||
|
||||
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
|
||||
float voltage = analogRead(LM35_PIN) * (3.3 / 1023.0);
|
||||
suhu = voltage * 100.0;
|
||||
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
|
||||
// Cek apakah data detak jantung dari ESP8266 pertama tersedia
|
||||
if (espSerial.available()) {
|
||||
String data = espSerial.readStringUntil('\n');
|
||||
Serial.print("Data diterima: ");
|
||||
Serial.println(data);
|
||||
|
||||
// Pisahkan data detak jantung dan SpO2
|
||||
int commaIndex = data.indexOf(',');
|
||||
if (commaIndex != -1) {
|
||||
String heartRateStr = data.substring(0, commaIndex);
|
||||
String spO2Str = data.substring(commaIndex + 1);
|
||||
|
||||
heartRate = heartRateStr.toFloat();
|
||||
spO2 = spO2Str.toFloat();
|
||||
|
||||
// Tentukan status berdasarkan detak jantung
|
||||
if (heartRate == 0) {
|
||||
status = "Sensor belum membaca";
|
||||
} else if (heartRate < 130) {
|
||||
status = "Normal";
|
||||
} else if (heartRate >= 130 && heartRate < 140) {
|
||||
status = "Elevasi (Pra-hipertensi)";
|
||||
} else if (heartRate >= 140 && heartRate < 160) {
|
||||
status = "Stadium 1 (Hipertensi Ringan)";
|
||||
} else if (heartRate >= 160 && heartRate < 180) {
|
||||
status = "Stadium 2 (Hipertensi Sedang)";
|
||||
} else if (heartRate >= 180 && heartRate < 210) {
|
||||
status = "Stadium 3 (Hipertensi Berat)";
|
||||
} else if (heartRate >= 210) {
|
||||
status = "Stadium 4 (Hipertensi Maligna)";
|
||||
} else {
|
||||
status = "Tidak Normal";
|
||||
}
|
||||
|
||||
Serial.print("Detak jantung: ");
|
||||
Serial.println(heartRate);
|
||||
Serial.print(" bpm / SpO2: ");
|
||||
Serial.print(spO2);
|
||||
Serial.println(" %");
|
||||
Serial.print("Status: ");
|
||||
Serial.println(status);
|
||||
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("HR: ");
|
||||
lcd.print(heartRate);
|
||||
lcd.print(" bpm");
|
||||
lcd.setCursor(0, 1);
|
||||
lcd.print("SpO2: ");
|
||||
lcd.print(spO2);
|
||||
lcd.print(" %");
|
||||
}
|
||||
}
|
||||
|
||||
kirimDataKeServer(suhu, heartRate, spO2, status);
|
||||
tsLastReport = millis();
|
||||
}
|
||||
|
||||
if (readsuccess) {
|
||||
digitalWrite(BUZZER_PIN, HIGH); // Nyalakan buzzer
|
||||
delay(500); // Buzzer menyala selama 500 ms
|
||||
digitalWrite(BUZZER_PIN, LOW); // Matikan buzzer
|
||||
|
||||
HTTPClient http; // Buat objek dari kelas HTTPClient
|
||||
|
||||
String UIDresultSend, postData;
|
||||
UIDresultSend = StrUID;
|
||||
|
||||
// Data yang akan dipost
|
||||
postData = "UIDresult=" + UIDresultSend;
|
||||
|
||||
// Tentukan tujuan permintaan HTTP
|
||||
http.begin(client, "http://" + String(host) + "/folder_nodemcu2/getUID.php");
|
||||
|
||||
// Tambahkan header content-type
|
||||
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||
|
||||
// Kirim permintaan
|
||||
int httpCode = http.POST(postData);
|
||||
String payload = http.getString();
|
||||
|
||||
// Tampilkan hasil di monitor serial
|
||||
Serial.println(UIDresultSend);
|
||||
Serial.println(httpCode);
|
||||
Serial.println(payload);
|
||||
|
||||
http.end(); // Tutup koneksi
|
||||
delay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
void kirimDataKeServer(float suhu, float detakjantung, float oksigen, String status) {
|
||||
if (WiFi.status() != WL_CONNECTED) {
|
||||
Serial.println("WiFi tidak terhubung");
|
||||
return;
|
||||
}
|
||||
|
||||
HTTPClient http;
|
||||
|
||||
String url = "http://" + String(host) + "/folder_nodemcu2/kirimdata.php?&detakjantung=" + String(detakjantung) + "&oksigen=" + String(oksigen) + "&status=" + status;
|
||||
http.begin(client, url);
|
||||
|
||||
int httpResponseCode = http.GET();
|
||||
|
||||
if (httpResponseCode > 0) {
|
||||
String respon = http.getString();
|
||||
Serial.println("Respon dari server: " + respon);
|
||||
} else {
|
||||
Serial.print("Error code: ");
|
||||
Serial.println(httpResponseCode);
|
||||
}
|
||||
|
||||
http.end();
|
||||
delay(1000);
|
||||
}
|
||||
|
||||
int getid() {
|
||||
if (!mfrc522.PICC_IsNewCardPresent()) {
|
||||
return 0;
|
||||
}
|
||||
if (!mfrc522.PICC_ReadCardSerial()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
Serial.print("UID KARTU YANG DIPINDAI : ");
|
||||
lcd.clear();
|
||||
lcd.setCursor(0, 0);
|
||||
lcd.print("UID: ");
|
||||
lcd.print(StrUID);
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
readcard[i] = mfrc522.uid.uidByte[i]; // Menyimpan UID tag dalam readcard
|
||||
array_to_string(readcard, 4, str);
|
||||
StrUID = str;
|
||||
}
|
||||
mfrc522.PICC_HaltA();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Fungsi untuk mengubah hasil pembacaan UID dalam bentuk array menjadi string
|
||||
void array_to_string(byte array[], unsigned int len, char buffer[]) {
|
||||
for (unsigned int i = 0; i < len; i++) {
|
||||
byte nib1 = (array[i] >> 4) & 0x0F;
|
||||
byte nib2 = (array[i] >> 0) & 0x0F;
|
||||
buffer[i * 2 + 0] = nib1 < 0xA ? '0' + nib1 : 'A' + nib1 - 0xA;
|
||||
buffer[i * 2 + 1] = nib2 < 0xA ? '0' + nib2 : 'A' + nib2 - 0xA;
|
||||
}
|
||||
buffer[len * 2] = '\0';
|
||||
}
|
||||
|
||||
void connectToWifi() {
|
||||
Serial.println();
|
||||
Serial.println();
|
||||
Serial.print("Menghubungkan ke ");
|
||||
Serial.println(ssid);
|
||||
|
||||
WiFi.begin(ssid, password);
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(500);
|
||||
Serial.print(".");
|
||||
}
|
||||
|
||||
Serial.println("");
|
||||
Serial.println("WiFi terhubung");
|
||||
Serial.println("Alamat IP: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
}
|
Loading…
Reference in New Issue