Table des matières:
- Étape 1: Composants requis
- Étape 2: Installation des bibliothèques requises
- Étape 3: passerelle ESP32 LoRa Thingspeak
- Étape 4: Nœud de capteur LoRa ESP32
- Étape 5: Configuration de Thingspeak
- Étape 6: Code de passerelle
- Étape 7: Code de nœud de capteur
- Étape 8: Surveiller les données sur Thingspeak Server
- Étape 9: Références
Vidéo: Passerelle ESP32 Lora Thingspeak avec nœud de capteur : 9 étapes
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
dans ce projet IoT, j'ai conçu la passerelle ESP32 LoRa et également le nœud de capteur ESP32 LoRa pour surveiller la lecture du capteur sans fil à des distances de quelques kilomètres. L'expéditeur lira les données d'humidité et de température à l'aide du capteur DHT11. Ensuite, il transmet les données via LoRa Radio. Les données sont reçues par le module récepteur. Le récepteur enverra ensuite les données à Thingspeak Server après un certain intervalle.
Étape 1: Composants requis
1. Carte ESP32 - 2
2. Module Lora SX1278/SX1276
3. Capteur de température d'humidité DHT11
4. Planche à pain
5. Connexion des fils de cavalier
Étape 2: Installation des bibliothèques requises
Nous devons d'abord installer différentes bibliothèques:
1. Bibliothèque DHT11
2. Bibliothèque LoRa
Étape 3: passerelle ESP32 LoRa Thingspeak
Voyons maintenant le circuit émetteur et récepteur pour construire ESP32 LoRa Gateway & Sensor Node. J'ai assemblé à la fois le circuit sur une planche à pain. Vous pouvez le faire sur PCB si vous le souhaitez.
Voici un circuit de passerelle ESP32 LoRa Module SX1278. Cette partie fonctionne comme un récepteur. Les données d'humidité et de température sont reçues à l'aide de LoRa Radio et téléchargées sur Thingspeak Server.
Étape 4: Nœud de capteur LoRa ESP32
Voici un circuit de nœud de capteur LoRa ESP32 avec capteur DHT11. Cette partie fonctionne comme un émetteur. Les données d'humidité et de température sont lues par le capteur d'humidité et de température DHT11 et transmises à l'aide de la radio LoRa.
Étape 5: Configuration de Thingspeak
Afin de surveiller les données du capteur sur Thingspeak Server, vous devez d'abord configurer Thingspeak. Pour configurer le serveur Thingspeak, visitez https://thingspeak.com/. Créez un compte ou connectez-vous simplement si vous avez créé le compte plus tôt. Créez ensuite une nouvelle chaîne avec les détails suivants.
Étape 6: Code de passerelle
#comprendre
//Bibliothèques pour LoRa #include #include //définir les broches utilisées par le module émetteur-récepteur LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 //433E6 pour l'Asie, 866E6 pour l'Europe, 915E6 pour l'Amérique du Nord // Remplacez par vos identifiants réseau String apiKey = "14K8UL2QEK8BTHN6"; // Entrez votre clé d'API d'écriture à partir de ThingSpeak const char *ssid = "Wifi SSID"; // remplacez par votre ssid wifi et votre clé wpa2 const char *password = "Password"; const char* server = "api.thingspeak.com"; Client WiFi; // Initialiser les variables pour obtenir et enregistrer les données LoRa int rssi; Chaîne loRaMessage; Température de la chaîne; Humidité des cordes; ID de lecture de chaîne; // Remplace l'espace réservé par les valeurs DHT String processor(const String& var){ //Serial.println(var); if(var == "TEMPERATURE") { retour température; } else if(var == "HUMIDITY") { return humidité; } else if (var == "RRSI") { return String(rssi); } return String(); } void setup() { Serial.begin(115200); compteur int; //configuration du module émetteur-récepteur LoRa LoRa.setPins(ss, rst, dio0); //configuration du module émetteur-récepteur LoRa while (!LoRa.begin(BAND) && counter < 10) { Serial.print("."); compteur++; retard (2000); } if (counter == 10) { // Incrémente l'ID de lecture à chaque nouvelle lecture Serial.println("Le démarrage de LoRa a échoué !"); } Serial.println("Initialisation LoRa OK!"); retard (2000); // Connectez-vous au réseau Wi-Fi avec le SSID et le mot de passe Serial.print("Connexion à "); Serial.println(ssid); WiFi.begin(ssid, mot de passe); while (WiFi.status() != WL_CONNECTED) { delay(2000); Serial.print("."); } // Imprimer l'adresse IP locale et démarrer le serveur Web Serial.println(""); Serial.println("WiFi connecté."); Serial.println("Adresse IP: "); Serial.println(WiFi.localIP()); } // Lire le paquet LoRa et obtenir les lectures du capteur void loop() { int packetSize = LoRa.parsePacket(); if (packetSize) { Serial.print("Lora paquet reçu: "); while (LoRa.available()) // Lire le paquet { String LoRaData = LoRa.readString(); Serial.print(LoRaData); int pos1 = LoRaData.indexOf('/'); int pos2 = LoRaData.indexOf('&'); readID = LoRaData.substring(0, pos1); // Obtenir l'ID de lecture température = LoRaData.substring(pos1 +1, pos2); // Obtenir la température humidité = LoRaData.substring(pos2+1, LoRaData.length()); // Récupère l'humidité } rssi = LoRa.packetRssi(); // Obtenir RSSI Serial.print(" avec RSSI "); Serial.println(rssi); } if (client.connect(server, 80)) // "184.106.153.149" ou api.thingspeak.com { String postStr = apiKey; postStr += "&field1="; postStr += String(readingID); postStr += "&field2="; postStr += String(température); postStr += "&field3="; postStr += String(humidité); postStr += "&field4="; postStr += String(rssi); postStr += "\r\n\r\n\r\n\r\n"; client.print("POST /mise à jour HTTP/1.1\n"); client.print("Hôte: api.thingspeak.com\n"); client.print("Connexion: fermer\n"); client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n"); client.print("Type de contenu: application/x-www-form-urlencoded\n"); client.print("Contenu-Longueur: "); client.print(postStr.length()); client.print("\n\n"); client.print(postStr); } //délai (30000); }
Étape 7: Code de nœud de capteur
#comprendre
#include //Bibliothèques pour LoRa #include "DHT.h" #define DHTPIN 4 //pin où le dht11 est connecté DHT dht(DHTPIN, DHT11); //définir les broches utilisées par le module émetteur-récepteur LoRa #define ss 5 #define rst 14 #define dio0 2 #define BAND 433E6 //433E6 pour l'Asie, 866E6 pour l'Europe, 915E6 pour l'Amérique du Nord //packet counter int readingID = 0; compteur entier = 0; Chaîne LoRaMessage = ""; température du flotteur = 0; flotteur humidité = 0; //Initialiser le module LoRa void startLoRA() { LoRa.setPins(ss, rst, dio0); //configuration du module émetteur-récepteur LoRa while (!LoRa.begin(BAND) && counter < 10) { Serial.print("."); compteur++; retard (500); } if (counter == 10) { // Incrémente readID à chaque nouvelle lecture readID++; Serial.println("Le démarrage de LoRa a échoué !"); } Serial.println("Initialisation LoRa OK!"); retard (2000); } void startDHT() { if (isnan(humidité) || isnan(temperature)) { Serial.println("Impossible de lire à partir du capteur DHT !"); revenir; } } void getReadings(){ humidité = dht.readHumidity(); température = dht.readTemperature(); Serial.print(F("Humidité: ")); Serial.print(humidité); Serial.print(F("% Température: ")); Serial.print(température); Serial.println(F("°C ")); } void sendReadings() { LoRaMessage = String(readingID) + "/" + String(temperature) + "&" + String(humidité); //Envoyer le paquet LoRa au récepteur LoRa.beginPacket(); LoRa.print(LoRaMessage); LoRa.endPacket(); Serial.print("Envoi du paquet: "); Serial.println(readingID); lectureID++; Serial.println(LoRaMessage); } void setup() { //initialiser Serial Monitor Serial.begin (115200); dht.begin(); startDHT(); startLoRA(); } boucle vide() { getReadings(); sendReadings(); retard (500); }
Étape 8: Surveiller les données sur Thingspeak Server
Une fois le code téléchargé, vous pouvez ouvrir le moniteur série sur le circuit de la passerelle et du nœud de capteur. Vous enverrez et recevrez des données si le code est correct. Vous pouvez maintenant visiter Thingspeak Private View. Là, vous pouvez voir que les données pour le numéro de paquet, la température, l'humidité et la passerelle sont téléchargées après l'intervalle de 15 secondes.
Étape 9: Références
1.
2.