Μετάβαση στο κύριο περιεχόμενο

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);
}

Σχόλια

Δημοφιλείς αναρτήσεις από αυτό το ιστολόγιο

Σερβοκινητήρας

  Βασικός έλεγχος σερβομηχανισμού Θα μάθουμε πώς να ελέγχετε έναν τυπικό σερβοκινητήρα, να πηγαίνει εμπρός και πίσω κατά 180 μοίρες, χρησιμοποιώντας ένα «βρόχο for()». Αυτό γίνεται με τη βοήθεια της βιβλιοθήκης Servo, η οποία είναι προεγκατεστημένη βιβλιοθήκη στο Arduino IDE (τόσο εκτός σύνδεσης όσο και σε ηλεκτρονική έκδοση). . Αυτό γίνεται με τη βοήθεια της βιβλιοθήκης  Servo     , η οποία είναι προεγκατεστημένη βιβλιοθήκη στο Arduino IDE (τόσο εκτός σύνδεσης όσο και σε ηλεκτρονική έκδοση).      Χρειαζόμαστε τα παρακάτω:     Arduino IDE Arduino UNO  Σερβοκινητήρας 4,8V - 6V  Καλώδια βραχυκυκλωτήρα. Τυπικοί σερβοκινητήρες Οι τυπικοί σερβοκινητήρες είναι ενεργοποιητές που επιτρέπουν τον ακριβή έλεγχο της θέσης (γωνία). Χαρακτηριστικό  είναι ότι η γωνία του κινητήρα είναι 0 - 180 μοίρες. Με άλλα λόγια, μπορεί να κάνει το μισό μιας περιστροφής. Ένας τυπικός σερβοκινητήρας, όπως και άλλοι κινητήρες, είναι ουσιαστικά απλώς ένας...

Αντιστάσεις pull up, pull down

  Αντιστάσεις pull up (Pull up resistors) Οι αντιστάσεις pull up  είναι πολύ συνηθισμένες όταν χρησιμοποιούνται μικροελεγκτές (MCU) ή οποιαδήποτε συσκευή ψηφιακής λογικής. Θα εξηγήσουμε πότε και πού να χρησιμοποιήσετε αντιστάσεις pull up και, στη συνέχεια, θα κάνουμε έναν απλό υπολογισμό για να δείξουμε γιατί είναι σημαντικά τα pull-ups. Τι είναι μια αντίσταση  Pull up Ας υποθέσουμε ότι έχετε ένα MCU με ένα pin διαμορφωμένο ως είσοδο. Εάν δεν υπάρχει τίποτα συνδεδεμένο με τον ακροδέκτη και το πρόγραμμά σας διαβάζει την κατάσταση του ακροδέκτη, θα είναι ψηλά (τραβηγμένο στο VCC) ή χαμηλό (τραβηγμένο στη γείωση);  Αυτό το φαινόμενο αναφέρεται ως  αιωρούμενο  (floating). Για να αποφευχθεί αυτή η άγνωστη κατάσταση, μια αντίσταση pull-up ή pull-down θα διασφαλίσει ότι η ακίδα βρίσκεται είτε σε υψηλή είτε σε χαμηλή κατάσταση, ενώ χρησιμοποιεί επίσης χαμηλή ποσότητα ρεύματος. Για απλότητα, θα εστιάσουμε στα pull-ups καθώς είναι πιο συνηθισμένα από τα pull-down. Λε...

Πώς να χρησιμοποιήσετε ένα Breadboard

  Πώς να χρησιμοποιήσετε ένα Breadboard Το breadboard έχει εσωτερικές συνδέσεις μεταξύ των οπών του. Μερικές κάθετες συνδέσεις και μερικές οριζόντιες συνδέσεις. Κανονικά, χρησιμοποιείτε τις κολώνες στα πλάγια για να συνδέσετε το τροφοδοτικό σας. Και χρησιμοποιείτε τις σειρές στη μέση για να συνδέσετε τα στοιχεία σας. Στήλες Τροφοδοτικού Είναι σύνηθες να χρησιμοποιείτε τις στήλες στα αριστερά και δεξιά για τη σύνδεση του τροφοδοτικού. Αυτές οι στήλες συνδέονται κάθετα. Έτσι, εάν συνδέσετε 5 βολτ στην επάνω οπή μιας από τις πλευρικές κολώνες, θα έχετε 5 βολτ σε όλες τις οπές αυτής της στήλης. Χρησιμοποιήστε τις στήλες που επισημαίνονται με κόκκινη γραμμή για το συν και τη στήλη με μπλε γραμμή για το μείον. Τέλος φόρμας Σημείωση: Μερικές μεγαλύτερες πλάκες   breadboard χωρίζονται στα δύο έτσι ώστε το πάνω μισό να αποσυνδεθεί από το κάτω μισό. Αυτό υποδεικνύεται από τις κατακόρυφες μπλε και κόκκινες γραμμές που χωρίζονται στα δύο.   Περιοχή Συστατικού Σ...