ESP32 LoRa

Projetos de ESP32
Vinicius Cherobin
Novato
Mensagens: 1
Registrado em: 10/Set/2020, 01:01

ESP32 LoRa

Mensagem por Vinicius Cherobin » 10/Set/2020, 01:09

Olá, estou desenvolvendo um projeto envolvendo dois ESP32, um mestre e um escravo. O mestre irá ficar conectado em um botão, no qual quando for pressionado deve acionar um led e o escravo, quando o mestre acionar o led, deve acionar um outro led (que futuramente será um ar-condicionado).
Não estou conseguindo realizar a comunicação LoRa, os dois ESP32 não estão comunicando-se.
Estou colocando o código do Mestre e do Escravo abaixo. Aceito críticas e sugestões, obrigado!

MESTRE
//Definição dos pinos

#define SCK 5
#define MISO 19
#define MOSI 27
#define RST 14
#define SS 18
#define DI00 26

//inclusão das bibliotecas

#include <LoRa.h>
#include <SPI.h>
#include <Wire.h>

//Definição das variáveis

int LED_TESTE = 23;
int leituraled = 0;
int LED_INTERNO = 2;
int leiturainterno = 0;
int botao = 17;
int leitura_bot = 0;

bool retencao();
long int frequencia[1] = {915000000};
#define BAND 915E6 //Frequencia do radio - podemos utilizar ainda : 433E6, 868E6, 915E6
#define PABOOST true
String packet;
String packSize = "OK";

void setup ()
{
Serial.begin(115200);
pinMode(LED_TESTE, OUTPUT);
pinMode(LED_INTERNO, OUTPUT);
pinMode(botao, INPUT);

// Conecta ao Wi-Fi

//Inicia a comuniação serial LoRa
SPI.begin(SCK, MISO, MOSI, SS);
LoRa.setPins(SS, RST, DI00);

//inicializa o Lora com a frequencia específica

if (!LoRa.begin(frequencia[1]))
{
while (true);
}
}
void loop ()
{
leituraled = digitalRead(LED_TESTE);
leiturainterno = digitalRead(LED_INTERNO);
leitura_bot = digitalRead(botao);

if (leitura_bot == LOW)
{
digitalWrite(LED_TESTE, LOW); //MANTEM O LED DESLIGADO
digitalWrite(LED_INTERNO, LOW);
Serial.println(packet);
packet = "RELEDESLIGADO";
sendPacket();
}
else
{
packet = "";
sendPacket();
leituraled = digitalRead(LED_TESTE);
leiturainterno = digitalRead(LED_INTERNO);
}
}

//Comandos do Mestre

void esp()
{
if (retencao() == leituraled && retencao() == leiturainterno)
{
packet = "RELELIGADO";
digitalWrite(LED_TESTE, HIGH);
digitalWrite(LED_INTERNO, HIGH);
sendPacket();
}
else
{
packet = "RELEDESLIGADO";
digitalWrite(LED_TESTE, LOW);
digitalWrite(LED_INTERNO, LOW);
sendPacket();
}
}

bool retencao()
{
#define tempoDebounce 50 //(tempo para eliminar o efeito Bounce em ms)

bool estadoBotao;
static bool estadoBotAnt;
static bool estadoRet = true;
static unsigned long delayBotao = 0;

if ( (millis() - delayBotao) > tempoDebounce )
{
estadoBotao = digitalRead(botao);
if ( estadoBotao && (estadoBotao != estadoBotAnt) )
{
estadoRet = !estadoRet;
delayBotao = millis();
}
estadoBotAnt = estadoBotao;
}
return estadoRet;
}

//envia os pacotes para o acionamento
void sendPacket()
{
LoRa.beginPacket();
LoRa.print(packet);
LoRa.endPacket();
}

ESCRAVO

#include <SPI.h> //responsável pela comunicação serial
#include <LoRa.h> //responsável pela comunicação com o WIFI Lora
#include <Wire.h> //responsável pela comunicação i2c

// Definição dos pinos
#define SCK 5 // GPIO5 -- SX127x's SCK
#define MISO 19 // GPIO19 -- SX127x's MISO
#define MOSI 27 // GPIO27 -- SX127x's MOSI
#define SS 18 // GPIO18 -- SX127x's CS
#define RST 14 // GPIO14 -- SX127x's RESET
#define DI00 26 // GPIO26 -- SX127x's IRQ(Interrupt Request)

long int frequencia[1] = {915000000};
#define BAND 915E6
#define PABOOST true
int indice = 0;
unsigned int counter = 0;
String packSize;
String packet ;

//definicao das LED's

int LED_TESTE = 23;
int LED_INTERNO = 2;

void setup()
{
Serial.begin(115200);

pinMode(LED_TESTE, OUTPUT);
pinMode(LED_INTERNO, OUTPUT);

SPI.begin(SCK, MISO, MOSI, SS);
LoRa.setPins(SS, RST, DI00);

if (!LoRa.begin(frequencia[1]))
{
while (true);
}

LoRa.receive();
}

void loop()
{
int packetSize = LoRa.parsePacket();
if (packetSize)
{
readPacket(packetSize);
}
}

void readPacket(int packetSize)
{
packet = "";

for (int i = 0; i < packetSize; i++)
{
packet += (char) LoRa.read();
}

if (strstr(packet.c_str(), "RELELIGADO"))
{
digitalWrite(LED_TESTE, HIGH);
digitalWrite(LED_INTERNO, LOW);
}
else
{
digitalWrite(LED_TESTE, LOW);
digitalWrite(LED_INTERNO, HIGH);
}
}

Responder