Relative Humidity and Temperature data on Web with https Μετρήσεις σχετικής υγρασίας και θερμοκρασίας στο δίκτυο με https
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <HTTPClient.h>
#include <DHT.h>
#include <ArduinoJson.h>
// WiFi credentials Put your own wifi values below
const char* ssid = "xxxxxxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxxxxxxxx";
// Server details - USE HTTPS with the correct URL
// Use the exact address of the receiving php script
const char* serverURL = "https://*******************";
// Root Certificate for your domain - REPLACE WITH YOUR CERTIFICATE
const char* root_ca = \
"-----BEGIN CERTIFICATE-----\n" \
"MIIGIjCCBQqgAwIBAgISBVPl+mMmdTdH9OqNeC4ajXNtMA0GCSqGSIb3DQEBCwUA\n" \
"MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD\n" \
"EwNSMTMwHhcNMjUwOTI5MDQyMjI5WhcNMjUxMjI4MDQyMjI4WjAgMR4wHAYDVQQD\n" \
"ExV3ZWJkaXNrLm1lZ2FrYXN0cm8uZ3IwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw\n" \
"ggEKAoIBAQDSeKYkxn8e0J859W6igXo6agyKuo4UFTZXE4UII5V5K9hKyYrIsbOz\n" \
"iMHNy0eWxzrz4wNSTnpjsAPcH4kZLn+m0CRYjhMu5YixQOCpPTTW+XvAiWdk2yJ9\n" \
"hfBKb5BOiTehrIV4BcydUJlbHzLiN9JGeUgZDsi2Q4K9YfR3VNKGjmzKgRDZL3p+\n" \
"a7bMhDjGRT/bTcf4cW7Mb3vUSc4iZXraVw+ybP1khEnD+qgysP32RjnZkoAwvsEI\n" \
"6PfAfRpRgoU+54NHVKVwnmmPpavGgaK6/xajaS/P/hmD1519z9oUpPNfKpCo6imi\n" \
"qZ4L7pHbQieXLXJHBsH+wwV25flVR2CnAgMBAAGjggNBMIIDPTAOBgNVHQ8BAf8E\n" \
"BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQC\n" \
"MAAwHQYDVR0OBBYEFG4YfYSohVWwATWxhZGeyjvkjrpTMB8GA1UdIwQYMBaAFOer\n" \
"nw8sM6BT015PeMiyhA471pIzMDMGCCsGAQUFBwEBBCcwJTAjBggrBgEFBQcwAoYX\n" \
"aHR0cDovL3IxMy5pLmxlbmNyLm9yZy8wggE6BgNVHREEggExMIIBLYIaYXV0b2Rp\n" \
"c2NvdmVyLm1lZ2FrYXN0cm8uZ3KCFGNwYW5lbC5tZWdha2FzdHJvLmdyghljcGNh\n" \
"bGVuZGFycy5tZWdha2FzdHJvLmdyghhjcGNvbnRhY3RzLm1lZ2FrYXN0cm8uZ3KC\n" \
"Em1haWwubWVnYWthc3Ryby5ncoIUbWVnYTIwMTAucGFuLXRvdS5jb22CDW1lZ2Fr\n" \
"YXN0cm8uZ3KCFXdlYmRpc2subWVnYWthc3Ryby5ncoIVd2VibWFpbC5tZWdha2Fz\n" \
"dHJvLmdyghh3d3cubWVnYTIwMTAucGFuLXRvdS5jb22CEXd3dy5tZWdha2FzdHJv\n" \
"Lmdyghl3d3cueHJhY2luZy5tZWdha2FzdHJvLmdyghV4cmFjaW5nLm1lZ2FrYXN0\n" \
"cm8uZ3IwEwYDVR0gBAwwCjAIBgZngQwBAgEwLwYDVR0fBCgwJjAkoCKgIIYeaHR0\n" \
"cDovL3IxMy5jLmxlbmNyLm9yZy8xMTAuY3JsMIIBAwYKKwYBBAHWeQIEAgSB9ASB\n" \
"8QDvAHYA7TxL1ugGwqSiAFfbyyTiOAHfUS/txIbFcA8g3bc+P+AAAAGZk+rBFwAA\n" \
"BAMARzBFAiAzPV3xw/prqTrfe1/XlIGSwwpDyDmbBGQ3LshiJBj2XgIhAK4/j8e5\n" \
"FWYs5GVboifZGnOyoCGl8VXIQZj9eXyggZlhAHUAGYbUxyiqb/66A294Kk0BkarO\n" \
"LXIxD67OXXBBLSVMx9QAAAGZk+rBIgAABAMARjBEAiAgC9ul691KegvwvIR3mnB1\n" \
"v4RB6OHurJA0sS0ogpZo0AIgNMO8XlCuSPbaxGs+M0O5CyyAs2ZXJ1FI5XE9GZLZ\n" \
"TfYwDQYJKoZIhvcNAQELBQADggEBAE/GyzEIqFOTz/8DLusY7SbeyNYCv7tvsKs7\n" \
"LF/AJe1CPmsfKksjSDjXUKt6TA5i3zcbdnoArNkhi13qmGNsNii5GFtTT1uePdVr\n" \
"FwUlkooaZ4kiKTDT2S/jw6iOe8CmvCqscdu3cnvJ3ZBmYUQALHIS9Z5IZWCYS93H\n" \
"n1IJ/kmmXtxeAFn/ZnYzaJQaMHxv3wZ571zIe0pNiupl+XVoodX+wZS+N1PRoQK1\n" \
"jxinubI9eP7VfaODYB9qKKdAHa1NePpBxcMnzZzLpOSSc0fYsCgg3yQNxhkSjWTB\n" \
"wh5Xjg8tttdduXphsNk+A9U5Hc/wOYO873HAMhsjULMGnfOzWAA=\n" \
"-----END CERTIFICATE-----\n";
// DHT11 sensor configuration
#define DHT_PIN 4
#define DHT_TYPE DHT11
DHT dht(DHT_PIN, DHT_TYPE);
// Sensor data structure
struct SensorData {
float temperature;
float humidity;
bool valid;
};
// Device identifier
const String deviceId = "ESP32_DHT11_01";
void connectToWiFi() {
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(1000);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\n✓ WiFi connected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("\n✗ WiFi connection failed!");
}
}
SensorData readSensorData() {
SensorData data;
data.valid = false;
float temp = dht.readTemperature();
float hum = dht.readHumidity();
// Check if readings are valid
if (isnan(temp) || isnan(hum)) {
Serial.println("Failed to read from DHT sensor!");
return data;
}
data.temperature = temp;
data.humidity = hum;
data.valid = true;
Serial.printf("Sensor readings - Temperature: %.2f°C, Humidity: %.2f%%\n", temp, hum);
return data;
}
bool sendDataViaHTTPS(SensorData data) {
WiFiClientSecure *client = new WiFiClientSecure;
HTTPClient https;
client->setInsecure();
client->setTimeout(60000);
Serial.println("Attempting HTTPS connection to: " + String(serverURL));
if (https.begin(*client, serverURL)) {
https.setTimeout(30000);
https.setConnectTimeout(15000);
// Set headers for JSON
https.addHeader("Content-Type", "application/json");
https.addHeader("User-Agent", "ESP32-DHT11-Client");
// Create JSON data
String jsonData = "{\"device_id\":\"" + deviceId +
"\",\"temperature\":" + String(data.temperature, 2) +
",\"humidity\":" + String(data.humidity, 2) + "}";
Serial.println("Sending JSON data: " + jsonData);
// Send POST request with JSON data
int httpCode = https.POST(jsonData);
Serial.print("HTTP Response code: ");
Serial.println(httpCode);
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String response = https.getString();
Serial.println("✓ Success! Server response: " + response);
https.end();
delete client;
return true;
} else {
Serial.printf("HTTP Error: %d\n", httpCode);
String response = https.getString();
Serial.println("Error response: " + response);
}
} else {
Serial.printf("HTTPS POST failed, error: %s\n", https.errorToString(httpCode).c_str());
}
https.end();
} else {
Serial.println("Unable to begin HTTPS connection");
}
delete client;
return false;
}
void setup() {
Serial.begin(115200);
Serial.println("ESP32 DHT11 HTTPS Client Starting...");
// Initialize DHT sensor
dht.begin();
delay(2000);
// Connect to WiFi
connectToWiFi();
Serial.println("Setup completed successfully!");
}
void loop() {
// Check WiFi connection
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi disconnected! Attempting to reconnect...");
connectToWiFi();
delay(5000);
return;
}
// Read sensor data
SensorData data = readSensorData();
if (data.valid) {
// Send data to server via HTTPS
bool success = sendDataViaHTTPS(data);
if (success) {
Serial.println("✓ Data successfully sent to server");
} else {
Serial.println("✗ Failed to send data to server");
}
} else {
Serial.println("✗ Invalid sensor data, skipping transmission");
}
// Wait before next reading
Serial.println("Waiting 5 minutes for next reading...");
delay(300000);
}
Σχόλια
Δημοσίευση σχολίου