Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
În acest tutorial voi explica despre citirea conținutului de umiditate din sol folosind esp32 și apoi trimiterea valorilor în platforma cloud IoT Thingsio.
Pasul 1: COMPONENTE
Componente hardware:
1. placa de dezvoltare esp32
2. Senzor de sol
3. Sârme de jumper
Software:
1. IDE Arduino
2. Thingsio.ai
Pasul 2: CONEXIUNI
Senzor de umiditate a solului ---------------------- Esp32 Board
VCC --------------------------------------- 3V3
GND -------------------------------------- GND
A0 ---------------------------------------- VP
Pasul 3: CODIFICARE:
#include
#include
#include
int count = 0, i, m, j, k;
int t;
int sensor_pin = A0;
valoarea int;
////////////////////////////////////////// TOATE DECLARAȚIILE
pentru CLOUD ////////////////////////////////
const char * host = "api.thingsai.io"; // SAU gazdă =
devapi2.thethingscloud.com
const char * post_url = "/ devices / deviceData"; // SAU
/ api / v2 / thingscloud2 / _table / data_ac
const char * time_server =
„baas.thethingscloud.com”; // aceasta este pentru a converti marca de timp
const int httpPort = 80;
const int httpsPort = 443;
const char * server =
"api.thingsai.io"; // Adresa URL a serverului
timestamp char [10];
WiFiMulti WiFiMulti;
// Utilizați clasa WiFiClient pentru a crea conexiuni TCP
Client WiFiClient;
/////////////////////////////////////// TIMESTAMP-UL
Funcția CALCUL // /////////////////////////////////////////
int GiveMeTimestamp ()
{
nesemnat mult
timeout = milis ();
// client WiFiClient;
in timp ce
(client.available () == 0)
{
if (milis () -
expirare> 50000)
{
client.stop ();
retur 0;
}
}
while (client.available ())
{
Linia șirului =
client.readStringUntil ('\ r'); // indexOf () este o funcție pentru a căuta smthng, returnează -1 dacă nu este găsit
int pos =
line.indexOf ("\" timestamp / ""); // căutați "\" timestamp / "" de la începutul răspunsului și copiați toate datele după aceea, va fi marca dvs. de timp
if (pos> =
0)
{
int j = 0;pentru (j = 0; j <10; j ++)
{timestamp [j] = line [pos + 12 + j];
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
configurare nulă ()
{Serial.begin (115200);Serial.println ("Citirea din senzor …");
întârziere (2000);
// Începem prin
conectarea la o rețea WiFi
WiFiMulti.addAP ("Wifi_name", „Parola_Wifi”);
Serial.println ();
Serial.println ();Serial.print („Așteptați WiFi …”);while (WiFiMulti.run ()! = WL_CONNECTED) {Serial.print (".");
întârziere (500);
}Serial.println ("");Serial.println ("WiFi conectat");
Serial.println ( IP
abordare: );Serial.println (WiFi.localIP ());
întârziere (500);
}
bucla nulă ()
{
{
///////////////////////////////////////// TRIMITE CERERE ȘI
PRIMI RĂSPUNSUL /////////////////////////
valoare =
analogRead (senzor_pin);
// valoare =
hartă (valoare, 550, 0, 0, 100);Serial.print ("Mositure:");Serial.print (valoare);Serial.println ("%");întârziere (1000);Serial.print („conectarea la”);Serial.println (gazdă); // definită invers: - host = devapi2.thethingscloud.com sau 139.59.26.117
/////////////////////////////////////// COD TIMESTAMP SNIPPET
/////////////////////////
Serial.println ("inside get timestamp / n");
dacă
(! client.connect (time_server, {
întoarcere;
//*-*-*-*-*-*-*-*-*-*
}client.println ("GET / api / timestamp HTTP / 1.1"); // Ce face această parte, nu am primitclient.println („Gazdă: baas.thethingscloud.com”);client.println ("Cache-Control: no-cache");client.println ("Postman-Token: ea3c18c6-09ba-d049-ccf3-369a22a284b8");
client.println ();
GiveMeTimestamp ();
// va apela funcția care va primi răspunsul de timestamp de la server
Serial.println ("timestamp primit");
Serial.println (timestamp);Serial.println („în interiorul ThingsCloudPost”);
String PostValue =
"{" device_id / ": 61121695918, \" slave_id / ": 2";
PostValue =
PostValue + ", \" dts / ":" + timestamp;
PostValue =
PostValue + ", \" data / ": {" MOIST / ":" + valoare + "}" + "}";Serial.println (PostValue);
/ * creați o instanță WiFiClientSecure * /
Client WiFiClientSecure;Serial.println („Conectare la server prin portul 443”);
dacă
(! client.connect (server, 443)) {Serial.println ("Conexiunea a eșuat!");
} altceva {Serial.println ("Conectat la server!");
/ * creați
cerere */client.println ("POST / dispozitive / dispozitivDate HTTP / 1.1");client.println ("Gazdă: api.thingsai.io");//client.println("Connection: close ");client.println ("Content-Type: application / json");
client.println ( cache-control:
no-cache );client.println („Autorizație: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. IjVhMzBkZDFkN2QwYjNhNGQzODkwYzQ4OSI.kaY6OMj5cYlWNqC2KT5XA7_K6_7)client.print („Lungime conținut:”);
client.println (PostValue.length ());client.println ();client.println (PostValue);
//////////////////////////////////// PUBLICAREA datelor pe
cloud este gata și acum obțineți formularul de răspuns server cloud //////////////////
Serial.print („Se așteaptă răspunsul
);
in timp ce
(! client.available ()) {
întârziere (50);
//Serial.print (".");
}
/ * dacă datele sunt
disponibil apoi primiți și tipăriți la Terminal * /
in timp ce
(client.available ()) {
char c = client.read ();Serial.write (c);
}
/ * dacă
server deconectat, opriți clientul * /
dacă
(! client.connected ()) {Serial.println ();Serial.println („Server deconectat”);
client.stop ();
}
}
Serial.println ( //////////////////////// SFÂRȘITUL
///////////////////// );
întârziere (3000);
}
}
Pasul 4: IEȘIRE:
Se afișează ieșirea codului.
Pasul 5: GRAPH
Aceasta este reprezentarea grafică a valorilor care sunt citite de la senzor.
Pasul 6:
Iată videoclipul complet al proiectului. Mulțumesc.