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

Al fine di ottenere i dati per il nostro gateway, useremo l'esempio da Parte 1 conversione in LoRa. Per fare questo, abbiamo bisogno di utilizzare il D1 Mini ESP32 con LoRa Sostituire. Le DHT11 ci colleghiamo al Pin GPIO22 e alla Relais con il perno GPIO23.

Schizzo:

 Tavola per Arduino IDE - TTGO LoRa32-OLED V1

#include <Arduino.H>
#include <DHTesp.H>
#include <Spi.H>
#include <CaienneLPP.H>
#include <Lora.H>
#include "SSD1306.h"

Impostazioni LoRa
# define Ss      18
# define Rst     14
# define DI0     26
# define Band    433175000

Intervallo di tempo (secondi)
# define TX_INTERVAL 10

Pin per DHT11
# define DHT_PIN 22

POin per relè
# define Relais  23

Mappatura dei canali
# define CHANNEL_TEMP 1
# define CHANNEL_HUM 2
# define CHANNEL_RELAIS 3
# define CHANNEL_STATUS 4


Variabili globali
uint8_t Daniel[6]; DEVICE ID - Indirizzo MAC
uint8_t relaisOn = 0; Stato del relè
TempAndUmidy Newvalues; Temperatura e umidità del DHT11


Struct LPP_BLOCK {   uint8_t digitare;   Int Val;
};

Buffer di ricezione per un massimo di 8 canali
LPP_BLOCK empBuf[8];


Buffer CayenneLPP formato dati.
CaienneLPP Lpp(64);

Istanza per i sensori di temperatura
DHTesp Dht;

OLED Display
SSD1306  Visualizzazione(0x3c (in modo 0x3c), 4, 15);

