Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
In deze tutorial ga ik uitleggen hoe het vochtgehalte in de bodem kan worden gelezen door esp32 te gebruiken en de waarden vervolgens naar het thingsio.ai IoT-cloudplatform te sturen.
Stap 1: COMPONENTEN
Hardware onderdelen:
1. esp32-ontwikkelbord
2. Bodemsensor:
3. Jumper-draden:
Software:
1. Arduino-IDE
2. Thingsio.ai
Stap 2: VERBINDINGEN
Bodemvochtsensor ----------------------esp32 Board
VCC---------------------------------------3V3
GND--------------------------------------GND
A0----------------------------------------VP
Stap 3: CODEREN:
#erbij betrekken
#erbij betrekken
#erbij betrekken
int telling=0, i, m, j, k;
int t;
int sensor_pin = A0;
int-waarde;
///////////////////////////////////////// ALLE VERKLARINGEN
voor CLOUD //////////////////////////////
const char* host = "api.thingsai.io"; // OF host =
devapi2.thethingscloud.com
const char* post_url = "/devices/deviceData"; // OF
/api/v2/thingscloud2/_table/data_ac
const char* time_server =
"baas.thethingscloud.com"; //dit is om de tijdstempel te converteren
const int httpPort = 80;
const int httpsPort = 443;
const char* server =
"api.thingsai.io"; // Server-URL
char tijdstempel [10];
WiFiMulti WiFiMulti;
// Gebruik de WiFiClient-klasse om TCP-verbindingen te maken
WiFiClient-client;
//////////////////////////////////////// TIJDSSTEMPEL
BEREKENING functie///////////////////////////////////////
int GiveMeTimestamp()
{
niet ondertekend lang
time-out = millis();
// WiFiClient-client;
terwijl
(klant.beschikbaar() == 0)
{
als (millis() -
time-out > 50000)
{
klant.stop();
retourneer 0;
}
}
terwijl (client.available())
{
String lijn =
client.readStringUntil('\r'); //indexOf() is een functie om te zoeken naar smthng, het retourneert -1 indien niet gevonden
int pos =
line.indexOf("\"tijdstempel\""); // zoek naar "\"timestamp\"" vanaf het begin van het antwoord kreeg en kopieer daarna alle gegevens, dit is uw tijdstempel
als (pos >=
0)
{
intj = 0;voor(j=0;j<10;j++)
{tijdstempel [j] = regel [pos + 12 + j];
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
ongeldige setup()
{Serieel.begin(115200);Serial.println ("Lezen van de sensor …");
vertraging (2000);
// We beginnen met
verbinding maken met een wifi-netwerk
WiFiMulti.addAP("Wifi_naam", "Wifi wachtwoord");
Serieel.println();
Serieel.println();Serial.print("Wacht op wifi… ");while(WiFiMulti.run() != WL_CONNECTED) {Serieel.print(".");
vertraging (500);
}Serieel.println("");Serial.println("WiFi verbonden");
Serial.println( IP
adres: );Serial.println(WiFi.localIP());
vertraging (500);
}
lege lus()
{
{
/////////////////////////////////////// VERZENDEN DE QUERY EN
ONTVANG HET ANTWOORD///////////////////////
waarde=
analoog lezen (sensor_pin);
// waarde =
kaart (waarde, 550, 0, 0, 100);Serial.print("Mositure: ");Serial.print(waarde);Serieel.println("%");vertraging (1000);Serial.print("verbinden met ");Serieel.println(host); // gedefinieerde bovenkant: - host = devapi2.thethingscloud.com of 139.59.26.117
///////////////////////////////////// TIJDSTEMPEL CODESNIPPET
/////////////////////////
Serial.println("inside get timestamp\n");
indien
(!client.connect(time_server, {
opbrengst;
//*-*-*-*-*-*-*-*-*-*
}client.println ("GET /api/timestamp HTTP/1.1"); // Wat doet dit deel, ik heb het niet begrepenclient.println("Host: baas.thethingscloud.com");client.println("Cache-Control: no-cache");client.println ("Postbode-token: ea3c18c6-09ba-d049-ccf3-369a22a284b8");
klant.println();
GeefMeTijdstempel();
// het zal de functie aanroepen die de tijdstempelreactie van de server zal krijgen
Serial.println("tijdstempel ontvangen");
Serial.println (tijdstempel);Serial.println ("inside ThingsCloudPost");
Tekenreeks PostWaarde =
"{"device_id\": 61121695918, \"slave_id\": 2";
Postwaarde =
PostValue + ", \"dts\":" +tijdstempel;
Postwaarde =
PostValue +", \"data\":{"MOIST\":" + value +"}"+"}";Serial.println(PostValue);
/* maak een instantie van WiFiClientSecure */
WiFiClientSecure-client;Serial.println("Verbind met server via poort 443");
indien
(!client.connect(server, 443)){Serial.println("Verbinding mislukt!");
} anders {Serial.println("Verbonden met server!");
/* maak
verzoek */client.println("POST /devices/deviceData HTTP/1.1");client.println("Host: api.thingsai.io");//client.println ("Verbinding: sluiten");client.println ("Inhoudstype: applicatie/json");
client.println( cache-controle:
geen cache");client.println("Autorisatie: Drager eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. IjVhMzBkZDFkN2QwYjNhNGQzODkwYzQ4OSI.kaY6OMj5cYlWNqC2PNTk6");client.print ("Inhoudslengte: ");
client.println(PostValue.length());klant.println();cliënt.println(PostValue);
//////////////////////////////////POST de gegevens op de
cloud is klaar en ontvang nu het antwoordformulier cloud server//////////////////
Serial.print( Wachten op antwoord
);
terwijl
(!client.beschikbaar()){
vertraging (50);
//Serieel.print(".");
}
/* als gegevens zijn
beschikbaar, ontvang en print naar Terminal */
terwijl
(klant.beschikbaar()) {
char c = cliënt.lezen();Serieel.schrijven(c);
}
/* als de
server verbroken, stop de client */
indien
(!client.verbonden()) {Serieel.println();Serial.println ("Server verbroken");
klant.stop();
}
}
Serial.println( ////////////////////// HET EINDE
///////////////////// );
vertraging (3000);
}
}
Stap 4: UITGANG:
De uitvoer van de code wordt weergegeven.
Stap 5: GRAFIEK
Dit is de grafische weergave van de waarden die uit de sensor worden gelezen.
Stap 6:
Hier is de volledige video van het project. Bedankt.