ESP32_LoRa-Receiver

 avatar
unknown
c_cpp
10 months ago
1.7 kB
20
Indexable
#include <Arduino.h>
#include <SPI.h>
#include <LoRa.h>

// LoRa configuration (match transmitter)
#define LORA_SS        5
#define LORA_RST       14
#define LORA_DIO0      26
#define LORA_FREQUENCY 433E6

struct SensorPacket {
  uint32_t sequence;
  bool rain;
  bool float03m;
  bool float06m;
  bool float09m;
  float voltage;
  bool alarmState;
  bool warningLightState;
};

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

  LoRa.setPins(LORA_SS, LORA_RST, LORA_DIO0);
  if (!LoRa.begin(LORA_FREQUENCY)) {
    Serial.println("LoRa init failed. Check your connections.");
    while (true);
  }
  LoRa.setTxPower(14);
  LoRa.setSpreadingFactor(10);
  LoRa.setSignalBandwidth(125E3);
  LoRa.setCodingRate4(5);
  LoRa.enableCrc();
  Serial.println("LoRa Receiver Ready");
}

void loop() {
  int packetSize = LoRa.parsePacket();
  if (packetSize == sizeof(SensorPacket)) {
    SensorPacket packet;
    int i = 0;
    while (LoRa.available() && i < sizeof(SensorPacket)) {
      ((uint8_t*)&packet)[i++] = LoRa.read();
    }

    Serial.print("Seq: "); Serial.print(packet.sequence);
    Serial.print(" | Rain: "); Serial.print(packet.rain ? "YES" : "NO");
    Serial.print(" | 0.3m: "); Serial.print(packet.float03m ? "ON" : "OFF");
    Serial.print(" | 0.6m: "); Serial.print(packet.float06m ? "ON" : "OFF");
    Serial.print(" | 0.9m: "); Serial.print(packet.float09m ? "ON" : "OFF");
    Serial.print(" | Voltage: "); Serial.print(packet.voltage, 2);
    Serial.print("V | Alarm: "); Serial.print(packet.alarmState ? "ON" : "OFF");
    Serial.print(" | Warning Light: "); Serial.println(packet.warningLightState ? "ON" : "OFF");
  }
}
Editor is loading...
Leave a Comment