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

Zodat we ook gegevens ontvangen voor onze gateway, zullen we het voorbeeld gebruiken Deel 1  converteren naar LoRa. Om dit te doen moeten we door een D1 Mini gaan ESP32 met LoRa  vervangen. Den DHT11  we verbinden met de pin GPIO22 en dat Estafette  met de pin GPIO23.

Schets:

 Bord voor Arduino IDE = TTGO LoRa32-OLED V1

# opnemen <Arduino.h>
# opnemen <DHTesp.h>
# opnemen <SPI.h>
# opnemen <CayenneLPP.h>
# opnemen <LoRa.h>
# opnemen "SSD1306.h"

// LoRa-instellingen
#define SS      18
#define RST     14
#define DI0     26
#define BAND    433175000

// tijdsinterval (seconden)
#define TX_INTERVAL 10

// pin voor DHT11
#define DHT_PIN 22

// POin voor relais
#define RELAIS  23

// kanaaltoewijzing
#define CHANNEL_TEMP 1
#define CHANNEL_HUM 2
#define CHANNEL_RELAIS 3
#define CHANNEL_STATUS 4


// Globale variabelen
uint8_t devid[6]; // Device ID = MAC-adres
uint8_t relayOn = 0; // Status van het relais
TempAndHumidity nieuwe waarden; // DHT11 temperatuur en vochtigheid


struct LPP_BLOCK {   uint8_t typ;   int val;
};

// Ontvang buffer voor maximaal 8 kanalen
LPP_BLOCK EmpBuf[8];


// Buffer CayenneLPP gegevensformaat.
CayenneLPP lpp(64);

// Exemplaar voor temperatuursensoren
DHTesp dht;

// OLED-weergave
SSD1306  weer te geven(0x3c, 4, 15);

// Functie om de gegevens naar de gateway te verzenden
nietig sendLoRa() {     int cnt;     uint8_t sze;     uint8_t ch;     // buffer wissen     lpp.reset();     // Schrijf gegevenspakketten in de buffer     lpp.addTemperature(CHANNEL_TEMP, nieuwe waarden.temperatuur);     lpp.addRelativeHumidity(CHANNEL_HUM, nieuwe waarden.luchtvochtigheid);     lpp.addDigitalInput(CHANNEL_STATUS,relayOn);     lpp.addDigitalOutput(CHANNEL_RELAIS,0); // Dit is nodig zodat de gateway een buffer voor dit kanaal maakt     // Maak een LoRa-pakket     als (LoRa.beginPakket()){       LoRa.schrijven(devid,6); // eerst de apparaten-vID       LoRa.schrijven(lpp.getBuffer(),lpp.getSize()); // vervolgens de gegevens in LPP-indeling       als (LoRa.endPacket()) {         Serie.println("Lora-overdracht OK");       } anders {         Serie.println("Lora verzendfouten");       }     } anders {       Serie.println("Lora verzendfouten");     }     Serie.printf("% 3i bytes verzonden \ n",lpp.getSize()+6);     // nu wachten we op het ontvangstbewijs     cnt = 0;     doen {       sze = LoRa.parsePacket();       cnt++;       vertraging(100);     } terwijl ((sze == 0) && (cnt < 100));     als (cnt >= 100) {       Serie.println("Geen reactie van de gateway");     }     anders     {       Serie.printf("Gegevens ontvangen% i bytes \ n",sze);       als (sze >= 6){         Serie.printf("Ontvangst ontvangen% i bytes \ n",sze);         cnt=0;         // we lezen de laatste 6 bytes en vergelijken deze met de apparaat-ID         terwijl ((sze > 0) && (cnt<6)) {           sze--;           devid[cnt++]==LoRa.lezen();         }         // if cnt = 6 was de ID correct         // We lezen de rest in de ontvangstbuffer         terwijl (sze > 0) {         // eerste byte = kanaal          ch = LoRa.lezen();         sze--;         // als het kanaal kleiner is dan 8, slaan we het type en de waarden op         als (ch < 8) {           EmpBuf[ch].typ = LoRa.lezen();           sze--;           schakelaar (EmpBuf[ch].typ) {             // Alleen actietypen zijn belangrijk             geval LPP_DIGITAL_OUTPUT: EmpBuf[ch].val = LoRa.lezen();               sze--;               Serie.printf("Kanaal ontvangen =% 02x type =% 02x waarde =% i \ n",ch,EmpBuf[ch].typ,EmpBuf[ch].val);               pauze;             geval LPP_ANALOG_OUTPUT: EmpBuf[ch].val = LoRa.lezen() * 256 + LoRa.lezen();               sze-=2;               Serie.printf("Kanaal ontvangen =% 02x type =% 02x waarde =% i \ n",ch,EmpBuf[ch].typ,EmpBuf[ch].val);               pauze;           }         }       }       als (cnt == 6) {         Serie.println("Bon OK");       } anders {         Serie.println("Ongeldig antwoord");       }     }   }
}