Funzione per inviare i dati al gateway
Vuoto sendLoRa() {     Int Cnt;     uint8_t Sze;     uint8_t Ch;     Elimina buffer     Lpp.Reimpostare();     Scrivere pacchetti di dati nel buffer     Lpp.addTemperature(CHANNEL_TEMP, Newvalues.Temperatura);     Lpp.addRelativeUmidy(CHANNEL_HUM, Newvalues.Umidità);     Lpp.addDigitalInput (addDigitalInput)(CHANNEL_STATUS,relaisOn);     Lpp.addDigitalOutput (informazioni in stato di idea(CHANNEL_RELAIS,0); Ciò è necessario per il gateway per creare un buffer per questo canale     Crea pacchetto LoRa     Se (Lora.beginPacket()){       Lora.Scrivere(Daniel,6); prima i dispositivi vID       Lora.Scrivere(Lpp.Getbuffer(),Lpp.getSize()); quindi i dati in formato LPP       Se (Lora.endPacket()) {         Seriale.println("Lora Trasmissione OK");       } Altro {         Seriale.println("Errore di attraversamento lora");       }     } Altro {       Seriale.println("Errore di attraversamento lora");     }     Seriale.Printf("%3i byte inviati",Lpp.getSize()+6);     ora stiamo aspettando la ricevuta     Cnt = 0;     Thu {       Sze = Lora.parsePacket();       Cnt++;       Ritardo(100);     } Mentre ((Sze == 0) && (Cnt < 100));     Se (Cnt >= 100) {       Seriale.println("Nessuna risposta dal gateway");     }     Altro     {       Seriale.Printf("Ricevi dati %i Byte"n,Sze);       Se (Sze >= 6){         Seriale.Printf("Ricevuta ottiene %i byte",Sze);         Cnt=0;         abbiamo letto il burst 6 byte e confrontarli con i dispositivi Id         Mentre ((Sze > 0) && (Cnt<6)) {           Sze--;           Daniel[Cnt++]==Lora.Leggere();         }         se cnt 6 è l'ID era corretto         Leggiamo il resto nel buffer di ricezione         Mentre (Sze > 0) {         ertses byte - canale          Ch = Lora.Leggere();         Sze--;         è il canale più piccolo 8 memorizziamo tipo e valori         Se (Ch < 8) {           empBuf[Ch].digitare = Lora.Leggere();           Sze--;           Interruttore (empBuf[Ch].digitare) {             Solo i tipi di azione sono importanti                           Caso LPP_DIGITAL_OUTPUT: empBuf[Ch].Val = Lora.Leggere();               Sze--;               Seriale.Printf("Ricezione di canale: %02x Tipo: %02x Valore% %i,Ch,empBuf[Ch].digitare,empBuf[Ch].Val);               Pausa;             Caso LPP_ANALOG_OUTPUT: empBuf[Ch].Val = Lora.Leggere() * 256 + Lora.Leggere();               Sze-=2;               Seriale.Printf("Ricezione di canale: %02x Tipo: %02x Valore% %i,Ch,empBuf[Ch].digitare,empBuf[Ch].Val);               Pausa;           }         }       }       Se (Cnt == 6) {         Seriale.println("Ricevuta OK");       } Altro {         Seriale.println("Risposta non valida");       }     }   }
}

Vuoto Installazione() {     Seriale.Iniziare(115200);     Seriale.println("Inizio");     PinMode (Modalità pin)(Relais,Output);     Spi.Iniziare(5,19,27,18);     esp_efuse_read_mac(Daniel);     Ripristino OLED     PinMode (Modalità pin)(16,Output);     digitalWrite (Scrittura digitale)(16, Basso);      Ritardo(50);     digitalWrite (Scrittura digitale)(16, alto);     e inizializzare     Visualizzazione.Init();     Visualizzazione.setFont (carattere di comando)(ArialMT_Plain_10);     Visualizzazione.Visualizzazione();         Lora.setPins(Ss,Rst,DI0);     Seriale.println("LoRa TRX");     Se (!Lora.Iniziare(Band)) {       Seriale.println("Avvio LoRa non riuscita!");     }     Seriale.println("LoRA Initial OK!");     Lora.enableCrc (attivato crisc)();     Dht.Installazione(DHT_PIN, DHTesp::DHT11);
}

Vuoto Ciclo() {     uint8_t* Buf;     uint8_t Len;      Int Cnt;     uint8_t Sze;     Newvalues = Dht.getTempAndHumidity();     sendLoRa();     digitalWrite (Scrittura digitale)(Relais,empBuf[3].Val);     relaisOn = empBuf[3].Val;     Se (Dht.Getstatus() == 0) {       Visualizzazione.Chiaro();       Visualizzazione.Coulisse(0, 0, "Temperatura": ");       Visualizzazione.Coulisse(80, 0, Stringa(Newvalues.Temperatura));       Visualizzazione.Coulisse(110, 0,"C");       Visualizzazione.Coulisse(0, 20, "Umidità: ");       Visualizzazione.Coulisse(80,20, Stringa(Newvalues.Umidità));       Visualizzazione.Coulisse(110,20, "%");       Visualizzazione.Coulisse(0, 40, "Relè :");       Se (relaisOn == 1) Visualizzazione.Coulisse(80, 40, "On"); Altro Visualizzazione.Coulisse(80, 40, "off");       Visualizzazione.Visualizzazione();       Ritardo(TX_INTERVAL * 1000);       }
}

Registrazione presso il gateway:

Dopo che lo schizzo viene caricato e il programma viene avviato, il circuito invia un pacchetto di dati tramite LoRa ogni 10 secondi. Se ora accediamo al sito web del gateway con il browser, dovremmo vedere l'indirizzo MAC del nostro circuito accanto al pulsante "Registra".

Ora possiamo dare un nome al dispositivo e quindi registrarlo. Il dispositivo viene visualizzato nell'elenco dei dispositivi del gateway.

Ora dovremmo anche vedere i canali nel Cru di Cayenne.

Ora possiamo aggiungere e configurare i widget alla dashboard come descritto nella Parte 1. Abbiamo anche bisogno di creare un widget con un pulsante per cambiare il relè.

Divertiti a creare.

 

DisplaysEsp-32Projekte für fortgeschritteneSensoren

2 commenti

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

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione