Πίνακας περιεχομένων:
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Σε αυτό το σεμινάριο θα εξηγήσω σχετικά με την ανάγνωση της περιεκτικότητας σε υγρασία στο έδαφος χρησιμοποιώντας το esp32 και στη συνέχεια την αποστολή των τιμών στην πλατφόρμα clouds thingsio.ai IoT.
Βήμα 1: ΣΥΣΤΑΤΙΚΑ
Συστατικά υλικού:
1. πίνακας ανάπτυξης esp32
2. Αισθητήρας εδάφους
3. Jumper Wires
Λογισμικό:
1. Arduino IDE
2. Thingsio.ai
Βήμα 2: ΣΥΝΔΕΣΕΙΣ
Αισθητήρας υγρασίας εδάφους ---------------------- πίνακας esp32
VCC ------------------------------------------ 3V3
GND -------------------------------------- GND
A0 ------------------------------------------ VP
Βήμα 3: ΚΩΔΙΚΟΠΟΙΗΣΗ:
#περιλαμβάνω
#περιλαμβάνω
#περιλαμβάνω
int count = 0, i, m, j, k;
int t?
int sensor_pin = A0;
int τιμή?
//////////////////////////////////////// Όλες οι δηλώσεις
για ΝΕΦΩΣ ///////////////////////////////
const char* host = "api.thingsai.io"; // host κεντρικός υπολογιστής =
devapi2.thethingscloud.com
const char* post_url = "/devices/deviceData"; // Ή
/api/v2/thingscloud2/_table/data_ac
const char* time_server =
"baas.thethingscloud.com"; // αυτό είναι για τη μετατροπή χρονικής σήμανσης
const int httpPort = 80;
const int httpsPort = 443;
const char* διακομιστής =
"api.thingsai.io"; // URL διακομιστή
timestamp char [10]?
WiFiMulti WiFiMulti;
// Χρησιμοποιήστε την κλάση WiFiClient για να δημιουργήσετε συνδέσεις TCP
Πελάτης WiFiClient.
/////////////////////////////////////// TIMESTAMP
Λειτουργία ΥΠΟΛΟΓΙΣΜΟΣ ///////////////////////////////////////
int GiveMeTimestamp ()
{
ανυπόγραφη μακρά
timeout = millis ();
// πελάτης WiFiClient.
ενώ
(client.available () == 0)
{
εάν (millis () -
χρονικό όριο> 50000)
{
client.stop ();
επιστροφή 0?
}
}
while (client.available ())
{
Γραμμή συμβολοσειράς =
client.readStringUntil ('\ r'); // indexOf () είναι μια λειτουργία αναζήτησης για smthng, επιστρέφει -1 αν δεν βρεθεί
int pos =
line.indexOf ("\" χρονική σήμανση / ""); // αναζήτηση για "\" timestamp / "" από την αρχή της απόκρισης και αντιγράψτε όλα τα δεδομένα μετά από αυτό, θα είναι η χρονική σήμανση σας
εάν (pos> =
0)
{
int j = 0;για (j = 0; j <10; j ++)
{χρονική σήμανση [j] = γραμμή [pos + 12 + j];
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup ()
{Serial.begin (115200);Serial.println ("Ανάγνωση από τον αισθητήρα …");
καθυστέρηση (2000).
// Ξεκινάμε από
σύνδεση σε δίκτυο WiFi
WiFiMulti.addAP ("Wifi_name", "Wifi_Password");
Serial.println ();
Serial.println ();Serial.print ("Περιμένετε για WiFi …");ενώ (WiFiMulti.run ()! = WL_CONNECTED) {Serial.print (".");
καθυστέρηση (500)?
}Serial.println ("");Serial.println ("WiFi συνδεδεμένο");
Serial.println ( IP
διεύθυνση: );Serial.println (WiFi.localIP ());
καθυστέρηση (500)?
}
κενός βρόχος ()
{
{
/////////////////////////////////////// ΣΤΕΙΛΤΕ ΤΟ ΕΡΩΤΗΜΑ ΚΑΙ
ΛΑΒΕΤΕ ΤΗΝ ΑΠΑΝΤΗΣΗ ///////////////////////
τιμή =
analogRead (sensor_pin);
// τιμή =
χάρτης (τιμή, 550, 0, 0, 100);Serial.print ("Mositure:");Serial.print (τιμή);Serial.println ("%");καθυστέρηση (1000)?Serial.print ("σύνδεση με");Serial.println (οικοδεσπότης); // καθορισμένο ανάποδα:- host = devapi2.thethingscloud.com ή 139.59.26.117
/////////////////////////////////////// TIMESTAMP CODE SNIPPET
/////////////////////////
Serial.println ("εντός λήψης χρονικής σήμανσης / n");
αν
(! client.connect (διακομιστής χρόνου, {
ΕΠΙΣΤΡΟΦΗ;
//*-*-*-*-*-*-*-*-*-*
}client.println ("GET/api/timestamp HTTP/1.1"); // Τι κάνει αυτό το μέρος, δεν κατάλαβαclient.println ("Host: baas.thethingscloud.com");client.println ("Cache-Control: no-cache");client.println ("Postman-Token: ea3c18c6-09ba-d049-ccf3-369a22a284b8");
client.println ();
GiveMeTimestamp ();
// θα καλέσει τη συνάρτηση που θα λάβει την απόκριση χρονικής σήμανσης από τον διακομιστή
Serial.println ("λήξη χρονικής σήμανσης");
Serial.println (χρονική σήμανση);Serial.println ("μέσα στο ThingsCloudPost");
String PostValue =
"{" device_id / ": 61121695918, \" slave_id / ": 2";
PostValue =
PostValue + ", \" dts / ":" + χρονική σήμανση;
PostValue =
PostValue +", \" data / ": {" MOIST / ":" +value +"}" +"}";Serial.println (PostValue);
/ * δημιουργήστε ένα παράδειγμα WiFiClientSecure */
WiFiClientSecure πελάτης. Serial.println ("Σύνδεση με διακομιστή μέσω θύρας 443");
αν
(! client.connect (διακομιστής, 443)) {Serial.println ("Η σύνδεση απέτυχε!");
} αλλο {Serial.println ("Συνδέθηκε με διακομιστή!");
/* δημιουργία
αίτηση */client.println ("POST/devices/deviceData HTTP/1.1");client.println ("Host: api.thingsai.io");//client.println("Σύνδεση: κλείσιμο ");client.println ("Τύπος περιεχομένου: εφαρμογή/json");
client.println ( cache-control:
χωρίς κρυφή μνήμη ");client.println ("Άδεια: Ανώνυμες eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. IjVhMzBkZDFkN2QwYjNhNGQzODkwYzQ4OSI.kaY6OMj5cYlWNqC2PNTkXs9PKy6_m9tdW5AG7ajfVlY")?client.print ("Περιεχόμενο-Μήκος:");
client.println (PostValue.length ());client.println ();client.println (PostValue);
//////////////////////////////////// ΑΝΑΡΤΗΣΗ των δεδομένων στο
το cloud τελείωσε και τώρα λάβετε τη φόρμα απόκρισης cloud server ///////////////////
Serial.print ( Αναμονή απάντησης
);
ενώ
(! client.available ()) {
καθυστέρηση (50)?
//Serial.print (".");
}
/* εάν τα δεδομένα είναι
διαθέσιμο, στη συνέχεια λάβετε και εκτυπώστε στο τερματικό */
ενώ
(client.available ()) {
char c = client.read ();Serial.write (c);
}
/* εάν το
διακομιστής αποσυνδεδεμένος, διακόψτε τον πελάτη */
αν
(! client.connected ()) {Serial.println ();Serial.println ("Ο διακομιστής αποσυνδέθηκε");
client.stop ();
}
}
Serial.println ( ////////////////////// ΤΕΛΟΣ
///////////////////// );
καθυστέρηση (3000)?
}
}
Βήμα 4: ΕΞΟΔΟΣ:
Εμφανίζεται η έξοδος του κώδικα.
Βήμα 5: ΓΡΑΦΕΙΟ
Αυτή είναι η γραφική αναπαράσταση των τιμών που διαβάζονται από τον αισθητήρα.
Βήμα 6:
Ακολουθεί το πλήρες βίντεο του έργου. Σας ευχαριστώ.