Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Šioje pamokoje aš paaiškinsiu, kaip skaityti drėgmės kiekį dirvožemyje naudojant esp32, o tada siunčiant vertes į thingsio.ai IoT debesų platformą.
1 žingsnis: KOMPONENTAI
Techninės įrangos komponentai:
1. esp32 kūrimo lenta
2. Dirvožemio jutiklis
3. Džemperio laidai
Programinė įranga:
1. „Arduino IDE“
2. Thingsio.ai
2 žingsnis: JUNGTYS
Dirvožemio drėgmės jutiklis ---------------------- esp32 Board
VCC --------------------------------------- 3V3
GND -------------------------------------- GND
A0 ---------------------------------------- VP
3 žingsnis: KODAVIMAS:
#įtraukti
#įtraukti
#įtraukti
int skaičius = 0, i, m, j, k;
int t;
int sensor_pin = A0;
int vertė;
//////////////////////////////////////////////////////// VISI DEKLARACIJOS
CLOUD //////////////////////////////
const char* host = "api.thingsai.io"; // ARBA šeimininkas =
devapi2.thethingscloud.com
const char* post_url = "/devices/deviceData"; // ARBA
/api/v2/thingscloud2/_table/data_ac
const char* laiko_serveris =
„baas.thethingscloud.com“; // tai yra laiko žymos konvertavimas
const int httpPort = 80;
const int httpsPort = 443;
const char* serveris =
"api.thingsai.io"; // Serverio URL
char laiko žyma [10];
WiFiMulti WiFiMulti;
// Naudokite „WiFiClient“klasę, kad sukurtumėte TCP ryšius
„WiFiClient“klientas;
////////////////////////////////////////////////////// TIMESTAMP
APSKAIČIAVIMO funkcija ///////////////////////////////////////
int GiveMeTimestamp ()
{
nepasirašytas ilgai
skirtasis laikas = milis ();
// „WiFiClient“klientas;
tuo tarpu
(client.available () == 0)
{
jei (milis () -
skirtasis laikas> 50000)
{
client.stop ();
grįžti 0;
}
}
o (client.available ())
{
Eilutės eilutė =
client.readStringUntil ('\ r'); // indexOf () yra funkcija ieškoti smthng, ji grąžina -1, jei nerasta
int pos =
line.indexOf ("\" laiko žyma / ""); // ieškokite "\" laiko žymos / "" nuo atsakymo pradžios ir nukopijuokite visus duomenis po to, tai bus jūsų laiko žyma
jei (poz> =
0)
{
int j = 0;(j = 0; j <10; j ++)
{laiko žyma [j] = eilutė [pos + 12 + j];
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
negaliojanti sąranka ()
{Serial.begin (115200);Serial.println („Skaitymas iš jutiklio …“);
vėlavimas (2000 m.);
// Pradedame nuo
prisijungimas prie „WiFi“tinklo
„WiFiMulti.addAP“(„Wifi_name“, „Wifi_Password“);
Serial.println ();
Serial.println ();Serial.print („Palaukite„ WiFi “…“);while (WiFiMulti.run ()! = WL_CONNECTED) {Serijinis atspaudas (".");
vėlavimas (500);
}Serial.println ("");Serial.println („WiFi prijungtas“);
Serial.println ( IP
adresas: );Serial.println (WiFi.localIP ());
vėlavimas (500);
}
tuštumos kilpa ()
{
{
////////////////////////
GAUTI ATSAKYMĄ ///////////////////////
vertė =
analogRead (sensor_pin);
// vertė =
žemėlapis (vertė, 550, 0, 0, 100);Serial.print („Mositure:“);Serial.print (vertė);Serial.println ("%");vėlavimas (1000);Serial.print ("prisijungimas prie");Serial.println (priegloba); // apibrėžta aukštyn kojomis:- šeimininkas = devapi2.thethingscloud.com arba 139.59.26.117
////////////////////////
/////////////////////////
Serial.println ("viduje gauti laiko žymę / n");
jei
(! client.connect (time_server, {
grįžti;
//*-*-*-*-*-*-*-*-*-*
}client.println ("GET/api/laiko žymė HTTP/1.1"); // Ką daro ši dalis, aš nesupratauclient.println ("Priimančioji: baas.thethingscloud.com");client.println („Cache-Control: no-cache“);client.println („Paštininkas-žetonas: ea3c18c6-09ba-d049-ccf3-369a22a284b8“);
klientas.println ();
GiveMeTimestamp ();
// jis iškvies funkciją, kuri iš serverio gaus laiko žymės atsakymą
Serial.println ("gauta laiko žyma");
Serial.println (laiko žyma);Serial.println ("viduje ThingsCloudPost");
Eilutė PostValue =
"{" device_id / ": 61121695918, \" slave_id / ": 2";
PostValue =
PostValue + ", \" dts / ":" + laiko žyma;
PostValue =
PostValue +", \" data / ": {" MOIST / ":" +value +"}" +"}";Serial.println (PostValue);
/ * sukurti „WiFiClientSecure“egzempliorių */
„WiFiClientSecure“klientas;Serial.println („Prisijunkite prie serverio per 443 prievadą“);
jei
(! client.connect (serveris, 443)) {Serial.println ("Nepavyko prisijungti!");
} Kitas {Serial.println ("Prisijungta prie serverio!");
/* sukurti
prašymas */client.println ("POST/devices/deviceData HTTP/1.1");client.println ("Priegloba: api.thingsai.io");//client.println("Connection: close ");client.println ("Turinio tipas: programa/json");
client.println ( cache-control:
be talpyklos “);client.println ("Autorizacija: nešėjas eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. IjVhMzBkZDFkN2QwYjNhNGQzODkwYzQ4OSI.kaY6OMj5cYlWNqs22k2kvkclient.print ("Turinio ilgis:");
client.println (PostValue.length ());klientas.println ();client.println („PostValue“);
//////////////////////////////////////////////// Skelbdami duomenis į
debesis baigtas ir dabar gaukite atsakymo formą iš debesies serverio //////////////////
Serial.print ( Laukiama atsakymo
);
tuo tarpu
(! client.available ()) {
vėlavimas (50);
//Serijinis atspaudas (".");
}
/* jei duomenys yra
galima gauti ir spausdinti į terminalą */
tuo tarpu
(client.available ()) {
char c = client.read ();Serial.write (c);
}
/* jei
serveris atjungtas, sustabdykite klientą */
jei
(! client.connected ()) {Serial.println ();Serial.println („Serveris atjungtas“);
client.stop ();
}
}
Serial.println ( ////////////////////// PABAIGA
///////////////////// );
vėlavimas (3000);
}
}
4 žingsnis: IŠVADA:
Rodomas kodo išvestis.
5 žingsnis: GRAFIKA
Tai grafinis reikšmių, nuskaitytų iš jutiklio, atvaizdavimas.
6 žingsnis:
Čia yra visas projekto vaizdo įrašas. Ačiū.