#include <Arduino.h>
#include <ArduinoJson.h>
#include <HTTPClient.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include "time.h"
// WiFi Credentials
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// Firebase things
#define DATABASE_URL "https://exp1-264c7-default-rtdb.firebaseio.com/"
HTTPClient client;
//definir los pines
#define trigPin 25
#define echoPin 33
#define ledV 2
#define ledR 4
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
//variables
int prev = 0;
String tempText = "";
String payload = "";
String sensorID = "HC001";
char timeStringBuff[20];
String ledVBool;
String ledRBool;
String safeDistBool;
void setup()
{
Serial.begin(115200);
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Connecting to ");
LCD.setCursor(0, 1);
LCD.print("WiFi ");
// WIFI
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
Serial.print("connected: ");
Serial.println(WiFi.localIP());
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("Online");
delay(500);
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("Connecting to");
LCD.setCursor(0, 1);
LCD.println("Firebase...");
Serial.println("connecting...");
// Firebase
client.begin(DATABASE_URL);
int httpResponseCode=client.GET();
if (httpResponseCode>0) {
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("Connected");
Serial.println("connected, Firebase payload:");
payload = client.getString();
Serial.println(payload);
Serial.println();
}
// Componentes
pinMode(trigPin, OUTPUT); //definir como salida
pinMode(echoPin, INPUT); //definir como entrada
pinMode(ledV, OUTPUT);
pinMode(ledR, OUTPUT);
Serial.println("Verde = DISTANCIA SEGURA");
Serial.println("Rojo = NO SEGURA");
// Indica comienzo de Transmisión de Datos
for (int i=0; i<5; i++) {
digitalWrite(ledV, HIGH);
digitalWrite(ledR, HIGH);
delay(200);
digitalWrite(ledV, LOW);
digitalWrite(ledR, LOW);
delay(200);
}
// Time
configTime(-9000, -9000, "1.mx.pool.ntp.org");
}
void loop()
{
long sure, mesafe;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(2);
digitalWrite(trigPin, LOW);
sure=pulseIn(echoPin, HIGH);
mesafe=(sure/2)/29.1;
// Thêm phương thức PUT tại đây
String path = String(DATABASE_URL) + "/Distance.json"; // Đường dẫn đến dữ liệu của bạn trên Firebase
String data = String(mesafe); // Dữ liệu bạn muốn cập nhật
client.begin(path);
int httpCode = client.PUT(data);
// Kiểm tra kết quả
if(httpCode > 0) {
if(httpCode == HTTP_CODE_OK) {
Serial.println("PUT request successfully sent");
} else {
Serial.println("PUT request failed with error: " + String(httpCode));
}
} else {
Serial.println("PUT request failed with error: " + String(client.errorToString(httpCode).c_str()));
}
// Firebase
client.begin(path);
int getHttpCode = client.GET();
// Kiểm tra kết quả
if(getHttpCode > 0) {
// Nếu mã trạng thái HTTP là 200, yêu cầu GET thành công
if(getHttpCode == HTTP_CODE_OK) {
// Lấy dữ liệu trả về từ yêu cầu GET
String payload = client.getString();
// In dữ liệu ra Serial Monitor
Serial.println("GET request successfully: " + payload);
}
} else {
Serial.println("GET request failed with error: " + String(getHttpCode));
}
if(prev!=mesafe) {
if(mesafe>200 || mesafe<0){
digitalWrite(ledV, HIGH);
digitalWrite(ledR, LOW);
tempText = "DISTANCIA SEGURA: ";
ledVBool = "true";
ledRBool = "false";
safeDistBool = "true";
}
else {
digitalWrite(ledV, LOW);
digitalWrite(ledR, HIGH);
tempText = "NO SEGURA: ";
ledVBool = "false";
ledRBool = "true";
safeDistBool = "false";
}
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Time Err");
}
strftime(timeStringBuff, sizeof(timeStringBuff), "%d/%m/%Y %H:%M", &timeinfo);
Serial.println(String(timeStringBuff));
client.PATCH("{\"Sensores/time\":\"" + String(timeStringBuff) + "\"}");
client.PATCH("{\"Led/ledV\":" + ledVBool + "}");
client.PATCH("{\"Led/ledR\":" + ledRBool + "}");
client.PATCH("{\"Sensores/Distancia\":" + String(mesafe) + "}");
client.PATCH("{\"Sensores/safeDist\":" + safeDistBool + "}");
client.PATCH("{\"Sensores/id\":" + sensorID + "}");
LCD.clear();
LCD.setCursor(0,0);
LCD.print(tempText);
LCD.setCursor(0,1);
LCD.print(mesafe);
Serial.print(tempText);
Serial.print(mesafe);
Serial.println(" cm");
}
prev = mesafe;
delay(500);
}