Σύντομα: με ένα ESP32, έναν αισθητήρα DHT22 και τρία καλώδια μπορείς να φτιάξεις σε περίπου μισή ώρα μια μικρή συσκευή που μετράει θερμοκρασία και υγρασία και τις δείχνει σε μια σελίδα, από οποιοδήποτε κινητό ή υπολογιστή συνδεδεμένο στο WiFi του σπιτιού σου. Το συνολικό κόστος είναι συνήθως γύρω στα 10-15 ευρώ.
Το ESP32 είναι από τις αγαπημένες μου πλακέτες. Το χρησιμοποιώ σε δικά μου projects, όπως η θήκη smartwatch με ESP32-C3 που σχεδίασα και τύπωσα σε 3D, και είναι ιδανικό για να ξεκινήσει κάποιος με τα IoT. Έχει ενσωματωμένο WiFi, είναι φθηνό και προγραμματίζεται εύκολα με το Arduino IDE. Σε αυτόν τον οδηγό θα φτιάξουμε ένα απλό αλλά πραγματικά χρήσιμο έργο.
Τι θα χρειαστείς
- Μια πλακέτα ESP32 DevKit (περίπου 5-10 €).
- Έναν αισθητήρα DHT22, δηλαδή τον AM2302 (περίπου 3-6 €). Αν τον βρεις σε μικρή πλακέτα με τρεις ακροδέκτες, έχει ήδη ενσωματωμένη αντίσταση και δεν χρειάζεται κάτι άλλο.
- Τρία jumper καλώδια και ένα breadboard.
- Ένα καλώδιο micro-USB ή USB-C, ανάλογα με την πλακέτα σου, για τροφοδοσία και προγραμματισμό.
- Προαιρετικά, μια θήκη τυπωμένη σε 3D εκτυπωτή. Αν σε ενδιαφέρει, δες πώς λειτουργεί ένας 3D εκτυπωτής.
Συνδεσμολογία
Η σύνδεση είναι πολύ απλή. Αν ο αισθητήρας σου έχει τρεις ακροδέκτες (VCC, DATA, GND), κάνε τα εξής:
| DHT22 | ESP32 |
|---|---|
| VCC (+) | 3V3 |
| DATA (OUT) | GPIO 4 |
| GND (-) | GND |
Αν έχεις τον γυμνό αισθητήρα με τέσσερις ακροδέκτες, βάλε μια αντίσταση περίπου 10 kΩ ανάμεσα στο VCC και στο DATA. Ο τρίτος ακροδέκτης δεν συνδέεται πουθενά.
Προετοιμασία του Arduino IDE
- Εγκατέστησε το Arduino IDE από την επίσημη σελίδα του.
- Από τον Boards Manager πρόσθεσε την υποστήριξη ESP32 (το πακέτο της Espressif).
- Από τον Library Manager εγκατέστησε τις βιβλιοθήκες «DHT sensor library» και «Adafruit Unified Sensor» της Adafruit.
- Διάλεξε την πλακέτα «ESP32 Dev Module» και τη σωστή θύρα USB.
Ο κώδικας
Ο παρακάτω κώδικας συνδέεται στο WiFi σου, διαβάζει τον αισθητήρα και εμφανίζει τις τιμές σε μια σελίδα που ανανεώνεται κάθε 10 δευτερόλεπτα. Άλλαξε μόνο το όνομα και τον κωδικό του δικτύου σου.
#include <WiFi.h>
#include <WebServer.h>
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT22
const char* ssid = "ONOMA_WIFI";
const char* password = "KODIKOS_WIFI";
DHT dht(DHTPIN, DHTTYPE);
WebServer server(80);
void handleRoot() {
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) {
server.send(500, "text/plain", "Sfalma anagnwsis aisthitira");
return;
}
String html = "<!doctype html><html><head>";
html += "<meta charset='utf-8'>";
html += "<meta name='viewport' content='width=device-width,initial-scale=1'>";
html += "<meta http-equiv='refresh' content='10'>";
html += "<title>ESP32 Sensor</title></head><body>";
html += "<h1>Θερμοκρασία: " + String(t, 1) + " °C</h1>";
html += "<h1>Υγρασία: " + String(h, 0) + " %</h1>";
html += "</body></html>";
server.send(200, "text/html", html);
}
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("IP: ");
Serial.println(WiFi.localIP());
server.on("/", handleRoot);
server.begin();
}
void loop() {
server.handleClient();
}
Πώς το δοκιμάζεις
Ανέβασε τον κώδικα και άνοιξε τον Serial Monitor με ταχύτητα 115200. Όταν συνδεθεί η πλακέτα στο WiFi, θα εμφανίσει μια διεύθυνση IP, για παράδειγμα 192.168.1.50. Γράψε αυτή τη διεύθυνση στον browser του κινητού ή του υπολογιστή σου (πρέπει να είναι στο ίδιο δίκτυο) και θα δεις τις μετρήσεις. Αν θες σταθερή διεύθυνση, μπορείς να ορίσεις στο router σου δέσμευση IP για την πλακέτα.
Συχνά προβλήματα
Ο αισθητήρας δίνει σφάλμα ανάγνωσης
Έλεγξε πρώτα τις συνδέσεις και ότι το DATA είναι στο GPIO 4. Ο DHT22 δεν πρέπει να διαβάζεται πιο συχνά από μία φορά κάθε δύο δευτερόλεπτα, γι' αυτό η σελίδα ανανεώνεται ανά 10 δευτερόλεπτα.
Δεν συνδέεται στο WiFi
Το ESP32 υποστηρίζει δίκτυα 2,4 GHz. Αν το router σου έχει ξεχωριστό όνομα για το 5 GHz, χρησιμοποίησε το δίκτυο των 2,4 GHz. Έλεγξε και τα κεφαλαία και μικρά γράμματα στον κωδικό.
Η πλακέτα δεν εμφανίζεται ως θύρα
Συχνά φταίει το καλώδιο USB, που μπορεί να είναι μόνο για φόρτιση. Δοκίμασε άλλο καλώδιο που να υποστηρίζει δεδομένα.
Τι μπορείς να κάνεις στη συνέχεια
Όταν δουλέψει το βασικό έργο, υπάρχουν πολλές επεκτάσεις: μια μικρή οθόνη OLED για να βλέπεις τις τιμές χωρίς κινητό, αποστολή των μετρήσεων σε δικό σου server ή σε μια βάση δεδομένων, ή ειδοποίηση όταν η θερμοκρασία ξεπεράσει ένα όριο. Αν ήδη έχεις δικό σου VPS, διάβασε γιατί εγώ τρέχω τα πάντα σε ένα VPS των 5 €/μήνα, γιατί εκεί μπορείς να μαζεύεις και να εμφανίζεις τις μετρήσεις σου.
Συχνές ερωτήσεις (FAQ)
Χρειάζομαι εμπειρία στον προγραμματισμό;
Όχι. Ο κώδικας του οδηγού δουλεύει όπως είναι, αρκεί να βάλεις τα στοιχεία του WiFi σου. Οι βασικές γνώσεις σε C++ βοηθούν μόνο όταν θελήσεις να τον επεκτείνεις.
Μπορώ να χρησιμοποιήσω άλλον αισθητήρα;
Ναι. Ο DHT11 είναι φθηνότερος αλλά λιγότερο ακριβής, ενώ ο BME280 προσφέρει καλύτερη ακρίβεια και μετράει και ατμοσφαιρική πίεση, αλλά συνδέεται με άλλο τρόπο (I2C) και θέλει άλλη βιβλιοθήκη.
Μπορεί να λειτουργήσει με μπαταρία;
Μπορεί, αλλά η συνεχής σύνδεση στο WiFi καταναλώνει αρκετό ρεύμα. Για μπαταρία χρησιμοποιείται συνήθως η λειτουργία deep sleep, όπου η πλακέτα ξυπνάει κατά διαστήματα, στέλνει τη μέτρηση και ξανακοιμάται.
Είναι ασφαλές να το ανοίξω στο internet;
Δεν το προτείνω. Η απλή σελίδα του οδηγού δεν έχει καμία προστασία και προορίζεται μόνο για το τοπικό δίκτυο του σπιτιού σου.
Θέλεις κάτι πιο ολοκληρωμένο;
Αν θέλεις να μετατρέψεις μια ιδέα με ESP32 σε πραγματικό προϊόν, με δική σου θήκη τυπωμένη σε 3D, web εφαρμογή ή σύνδεση με server, μπορώ να βοηθήσω. Δες τις υπηρεσίες μου ή στείλε μου email στο iliaskdamianidis@gmail.com. Απαντάω μέσα σε 24 ώρες.
