Arbeiten mit dem Cayenne Dashboard - LoRa Device (Teil 4) - AZ-Delivery

Afin d’obtenir des données pour notre passerelle, nous utiliserons l’exemple de Partie 1 conversion à LoRa. Pour ce faire, nous devons utiliser la D1 Mini ESP32 avec LoRa Remplacer. Lla DHT11 nous nous connectons à la Pin GPIO22 et à la Relais avec la broche GPIO23.

dessin:

 Conseil d’administration pour Arduino IDE - TTGO LoRa32-OLED V1

#include <Arduino.H (en)>
#include <DHTesp DHTesp.H (en)>
#include <Spi.H (en)>
#include <CayenneLPP CayenneLPP.H (en)>
#include <Lora.H (en)>
#include "SSD1306.h"

Paramètres LoRa
#define Ss      18
#define Tvd     14
#define DI0     26
#define Bande    433175000

Intervalle de temps (secondes)
#define TX_INTERVAL 10

Épingle pour DHT11
#define DHT_PIN 22

POin pour relais
#define Relais  23

Cartographie des canaux
#define CHANNEL_TEMP 1
#define CHANNEL_HUM 2
#define CHANNEL_RELAIS 3
#define CHANNEL_STATUS 4


Variables globales
uint8_t Daniel[6]; DEVICE ID - Adresse MAC
uint8_t relaisOn = 0; Statut du relais
TempAndHumidity newValues; Température et humidité de DHT11


Struct LPP_BLOCK {   uint8_t Type;   Int Val;
};

Recevoir un tampon pour un maximum de 8 canaux
LPP_BLOCK empBuf (empBuf)[8];


Format de données Tampon CayenneLPP.
CayenneLPP CayenneLPP Ppr(64);

Exemple pour les capteurs de température
DHTesp DHTesp Dht;

Affichage OLED
SSD1306  Affichage(0x3c, 4, 15);

