Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
Dans ce didacticiel, je vais expliquer la lecture de la teneur en humidité du sol en utilisant esp32, puis en envoyant les valeurs à la plate-forme cloud Thingsio.ai IoT.
Étape 1: COMPOSANTS
Composants matériels:
1. carte de développement esp32
2. Capteur de sol
3. fils de cavalier
Logiciel:
1. IDE Arduino
2. Thingsio.ai
Étape 2: CONNEXIONS
Capteur d'humidité du sol ------------carte esp32
VCC----------------------------------------3V3
GND ---------------------------------------------------- GND
A0 ------------------------------------------ VP
Étape 3: CODAGE:
#comprendre
#comprendre
#comprendre
nombre int=0, i, m, j, k;
entier t;
int sensor_pin = A0;
valeur entière;
///////////////////////////////////// TOUTES LES DECLARATIONS
pour NUAGE /////////////////////////////
const char* hôte = "api.thingsai.io"; // OU hôte =
devapi2.thethingscloud.com
const char* post_url = "/devices/deviceData"; // OU
/api/v2/thingscloud2/_table/data_ac
const char* serveur_heure =
"baas.thethingscloud.com"; // c'est pour convertir l'horodatage
const int httpPort = 80;
const int httpsPort = 443;
const char* serveur =
"api.thingsai.io"; // URL du serveur
horodatage du char[10];
WiFiMulti WiFiMulti;
// Utiliser la classe WiFiClient pour créer des connexions TCP
Client WiFiClient;
//////////////////////////////////// HORAIRE
Fonction CALCUL /////////////////////////////////////
int GiveMeTimestamp()
{
long non signé
délai d'attente = millis();
// Client WiFiClient;
tandis que
(client.disponible() == 0)
{
si (millis() -
délai d'attente > 50000)
{
client.stop();
renvoie 0;
}
}
tandis que (client.available())
{
Ligne de chaîne =
client.readStringUntil('\r'); //indexOf() est une fonction pour rechercher smthng, il renvoie -1 s'il n'est pas trouvé
position int =
line.indexOf("\"horodatage\""); //recherchez "\"timestamp\"" à partir du début de la réponse et copiez toutes les données après cela, ce sera votre horodatage
si (pos >=
0)
{
entier j = 0;pour(j=0;j<10;j++)
{horodatage[j] = ligne[pos + 12 + j];
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
{Serial.begin(115200);Serial.println("Lecture depuis le capteur …");
retard (2000);
// On commence par
connexion à un réseau Wi-Fi
WiFiMulti.addAP("Nom_Wifi", "Mot de passe WiFi");
Serial.println();
Serial.println();Serial.print("Attendez le WiFi… ");while(WiFiMulti.run() != WL_CONNECTED) {Serial.print(".");
retard (500);
}Serial.println("");Serial.println("WiFi connecté");
Serial.println( IP
adresse: );Serial.println(WiFi.localIP());
retard (500);
}
boucle vide()
{
{
//////////////////////////////////// ENVOYER LA REQUÊTE ET
RECEVOIR LA RÉPONSE//////////////////////
valeur=
analogRead(sensor_pin);
// valeur =
map(valeur, 550, 0, 0, 100);Serial.print("Mositure: ");Serial.print(valeur);Serial.println("%");retard(1000);Serial.print("connexion à ");Serial.println(hôte); // à l'envers défini: - hôte = devapi2.thethingscloud.com ou 139.59.26.117
/////////////////////////////////// extrait de code d'horodatage
/////////////////////////
Serial.println("à l'intérieur obtenir l'horodatage\n");
si
(!client.connect(time_server, {
revenir;
//*-*-*-*-*-*-*-*-*-*
}client.println("GET /api/timestamp HTTP/1.1"); //Qu'est-ce que cette partie fait, je n'ai pas comprisclient.println("Hôte: baas.thethingscloud.com");client.println("Cache-Control: no-cache");client.println("Facteur-Jeton: ea3c18c6-09ba-d049-ccf3-369a22a284b8");
client.println();
GiveMeTimestamp();
//il appellera la fonction qui obtiendra la réponse d'horodatage du serveur
Serial.println("horodatage reçu");
Serial.println(horodatage);Serial.println("à l'intérieur de ThingsCloudPost");
Chaîne PostValue =
"{"device_id\": 61121695918, \"slave_id\": 2";
PostValue =
PostValue + ", \"dts\":" +timestamp;
PostValue =
PostValue +", \"data\":{"MOIST\":" + value +"}"+"}";Serial.println(PostValue);
/* créer une instance de WiFiClientSecure */
Client WiFiClientSecure;Serial.println("Connectez-vous au serveur via le port 443");
si
(!client.connect(serveur, 443)){Serial.println("La connexion a échoué !");
} autre {Serial.println("Connecté au serveur !");
/* créer
demander */client.println("POST /devices/deviceData HTTP/1.1");client.println("Hôte: api.thingsai.io");//client.println("Connexion: fermer");client.println("Type de contenu: application/json");
client.println( contrôle de cache:
pas de cache");client.println("Autorisation: Porteur eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9. IjVhMzBkZDFkN2QwYjNhNGQzODkwYzQ4OSI.kaY6OMj5cYlWNqC2PNTyfV6);client.print("Contenu-Longueur: ");
client.println(PostValue.length());client.println();client.println(PostValue);
////////////////////////////////PUBLICATION des données sur le
cloud est terminé et obtenez maintenant le formulaire de réponse serveur cloud /////////////////
Serial.print( En attente de réponse
);
tandis que
(!client.available()){
retard (50);
//Serial.print(".");
}
/* si les données sont
disponible puis recevoir et imprimer au Terminal */
tandis que
(client.disponible()) {
char c = client.read();Serial.write(c);
}
/* si la
serveur déconnecté, arrêter le client */
si
(!client.connected()) {Serial.println();Serial.println("Serveur déconnecté");
client.stop();
}
}
Serial.println( ///////////////////// LA FIN
///////////////////// );
retard(3000);
}
}
Étape 4: SORTIE:
La sortie du code est affichée.
Étape 5: GRAPHIQUE
Il s'agit de la représentation graphique des valeurs qui sont lues à partir du capteur.
Étape 6:
Voici la vidéo complète du projet. Merci.