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);
}
}