Fonction d’envoyer les données à la passerelle
Vide sendLoRa() {     Int Cnt;     uint8_t Sze;     uint8_t Ch;     Supprimer le tampon     Ppr.Réinitialiser();     Rédiger des paquets de données dans le tampon     Ppr.addTemperature(CHANNEL_TEMP, newValues.Température);     Ppr.addRelativeHumidity(CHANNEL_HUM, newValues.Humidité);     Ppr.addDigitalInput(CHANNEL_STATUS,relaisOn);     Ppr.addDigitalOutput(CHANNEL_RELAIS,0); Ceci est nécessaire pour que la passerelle crée un tampon pour ce canal     Créer le package LoRa     Si (Lora.beginPacket()){       Lora.Écrire(Daniel,6); d’abord les appareils vID       Lora.Écrire(Ppr.Getbuffer Getbuffer(),Ppr.getSize()); puis les données en format LPP       Si (Lora.endPacket()) {         Série.println("Lora Transmission OK");       } Autre {         Série.println("Lora Crossing Error");       }     } Autre {       Série.println("Lora Crossing Error");     }     Série.Printf("%3i Octets envoyés",Ppr.getSize()+6);     maintenant nous attendons le reçu     Cnt = 0;     Jeu {       Sze = Lora.parsePacket (en)();       Cnt++;       Retard(100);     } Tandis que ((Sze == 0) && (Cnt < 100));     Si (Cnt >= 100) {       Série.println("Pas de réponse de la porte");     }     Autre     {       Série.Printf("Recevoir des données %i Bytes"n,Sze);       Si (Sze >= 6){         Série.Printf("Receipt get %i bytes",Sze);         Cnt=0;         nous lisons l’éclatement 6 octets et les comparer avec les appareils Id         Tandis que ((Sze > 0) && (Cnt<6)) {           Sze--;           Daniel[Cnt++]==Lora.Lire();         }         si cnt 6 est l’ID était correct         Nous lisons le reste dans le tampon de réception         Tandis que (Sze > 0) {         ertses byte - canal          Ch = Lora.Lire();         Sze--;         est le canal plus petit 8 nous stockons le type et les valeurs         Si (Ch < 8) {           empBuf (empBuf)[Ch].Type = Lora.Lire();           Sze--;           Interrupteur (empBuf (empBuf)[Ch].Type) {             Seuls les types d’action sont importants                           Cas LPP_DIGITAL_OUTPUT: empBuf (empBuf)[Ch].Val = Lora.Lire();               Sze--;               Série.Printf("Recevoir Channel -%%02x Type'%%02x Valeur%%i,Ch,empBuf (empBuf)[Ch].Type,empBuf (empBuf)[Ch].Val);               Pause;             Cas LPP_ANALOG_OUTPUT: empBuf (empBuf)[Ch].Val = Lora.Lire() * 256 + Lora.Lire();               Sze-=2;               Série.Printf("Recevoir Channel -%%02x Type'%%02x Valeur%%i,Ch,empBuf (empBuf)[Ch].Type,empBuf (empBuf)[Ch].Val);               Pause;           }         }       }       Si (Cnt == 6) {         Série.println("Receipt OK");       } Autre {         Série.println("Réponse invalide");       }     }   }
}

Vide Configuration() {     Série.Commencer(115200);     Série.println("Démarrage");     pinMode(Relais,Sortie);     Spi.Commencer(5,19,27,18);     esp_efuse_read_mac(Daniel);     Ininisalisation OLED     pinMode(16,Sortie);     digitalWrite (en)(16, Faible);      Retard(50);     digitalWrite (en)(16, Haute);     et initialiser     Affichage.Init();     Affichage.setFont(ArialMT_Plain_10);     Affichage.Affichage();         Lora.setPins setPins setPins setPin(Ss,Tvd,DI0);     Série.println("LoRa TRX");     Si (!Lora.Commencer(Bande)) {       Série.println("Démarrer LoRa a échoué!");     }     Série.println("LoRa initial OK!");     Lora.enableCrc();     Dht.Configuration(DHT_PIN, DHTesp DHTesp::DHT11);
}

Vide Boucle() {     uint8_t* Buf Buf;     uint8_t Len;      Int Cnt;     uint8_t Sze;     newValues = Dht.getTempAndHumidity (en)();     sendLoRa();     digitalWrite (en)(Relais,empBuf (empBuf)[3].Val);     relaisOn = empBuf (empBuf)[3].Val;     Si (Dht.Getstatus Getstatus() == 0) {       Affichage.Clair();       Affichage.Cordon(0, 0, "Température: ");       Affichage.Cordon(80, 0, String(newValues.Température));       Affichage.Cordon(110, 0,"C");       Affichage.Cordon(0, 20, "Humidité: ");       Affichage.Cordon(80,20, String(newValues.Humidité));       Affichage.Cordon(110,20, "%");       Affichage.Cordon(0, 40, "Relais :");       Si (relaisOn == 1) Affichage.Cordon(80, 40, "sur"); Autre Affichage.Cordon(80, 40, "off");       Affichage.Affichage();       Retard(TX_INTERVAL * 1000);       }
}

Inscription à la porte d’entrée :

Une fois l’esquisse téléchargée et le début du programme, le circuit envoie un paquet de données via LoRa toutes les 10 secondes. Si nous accédons maintenant au site Web de la passerelle avec le navigateur, nous devrions voir l’adresse MAC de notre circuit à côté du bouton « Enregistrer ».

Nous pouvons maintenant donner un nom à l’appareil, puis l’enregistrer. L’appareil apparaît dans la liste des périphériques de la passerelle.

Maintenant, nous devrions également voir les canaux dans le tableau de bord de Cayenne.

Maintenant, nous pouvons ajouter et configurer les widgets au tableau de bord tel que décrit dans la partie 1. Nous avons également besoin de créer un widget avec un bouton pour changer le relais.

Amusez-vous à l’artisanat.

 

DisplaysEsp-32Projekte für fortgeschritteneSensoren

2 commentaires

Andreas Wolter

Andreas Wolter

@Jens: ich empfehle Ihnen zuerst den Blogbeitrag, in dem es nur um den BME280 geht:
https://www.az-delivery.de/blogs/azdelivery-blog-fur-arduino-und-raspberry-pi/turchen-nr-11

Versuchen Sie zuerst, die Sensordaten auszulesen. Wenn das funktioniert, tauschen Sie die entsprechenden Zeilen im Sketch für dieses Projekt hier aus.

Grüße,
Andreas Wolter
AZ-Delivery Blog

Jens

Jens

Hallo. Ich würde gerne versuchen den BME280 zu verwenden. Leider habe ich noch nicht sooo viel Erfahrung. Kann mir hier jemand behilflich sein? Vielen lieben Dank

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Articles de blog recommandés

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery