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
+101
View File
@@ -0,0 +1,101 @@
#include <SPI.h>
#include <LoRa.h>
#define SYNC_WORD 0xCE
#define SENDER_ID 0xAA
#define SELF_ID 0xAB
#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(SYNC_WORD);
LoRa.write(SELF_ID);
LoRa.write(msg.length());
LoRa.print(msg);
LoRa.endPacket(true);
}
bool receiveMessage(String& out) {
int packetSize = LoRa.parsePacket();
if (!packetSize) return false;
byte sync = LoRa.read();
byte sender = LoRa.read();
if (sync != SYNC_WORD || sender != SENDER_ID) {
LoRa.flush();
return false;
}
byte len = LoRa.read();
String data;
while (LoRa.available()) data += (char)LoRa.read();
if (data.length() != len) {
out = "ERR: LEN";
return true;
}
sendMessage("ACK");
out = data;
return true;
}
void printHelp() {
Serial.println("g Standort anfragen\nh Hilfe");
}
void handleCommandG(){
sendMessage("g");
unsigned long t0 = millis();
String answer;
while (millis() - t0 < 1000) {
if (receiveMessage(answer)) {
Serial.println(answer);
break;
}
delay(10);
}
if (millis() - t0 >= 1000) Serial.println("Timeout");
}
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) {
Serial.println("Konnte LoRa nicht initialisieren!\nBitte neustarten!");
delay(1000);
}
}
LoRa.enableCrc();
// LoRa.setSyncWord(SYNC_WORD); // this would have been simpler nevermind
}
void loop() {
if (Serial.available()) {
char cmd = Serial.read();
switch (cmd) {
case 'h':
printHelp();
break;
case 'g':
handleCommandG();
break;
default:
printHelp();
break;
}
}
// passive listening
String msg;
if (receiveMessage(msg)) Serial.printf("RX: %s\n", msg.c_str());
}