From 6c8cbb9daaa2e98a3f52fc59c03bb4185692b9d2 Mon Sep 17 00:00:00 2001 From: Peter Buchegger Date: Wed, 18 Mar 2020 19:49:59 +0100 Subject: [PATCH] basic LoRa-iGate (RX only, no display) --- LoRa_APRS_iGate/LoRa_APRS_iGate.ino | 109 ++++++++++++++++++++++++++++ LoRa_APRS_iGate/settings.h | 25 +++++++ 2 files changed, 134 insertions(+) create mode 100644 LoRa_APRS_iGate/LoRa_APRS_iGate.ino create mode 100644 LoRa_APRS_iGate/settings.h diff --git a/LoRa_APRS_iGate/LoRa_APRS_iGate.ino b/LoRa_APRS_iGate/LoRa_APRS_iGate.ino new file mode 100644 index 0000000..0c7069d --- /dev/null +++ b/LoRa_APRS_iGate/LoRa_APRS_iGate.ino @@ -0,0 +1,109 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "settings.h" + +WiFiMulti WiFiMulti; +WiFiUDP ntpUDP; +NTPClient timeClient(ntpUDP, 60*60); +APRS_IS aprs_is(USER, PASS, TOOL, VERS); + +void setup() +{ + Serial.begin(115200); + delay(500); + Serial.println("[INFO] LoRa APRS iGate by OE5BPA (Peter Buchegger)"); + + WiFiMulti.addAP(WIFI_NAME, WIFI_KEY); + Serial.print("[INFO] Waiting for WiFi"); + while(WiFiMulti.run() != WL_CONNECTED) + { + Serial.print("."); + delay(500); + } + Serial.println(""); + Serial.println("[INFO] WiFi connected"); + Serial.print("[INFO] IP address: "); + Serial.println(WiFi.localIP()); + + Serial.println("[INFO] Set SPI pins!"); + SPI.begin(SCK, MISO, MOSI, SS); + LoRa.setPins(SS, RST, DIO0); + Serial.println("[INFO] Set LoRa pins!"); + + long freq = 433775000; + Serial.print("[INFO] frequency: "); + Serial.println(freq); + if (!LoRa.begin(freq)) { + Serial.println("[ERROR] Starting LoRa failed!"); + while (1); + } + LoRa.setSpreadingFactor(12); + LoRa.setSignalBandwidth(125E3); + LoRa.setCodingRate4(5); + LoRa.enableCrc(); + Serial.println("[INFO] LoRa init done!"); + + timeClient.begin(); + Serial.println("[INFO] NTP Client init done!"); + + delay(500); +} + +void loop() +{ + timeClient.update(); + if(WiFiMulti.run() != WL_CONNECTED) + { + Serial.println("[ERROR] WiFi not connected!"); + delay(1000); + return; + } + if(!aprs_is.connected()) + { + Serial.print("[INFO] connecting to server: "); + Serial.print(SERVER); + Serial.print(" on port: "); + Serial.println(PORT); + if(!aprs_is.connect(SERVER, PORT, FILTER)) + { + Serial.println("[ERROR] Connection failed."); + Serial.println("[INFO] Waiting 5 seconds before retrying..."); + delay(5000); + return; + } + Serial.println("[INFO] Connected to server!"); + } + if(aprs_is.available() > 0) + { + Serial.print("[" + timeClient.getFormattedTime() + "] "); + Serial.println(aprs_is.getMessage()); + } + int packetSize = LoRa.parsePacket(); + if(packetSize) + { + String str; + Serial.print("[" + timeClient.getFormattedTime() + "] "); + Serial.print(" Received packet '"); + while(LoRa.available()) + { + str += (char)LoRa.read(); + } + Serial.print(str); + Serial.print("' with RSSI "); + Serial.print(LoRa.packetRssi()); + Serial.print(" and SNR "); + Serial.println(LoRa.packetSnr()); + + /*APRSMessage msg; + msg.decode(str); + Serial.print("[INFO] "); + Serial.println(msg.toString());*/ + aprs_is.sendMessage(str); + } +} diff --git a/LoRa_APRS_iGate/settings.h b/LoRa_APRS_iGate/settings.h new file mode 100644 index 0000000..e484aaf --- /dev/null +++ b/LoRa_APRS_iGate/settings.h @@ -0,0 +1,25 @@ + +#ifndef SETTINGS_H_ +#define SETTINGS_H_ + +#define WIFI_NAME "" +#define WIFI_KEY "" + +#define USER "" +#define PASS "" +#define TOOL "ESP32-APRS-IS" +#define VERS "0.1" +#define FILTER "r/48.29/14.29/25" + +#define SERVER "austria.aprs2.net" +//#define SERVER "euro.aprs2.net" +#define PORT 14580 + +#define SCK 5 +#define MISO 19 +#define MOSI 27 +#define SS 18 +#define RST 14 +#define DIO0 26 + +#endif