nietig instellen() {     Serie.beginnen(115200);     Serie.println("Beginnen");     pinMode(RELAIS,UITGANG);     SPI.beginnen(5,19,27,18);     esp_efuse_read_mac(devid);     // OLED-reset     pinMode(16,UITGANG);     digitalWrite(16, LAAG);      vertraging(50);     digitalWrite(16, HOOG);     // en initialiseren     weer te geven.in het();     Scherm.setFont(ArialMT_Plain_10);     Scherm.Scherm();         LoRa.setPins(SS,RST,DI0);     Serie.println("LoRa TRX");     als (!LoRa.beginnen(BAND)) {       Serie.println("Het starten van LoRa is mislukt!");     }     Serie.println("LoRa Aanvankelijk OK!");     LoRa.enableCrc();     dht.opstelling(DHT_PIN, DHTesp::DHT11);
}

nietig lus() {     uint8_t* buf;     uint8_t len;      int cnt;     uint8_t sze;     nieuwe waarden = dht.getTempAndHumidity();     sendLoRa();     digitalWrite(RELAIS,empBuf[3].val);     relaisOn = empBuf[3].val;     als (dht.getStatus() == 0) {       Scherm.Doorzichtig();       Scherm.drawString(0, 0, "Temperatur:");       Scherm.drawString(80, 0, Draad(nieuwe waarden.temperatuur));       Scherm.drawString(110, 0,"° C");       Scherm.drawString(0, 20, "Feuchtigkeit:");       Scherm.drawString(80,20, Draad(nieuwe waarden.vochtigheid));       Scherm.drawString(110,20, "%");       Scherm.drawString(0, 40, "Relais:");       als (relaisOn == 1) Scherm.drawString(80, 40, "ein"); anders Scherm.drawString(80, 40, "aus");       Scherm.Scherm();       vertraging(TX_INTERVAL * 1000);       }
}

Registrierung am Gateway:

Nachdem der Sketch hochgeladen wurde und das Programma gestart, sendet die Schaltung alle 10 Sekunden ein Datenpaket über LoRa. Wenn wir nun mit dem Browser die Gateway Webseite aufrufen, sollten wir die MAC-Adresse unserer Schaltung neben dem Knopf "Registrieren" zien.

Wir können nun dem Gerät einen Namen geben und es dann registrieren. Das Gerät wird in der Geräteliste des Gateways angezeigt.

Jetzt sollten wuch auch die Kanäle im Cayenne Dashboard zien.

Nun können wir wie im Teil 1 beschrieben die Widgets zum Dashboard hinzufügen und konfigurieren. Auch ein Widget mit einem Knopf zum Schalten des Relais müssen wir noch erstellen.

Viel Spaß beim Basteln.

 

DisplaysEsp-32Projekte für fortgeschritteneSensoren

2 Reacties

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

Laat een reactie achter

Alle opmerkingen worden voor publicatie gecontroleerd door een moderator

Aanbevolen blogberichten

  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