Trabajar con el panel de Cayenne - Dispositivo LoRa (Parte 4)

Para obtener datos para nuestra puerta de enlace, utilizaremos el ejemplo de Parte 1 conversión a LoRa. Para ello, necesitamos usar el D1 Mini ESP32 con LoRa Reemplazar. el DHT11 nos conectamos al Pin GPIO22 y a la Relais con el pin GPIO23.

Bosquejo:

 Placa para Arduino IDE - TTGO LoRa32-OLED V1

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

Ajustes de LoRa
#define Ss      18
#define Rst     14
#define DI0     26
#define Banda    433175000

Intervalo de tiempo (segundos)
#define TX_INTERVAL 10

Pin para DHT11
#define DHT_PIN 22

POin para relés
#define Relais  23

Mapeo de canales
#define CHANNEL_TEMP 1
#define CHANNEL_HUM 2
#define CHANNEL_RELAIS 3
#define CHANNEL_STATUS 4


Variables globales
uint8_t Daniel[6]; ID DEL DISPOSITIVO - Dirección MAC
uint8_t relaisOn = 0; Estado del relé
TempAndHumidity newValues; Temperatura y humedad de DHT11


Estructura LPP_BLOCK {   uint8_t Tipo;   Int Val;
};

Búfer de recepción para un máximo de 8 canales
LPP_BLOCK empBuf[8];


Formato de datos CayenneLPP de búfer.
CayenneLPP Lpp(64);

Instancia de sensores de temperatura
DHTesp Dht;

Pantalla OLED
SSD1306  Monitor(0x3c, 4, 15);

Función para enviar los datos a la puerta de enlace
Vacío sendLoRa() {     Int Cnt;     uint8_t Sze;     uint8_t Ch;     Eliminar búfer     Lpp.Restablecer();     Escribir paquetes de datos en el búfer     Lpp.addTemperature(CHANNEL_TEMP, newValues.Temperatura);     Lpp.addRelativeHumidity(CHANNEL_HUM, newValues.Humedad);     Lpp.addDigitalInput(CHANNEL_STATUS,relaisOn);     Lpp.addDigitalOutput(CHANNEL_RELAIS,0); Esto es necesario para que el gateway cree un buffer para este canal     Crear paquete LoRa     Si (Lora.beginPacket()){       Lora.Escribir(Daniel,6); primero los dispositivos vID       Lora.Escribir(Lpp.Getbuffer(),Lpp.getSize()); entonces los datos en formato LPP       Si (Lora.endPacket()) {         Serial.println("Lora Transmisión OK");       } Más {         Serial.println("Error de cruce de Lora");       }     } Más {       Serial.println("Error de cruce de Lora");     }     Serial.Printf("%3i Bytes Enviados",Lpp.getSize()+6);     ahora estamos esperando el recibo     Cnt = 0;     Jue {       Sze = Lora.parsePacket();       Cnt++;       Retraso(100);     } Mientras ((Sze == 0) && (Cnt < 100));     Si (Cnt >= 100) {       Serial.println("No hay respuesta desde la puerta de enlace");     }     Más     {       Serial.Printf("Recibir datos %i Bytes"n,Sze);       Si (Sze >= 6){         Serial.Printf("Recibo obtener %i bytes",Sze);         Cnt=0;         leemos la ráfaga 6 bytes y los comparamos con los dispositivos Id         Mientras ((Sze > 0) && (Cnt<6)) {           Sze--;           Daniel[Cnt++]==Lora.Leer();         }         si cnt 6 es el ID era correcto         Leemos el resto en el búfer receptor         Mientras (Sze > 0) {         byte de ertses a canal          Ch = Lora.Leer();         Sze--;         es el canal más pequeño 8 almacenamos tipo y valores         Si (Ch < 8) {           empBuf[Ch].Tipo = Lora.Leer();           Sze--;           Interruptor (empBuf[Ch].Tipo) {             Solo los tipos de acción son importantes                           Caso LPP_DIGITAL_OUTPUT: empBuf[Ch].Val = Lora.Leer();               Sze--;               Serial.Printf("Canal de recepción%02x Tipo-%02x Valor-%i,Ch,empBuf[Ch].Tipo,empBuf[Ch].Val);               Romper;             Caso LPP_ANALOG_OUTPUT: empBuf[Ch].Val = Lora.Leer() * 256 + Lora.Leer();               Sze-=2;               Serial.Printf("Canal de recepción%02x Tipo-%02x Valor-%i,Ch,empBuf[Ch].Tipo,empBuf[Ch].Val);               Romper;           }         }       }       Si (Cnt == 6) {         Serial.println("Recibo bien");       } Más {         Serial.println("Respuesta no válida");       }     }   }
}

Vacío Configuración() {     Serial.Comenzar(115200);     Serial.println("Empezar");     pinMode(Relais,Salida);     Spi.Comenzar(5,19,27,18);     esp_efuse_read_mac(Daniel);     Restablecimiento de OLED     pinMode(16,Salida);     digitalWrite(16, Bajo);      Retraso(50);     digitalWrite(16, Alto);     e inicializar     Monitor.Init();     Monitor.Setfont(ArialMT_Plain_10);     Monitor.Monitor();         Lora.setPins(Ss,Rst,DI0);     Serial.println("LoRa TRX");     Si (!Lora.Comenzar(Banda)) {       Serial.println("Comenzando LoRa falló!");     }     Serial.println("LoRa inicial ok!");     Lora.enableCrc();     Dht.Configuración(DHT_PIN, DHTesp::DHT11);
}

Vacío Bucle() {     uint8_t* Buf;     uint8_t Len;      Int Cnt;     uint8_t Sze;     newValues = Dht.getTempAndHumidity();     sendLoRa();     digitalWrite(Relais,empBuf[3].Val);     relaisOn = empBuf[3].Val;     Si (Dht.Getstatus() == 0) {       Monitor.Claro();       Monitor.Lazo(0, 0, "Temperatura: ");       Monitor.Lazo(80, 0, Cadena(newValues.Temperatura));       Monitor.Lazo(110, 0,"C");       Monitor.Lazo(0, 20, "Humedad: ");       Monitor.Lazo(80,20, Cadena(newValues.Humedad));       Monitor.Lazo(110,20, "%");       Monitor.Lazo(0, 40, "Relé :");       Si (relaisOn == 1) Monitor.Lazo(80, 40, "en"); Más Monitor.Lazo(80, 40, "Muy buena");       Monitor.Monitor();       Retraso(TX_INTERVAL * 1000);       }
}

Registro en la puerta de enlace:

Después de cargar el boceto y iniciar el programa, el circuito envía un paquete de datos a través de LoRa cada 10 segundos. Si ahora accedemos al sitio web de la puerta de enlace con el navegador, deberíamos ver la dirección MAC de nuestro circuito junto al botón "Registrarse".

Ahora podemos asignar un nombre al dispositivo y luego registrarlo. El dispositivo aparece en la lista de dispositivos de la puerta de enlace.

Ahora también deberíamos ver los canales en el panel de Cayenne.

Ahora podemos agregar y configurar los widgets al panel como se describe en la Parte 1. También necesitamos crear un widget con un botón para cambiar el relé.

Diviértete haciendo manualidades.

 

DisplaysEsp-32Projekte für fortgeschritteneSensoren

Deja un comentario

Todos los comentarios son moderados antes de ser publicados