Files
LoRaGPSSenderReceiver/LoRaReceiver/LoRaReceiver.ino
T

102 lines
2.0 KiB
Arduino
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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());
}