Esp32lora heltec , recebe informaçoes erradas

ola a todos!
preciso de ajuda se possivel nesta situação: tenho 2 dispositivos esp32 lora heltec, onde o primeiro dispositivo esta lendo a temperatura de um sensor ds18b20, mostrando no display e serial print e tem uma saida a rele que ira acionar conforme logica do segundo dispositivo. ate ai tudo bem, ele envia a temperatura normal, porem quando ele vai receber a informção do segundo dispositivo que sera 0 ou 1 para acionar o rele, no serial print aparece o numero 2.
No segundo dispositivo, esta tudo ok. ele recebe a temperatura e conforme a logica no serial print aparece 0 ou 1.
vou passar o codigo dos dois dispositivos. espero que possam me ajudar.
codigo do 1 dispositivo:
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include “heltec.h”

#define ONE_WIRE_BUS 13
#define RELAY_PIN 23
#define BAND 915E6

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void LoRaData(float temperature, int relayState) {
Heltec.display->clear();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->setFont(ArialMT_Plain_10);

// Mostra a temperatura no display
Heltec.display->drawString(0, 0, “Temperatura: " + String(temperature) + " °C”);

// Mostra o estado do relé no display
if (relayState == 1) {
Heltec.display->drawString(0, 20, “Relé: Ligado”);
} else {
Heltec.display->drawString(0, 20, “Relé: Desligado”);
}

Heltec.display->display();

// Mostra as informações no Serial Monitor
Serial.print(“Temperatura: “);
Serial.print(temperature);
Serial.println(” °C”);

Serial.println(relayState);
}

void setup() {
Serial.begin(115200);
sensors.begin();
pinMode(RELAY_PIN, OUTPUT);

Serial.println(“Iniciando LoRa…”);
Heltec.begin(true, true, true, true, BAND);
Serial.println(“LoRa Inicializado.”);

Serial.println(“Iniciando Display…”);
Heltec.begin(true, true, true, true, BAND);
Heltec.display->init();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->setFont(ArialMT_Plain_10);
Heltec.display->display();
Serial.println(“Display Inicializado.”);
LoRa.receive();
}

void loop() {
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);

sendTemperature(temperature);
int relayState = receiveRelayState();

displayInfo(temperature, relayState);
LoRaData(temperature, relayState);

delay(1000);
}

void sendTemperature(float temperature) {
LoRa.beginPacket();
LoRa.print(temperature);
LoRa.endPacket();
}

int receiveRelayState() {
int relayState = 0; // Inicializa com o estado desligado

int packetSize = LoRa.parsePacket();
if (packetSize) {
String relayStateString = LoRa.readString(); // Lê a string recebida
relayState = relayStateString.toInt(); // Converte a string para inteiro
digitalWrite(RELAY_PIN, relayState); // Define o estado do relé

}
return relayState;
}

void displayInfo(float temperature, int relayState) {
Heltec.display->clear();
Heltec.display->setFont(ArialMT_Plain_10);
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->drawString(0, 0, “Temperatura: " + String(temperature) + " °C”);

// Mostra o estado do relé
if (relayState == 1) {
Heltec.display->drawString(0, 20, “Relé: Ligado”);
} else {
Heltec.display->drawString(0, 20, “Relé: Desligado”);
}

Heltec.display->display();
}

codigo do 2 dispositivo:
#define BLYNK_TEMPLATE_ID “”
#define BLYNK_TEMPLATE_NAME “”
#define BLYNK_AUTH_TOKEN “”
#define BLYNK_PRINT Serial

#include “heltec.h”
#include <Wire.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

#define BAND 915E6
char auth = “”;
char ssid = “”;
char pass = “”;

#define BUTTON_INC_PIN 34
#define BUTTON_DEC_PIN 35
#define RELAY_PIN 23

float offsetTemperature = 0.0;
String packet;
bool lastRelayState = false; // Estado do relé na última verificação

void LoRaData() {
Heltec.display->clear();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->setFont(ArialMT_Plain_10);
Heltec.display->drawString(0, 0, “Temperatura: " + packet + " ºC”);
Heltec.display->drawString(0, 20, “Set Point: " + String(offsetTemperature) + " ºC”);

// Exibe o estado do relé no display
if (lastRelayState) {
Heltec.display->drawString(0, 40, “Motor: Ligado”);
} else {
Heltec.display->drawString(0, 40, “Motor: Desligado”);
}

Heltec.display->display();
}

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

void setup() {
Serial.begin(115200);
Heltec.begin(true, true, true, true, BAND);
Heltec.display->init();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->setFont(ArialMT_Plain_10);
Heltec.display->drawString(0, 0, “Temperatura: " + packet + " ºC”);
Heltec.display->drawString(0, 20, “Set Point: " + String(offsetTemperature) + " ºC”);
Heltec.display->display();
Blynk.begin(auth, ssid, pass);

pinMode(RELAY_PIN, OUTPUT);
pinMode(BUTTON_INC_PIN, INPUT_PULLUP);
pinMode(BUTTON_DEC_PIN, INPUT_PULLUP);
LoRa.receive();
}

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

// Converte o valor da temperatura recebida para float
float temperature = packet.toFloat();
Blynk.virtualWrite(V1, temperature);
Serial.println(temperature);

// Atualiza o display com as informações
Heltec.display->clear();
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
Heltec.display->setFont(ArialMT_Plain_10);
Heltec.display->drawString(0, 0, “Temperatura: " + String(temperature) + " ºC”);
Heltec.display->drawString(0, 20, “Set Point: " + String(offsetTemperature) + " ºC”);
LoRaData(); // Chama a função para atualizar o estado do relé no display

// Verifica se a temperatura excede o set point e aciona o relé
bool currentRelayState = temperature > offsetTemperature;
if (currentRelayState != lastRelayState) { // Verifica se o estado do relé mudou
lastRelayState = currentRelayState;
sendRelayState(currentRelayState); // Envia o novo estado do relé para o transmissor
}

digitalWrite(RELAY_PIN, currentRelayState ? HIGH : LOW); // Controla o relé
Serial.println(currentRelayState);

// Verifica se os botões foram pressionados para ajustar o set point
if (digitalRead(BUTTON_INC_PIN) == LOW) {
offsetTemperature += 1.0;
Blynk.virtualWrite(V3, offsetTemperature);
delay(250); // debounce
}

if (digitalRead(BUTTON_DEC_PIN) == LOW) {
offsetTemperature -= 1.0;
Blynk.virtualWrite(V3, offsetTemperature);
delay(250); // debounce
}
}

BLYNK_WRITE(V3) {
offsetTemperature = param.asFloat();
}

void sendRelayState(bool currentRelayState) {
int state = currentRelayState ? 1 : 0; // Converte o estado do relé em um número inteiro
LoRa.beginPacket();
//LoRa.print(state);
if (state == 1) {
// Se o estado do relé for 1, envie o número inteiro 1
//LoRa.print(1);
LoRa.write(1);
} else {
// Se o estado do relé for 0, envie o número inteiro 0
// LoRa.print(0);
LoRa.write(0);
}
LoRa.endPacket();
}