Initial push - gps needs to be implemented in sender

This commit is contained in:
Ano-sys
2025-07-15 16:29:24 +02:00
commit 63e701c446
2 changed files with 190 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
#include <SPI.h>
#include <LoRa.h>
#define SYNC_WORD 0xCE
#define DEST_ID 0xAB // receiver
#define SELF_ID 0xAA // sender
#define LORA_SCK 5
#define LORA_MISO 19
#define LORA_MOSI 27
#define LORA_CS 18
#define LORA_RST 23
#define LORA_IRQ 26
#define LORA_FREQ 868E6
void sendMessage(const String& msg) {
LoRa.beginPacket();
LoRa.write(DEST_ID);
LoRa.write(SELF_ID);
LoRa.write(msg.length());
LoRa.print(msg);
LoRa.endPacket(true);
}
bool waitForPacket(unsigned long timeout_ms) {
unsigned long t0 = millis();
while (millis() - t0 < timeout_ms) {
if (LoRa.parsePacket()) return true;
delay(5);
}
return false; // Timeout
}
bool getPacket(String& payload, byte& sender) {
int size = LoRa.parsePacket();
if (!size) return false;
byte dest = LoRa.read();
sender = LoRa.read();
byte len = LoRa.read();
if (dest != SELF_ID && dest != 0xFF) {
LoRa.flush();
return false;
}
while (LoRa.available()) payload += (char)LoRa.read();
return (payload.length() == len);
}
bool waitForAck(unsigned long timeout_ms = 1000) {
if (!waitForPacket(timeout_ms)) return false;
String payload;
byte snd;
if (!getPacket(payload, snd)) return false;
return (snd == DEST_ID && payload == "ACK");
}
String readGpsLine() {
return "48.12345,11.56789";
}
void setup() {
Serial.begin(115200);
SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_CS);
LoRa.setPins(LORA_CS, LORA_RST, LORA_IRQ);
if (!LoRa.begin(LORA_FREQ))
while (true)
;
LoRa.setSyncWord(SYNC_WORD);
LoRa.enableCrc();
}
void loop() {
if (waitForPacket(10)) {
String cmd;
byte snd;
if (!getPacket(cmd, snd)) return;
if (snd == DEST_ID && cmd == "g") {
String gps = readGpsLine();
sendMessage(gps);
if (!waitForAck()) Serial.println("ACK fehlte!");
}
}
}