#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
String tokenbeebotte = "";
const char* servertime = "http://worldtimeapi.org/api/timezone/Africa/Tunis";
const char* serverbeebotte = "";
String jsonfile;
int trigPin = 22;
int echoPin = 21;
int PIRpin = 14;
float distancecm;
String dateMAJ;
void MesureDistanceCm(int trigP, int echoP, float *distance) {
digitalWrite(trigP, LOW);
delayMicroseconds(2);
digitalWrite(trigP, HIGH);
delayMicroseconds(10);
digitalWrite(trigP, LOW);
long duration = pulseIn(echoP, HIGH);
(*distance) = duration * 0.034 / 2;
}
String getdate(const char* server) {
HTTPClient http;
if (!http.begin(server)) {
Serial.println("Error connecting to server.");
return String("");
}
int status = http.GET();
if (status == 200) {
StaticJsonDocument<1024> json;
deserializeJson(json, http.getString());
String datetime = json["datetime"];
http.end();
return datetime;
} else if (status > 0) {
Serial.println("Error fetching datetime. Server response: " + String(status) + ". Payload:\n" + http.getString());
} else {
Serial.println("Error fetching datetime. Code: " + String(status) + ".");
}
http.end();
return String("");
}
String PrepareJsonBulk(float distance, String dateupdate) {
StaticJsonDocument<1024> json;
json["records"][0]["resource"] = "distance";
json["records"][0]["data"] = distance;
json["records"][1]["resource"] = "date";
json["records"][1]["data"] = dateupdate;
String result;
serializeJson(json, result);
return result;
}
void PostHTTPJsonBeebotte(const char* server, String token, String fileJson) {
HTTPClient http;
if (!http.begin(server)) {
Serial.println("Error connecting to server.");
return;
}
http.addHeader("Content-Type", "application/json");
http.addHeader("X-Auth-Token", token);
int status = http.POST(fileJson);
if (status == 200) {
Serial.println("Done.");
} else if (status > 0) {
Serial.println("Error posting. Server response: " + String(status) + ". Payload:\n" + http.getString());
} else {
Serial.println("Error posting. Code: " + String(status) + ".");
}
http.end();
}
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(PIRpin, INPUT);
Serial.begin(115200);
while (!Serial) continue;
Serial.print("Started. Connecting...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println(" Connected.");
}
void loop() {
if (digitalRead(PIRpin) == HIGH) {
MesureDistanceCm(trigPin, echoPin, &distancecm);
String date = getdate(servertime);
if (date != "") {
String data = PrepareJsonBulk(distancecm, date);
PostHTTPJsonBeebotte(serverbeebotte, tokenbeebotte, data);
}
}
delay(10000);
}