TIF_NGANJUK_E41211051/Sensor_A01ANYUB_V2_Waterpro...

117 lines
3.7 KiB
C++

#include <HardwareSerial.h>
#include <WiFi.h>
#include <HTTPClient.h>
// Ganti dengan kredensial WiFi Anda
const char* ssid = "";
const char* password = "";
// URL endpoint
const char* serverName = "http://..............:../...";
// Nama perangkat
const char* deviceName = "....."; // Nama perangkat yang akan dikirim
HardwareSerial mySerial(1);
// Variabel untuk mengelola waktu pembacaan sensor
unsigned long previousMillis = 0;
const long interval = 10000; // Interval pengukuran dalam milidetik (5 detik)
const long resetInterval = 20000; // Interval reset dalam milidetik (20 detik)
const float maxDistance = ...;
void setup() {
Serial.begin(115200);
mySerial.begin(9600, SERIAL_8N1, 16, 17);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("Connected to WiFi");
}
void loop() {
unsigned long currentMillis = millis();
// Mengambil nilai millis saat ini
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis; // Reset waktu sebelumnya
// Memastikan data tersedia pada serial sensor
if (mySerial.available() >= 4) { // Pastikan 4 byte tersedia sebelum dibaca
// Membaca data dari sensor
uint8_t data[4];
mySerial.readBytes(data, 4);
// Debugging: Tampilkan data yang diterima dari sensor
Serial.print("Data received: ");
for (int i = 0; i < 4; i++) {
Serial.print(data[i], HEX);
Serial.print(" ");
}
Serial.println();
// Memeriksa apakah byte pertama valid (misalnya, 0xFF sebagai start byte)
if (data[0] == 0xFF) {
// Menggabungkan byte 1 dan byte 2 untuk mendapatkan jarak dalam milimeter
uint16_t distance_mm = (data[1] << 8) | data[2];
// Mengonversi jarak dari mm ke cm
float distance_cm = distance_mm / 10.0;
// Batasi jarak maksimal hingga 330 cm
if (distance_cm > maxDistance) {
distance_cm = maxDistance;
}
// Membalikkan jarak: semakin dekat objek, semakin besar nilainya
float invertedDistance = maxDistance - distance_cm;
Serial.print("JARAK: ");
Serial.println(invertedDistance);
Serial.println(" cm");
// Jika terhubung ke WiFi, kirim data jarak ke server
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
// Membuat URL dengan parameter jarak terbalik dan nama perangkat
String url = String(serverName) + "?device=" + String(deviceName) + "&distance=" + String(invertedDistance, 3);
http.begin(url);
// Melakukan HTTP GET request
int httpResponseCode = http.GET();
// Mengecek apakah request berhasil
if (httpResponseCode > 0) {
String response = http.getString();
Serial.println("Response code: " + String(httpResponseCode));
Serial.println("Response: " + response);
} else {
Serial.println("Error in HTTP request: " + String(httpResponseCode));
}
http.end(); // Menutup koneksi
} else {
Serial.println("Error in WiFi connection");
}
} else {
Serial.println("Invalid start byte received.");
}
} else {
Serial.println("Not enough data available to read.");
}
}
// Periksa apakah waktu reset telah berlalu
if (currentMillis % resetInterval == 0) {
Serial.println("Restarting");
delay(10000); // Tunggu 10 detik
ESP.restart(); // Mereset ESP32
}
}