improvement: migrate from lora.h to radiolib
This commit is contained in:
parent
1bcb119cad
commit
4d23681935
|
|
@ -48,6 +48,7 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DTTGO_T_LORA32_V2_1
|
||||
-DHAS_SX127X
|
||||
-DHAS_SX1278
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
||||
[env:heltec-lora32-v2]
|
||||
|
|
@ -56,6 +57,7 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DHELTEC_V2
|
||||
-DHAS_SX127X
|
||||
-DHAS_SX1278
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
||||
[env:heltec_wifi_lora_32_V3]
|
||||
|
|
@ -65,6 +67,7 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DHELTEC_V3
|
||||
-DHAS_SX126X
|
||||
-DHAS_SX1262
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
||||
[env:ESP32_DIY_LoRa]
|
||||
|
|
@ -73,6 +76,7 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DESP32_DIY_LoRa
|
||||
-DHAS_SX127X
|
||||
-DHAS_SX1278
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
||||
[env:ESP32_DIY_1W_LoRa]
|
||||
|
|
@ -81,6 +85,7 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DESP32_DIY_1W_LoRa
|
||||
-DHAS_SX126X
|
||||
-DHAS_SX1268
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
||||
[env:ttgo-t-beam-v1_2]
|
||||
|
|
@ -89,6 +94,7 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DTTGO_T_Beam_V1_2
|
||||
-DHAS_SX127X
|
||||
-DHAS_SX1278
|
||||
-DHAS_AXP2101
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
||||
|
|
@ -98,6 +104,7 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DTTGO_T_Beam_V1_0
|
||||
-DHAS_SX127X
|
||||
-DHAS_SX1278
|
||||
-DHAS_AXP192
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
||||
|
|
@ -107,6 +114,7 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DTTGO_T_Beam_V1_0_SX1268
|
||||
-DHAS_SX126X
|
||||
-DHAS_SX1268
|
||||
-DHAS_AXP192
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
||||
|
|
@ -116,6 +124,7 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DTTGO_T_Beam_V1_2_SX1262
|
||||
-DHAS_SX126X
|
||||
-DHAS_SX1262
|
||||
-DHAS_AXP2101
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
||||
|
|
@ -125,6 +134,7 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DOE5HWN_MeshCom
|
||||
-DHAS_SX126X
|
||||
-DHAS_SX1268
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
||||
[env:heltec_wireless_stick]
|
||||
|
|
@ -134,6 +144,7 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DHELTEC_WS
|
||||
-DHAS_SX126X
|
||||
-DHAS_SX1262
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
||||
[env:heltec_ht-ct62]
|
||||
|
|
@ -143,4 +154,5 @@ build_flags =
|
|||
-Werror -Wall
|
||||
-DHELTEC_HTCT62
|
||||
-DHAS_SX126X
|
||||
-DHAS_SX1262
|
||||
-DELEGANTOTA_USE_ASYNC_WEBSERVER=1
|
||||
|
|
@ -1,5 +1,4 @@
|
|||
#include <RadioLib.h>
|
||||
#include <LoRa.h>
|
||||
#include <WiFi.h>
|
||||
#include "configuration.h"
|
||||
#include "aprs_is_utils.h"
|
||||
|
|
@ -10,107 +9,85 @@
|
|||
|
||||
extern Configuration Config;
|
||||
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_WS) || defined(TTGO_T_Beam_V1_2_SX1262) || defined(HELTEC_HTCT62)
|
||||
bool transmissionFlag = true;
|
||||
bool ignorePacket = false;
|
||||
bool operationDone = true;
|
||||
|
||||
#ifdef HAS_SX1262
|
||||
SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN);
|
||||
bool transmissionFlag = true;
|
||||
bool enableInterrupt = true;
|
||||
#endif
|
||||
#if defined(ESP32_DIY_1W_LoRa) || defined(TTGO_T_Beam_V1_0_SX1268) || defined(OE5HWN_MeshCom)
|
||||
|
||||
#ifdef HAS_SX1268
|
||||
SX1268 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN);
|
||||
bool transmissionFlag = true;
|
||||
bool enableInterrupt = true;
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SX1278
|
||||
SX1278 radio = new Module(RADIO_CS_PIN, RADIO_BUSY_PIN, RADIO_RST_PIN);
|
||||
#endif
|
||||
|
||||
int rssi, freqError;
|
||||
float snr;
|
||||
|
||||
|
||||
namespace LoRa_Utils {
|
||||
|
||||
void setFlag(void) {
|
||||
#ifdef HAS_SX126X
|
||||
transmissionFlag = true;
|
||||
#endif
|
||||
operationDone = true;
|
||||
}
|
||||
|
||||
void setup() {
|
||||
#ifdef HAS_SX127X
|
||||
SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_CS);
|
||||
LoRa.setPins(LORA_CS, LORA_RST, LORA_IRQ);
|
||||
long freq = Config.loramodule.rxFreq;
|
||||
if (!LoRa.begin(freq)) {
|
||||
Serial.println("Starting LoRa failed!");
|
||||
show_display("ERROR", "Starting LoRa failed!");
|
||||
while (true) {
|
||||
delay(1000);
|
||||
}
|
||||
}
|
||||
LoRa.setSpreadingFactor(Config.loramodule.spreadingFactor);
|
||||
LoRa.setSignalBandwidth(Config.loramodule.signalBandwidth);
|
||||
LoRa.setCodingRate4(Config.loramodule.codingRate4);
|
||||
LoRa.enableCrc();
|
||||
LoRa.setTxPower(Config.loramodule.power);
|
||||
Serial.print("init : LoRa Module ... done!");
|
||||
#endif
|
||||
#ifdef HAS_SX126X
|
||||
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
|
||||
float freq = (float)Config.loramodule.rxFreq / 1000000;
|
||||
int state = radio.begin(freq);
|
||||
if (state == RADIOLIB_ERR_NONE) {
|
||||
Serial.print("Initializing SX126X LoRa Module");
|
||||
}
|
||||
else {
|
||||
Serial.println("Starting LoRa failed!");
|
||||
Utils::println("Initializing LoRa Module");
|
||||
} else {
|
||||
Utils::println("Starting LoRa failed!");
|
||||
while (true);
|
||||
}
|
||||
#ifdef HAS_SX127X
|
||||
radio.setDio0Action(setFlag, RISING);
|
||||
#endif
|
||||
#ifdef HAS_SX126X
|
||||
if (!Config.lowPowerMode) {
|
||||
radio.setDio1Action(setFlag);
|
||||
} else {
|
||||
radio.setDIOMapping(1, RADIOLIB_SX126X_IRQ_RX_DONE);
|
||||
}
|
||||
#endif
|
||||
radio.setSpreadingFactor(Config.loramodule.spreadingFactor);
|
||||
float signalBandwidth = Config.loramodule.signalBandwidth/1000;
|
||||
radio.setBandwidth(signalBandwidth);
|
||||
radio.setCodingRate(Config.loramodule.codingRate4);
|
||||
radio.setCRC(true);
|
||||
#if defined(ESP32_DIY_1W_LoRa)
|
||||
|
||||
#if defined(ESP32_DIY_1W_LoRa)
|
||||
radio.setRfSwitchPins(RADIO_RXEN, RADIO_TXEN);
|
||||
#endif
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_WS) || defined(TTGO_T_Beam_V1_0_SX1268) || defined(TTGO_T_Beam_V1_2_SX1262)
|
||||
#endif
|
||||
|
||||
#if defined(HAS_SX127X) || ESP32_DIY_1W_LoRa
|
||||
state = radio.setOutputPower(Config.loramodule.power); // max value 20dB for 400M30S as it has Low Noise Amp
|
||||
#endif
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_WS) || defined(TTGO_T_Beam_V1_0_SX1268) || defined(TTGO_T_Beam_V1_2_SX1262)
|
||||
state = radio.setOutputPower(Config.loramodule.power + 2); // values available: 10, 17, 22 --> if 20 in tracker_conf.json it will be updated to 22.
|
||||
#endif
|
||||
#ifdef ESP32_DIY_1W_LoRa_GPS
|
||||
state = radio.setOutputPower(Config.loramodule.power); // max value 20 (when 20dB in setup 30dB in output as 400M30S has Low Noise Amp)
|
||||
#endif
|
||||
#endif
|
||||
if (state == RADIOLIB_ERR_NONE) {
|
||||
Serial.println("init : LoRa Module ... done!");
|
||||
Utils::println("init : LoRa Module ... done!");
|
||||
} else {
|
||||
Serial.println("Starting LoRa failed!");
|
||||
Utils::println("Starting LoRa failed!");
|
||||
while (true);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void changeFreqTx() {
|
||||
delay(500);
|
||||
#ifdef HAS_SX127X
|
||||
LoRa.setFrequency(Config.loramodule.txFreq);
|
||||
#endif
|
||||
#ifdef HAS_SX126X
|
||||
float freq = (float)Config.loramodule.txFreq / 1000000;
|
||||
radio.setFrequency(freq);
|
||||
#endif
|
||||
}
|
||||
|
||||
void changeFreqRx() {
|
||||
delay(500);
|
||||
#ifdef HAS_SX127X
|
||||
LoRa.setFrequency(Config.loramodule.rxFreq);
|
||||
#endif
|
||||
#ifdef HAS_SX126X
|
||||
float freq = (float)Config.loramodule.rxFreq / 1000000;
|
||||
radio.setFrequency(freq);
|
||||
#endif
|
||||
}
|
||||
|
||||
void sendNewPacket(const String& typeOfMessage, const String& newPacket) {
|
||||
|
|
@ -123,19 +100,6 @@ namespace LoRa_Utils {
|
|||
#ifdef HAS_INTERNAL_LED
|
||||
digitalWrite(internalLedPin, HIGH);
|
||||
#endif
|
||||
#ifdef HAS_SX127X
|
||||
LoRa.beginPacket();
|
||||
LoRa.write('<');
|
||||
if (typeOfMessage == "APRS") {
|
||||
LoRa.write(0xFF);
|
||||
} else if (typeOfMessage == "LoRa") {
|
||||
LoRa.write(0xF8);
|
||||
}
|
||||
LoRa.write(0x01);
|
||||
LoRa.write((const uint8_t*)newPacket.c_str(), newPacket.length());
|
||||
LoRa.endPacket();
|
||||
#endif
|
||||
#ifdef HAS_SX126X
|
||||
int state = radio.transmit("\x3c\xff\x01" + newPacket);
|
||||
if (state == RADIOLIB_ERR_NONE) {
|
||||
if (Config.syslog.active && WiFi.status() == WL_CONNECTED) {
|
||||
|
|
@ -143,22 +107,22 @@ namespace LoRa_Utils {
|
|||
}
|
||||
Utils::print("---> LoRa Packet Tx : ");
|
||||
Utils::println(newPacket);
|
||||
//Serial.println(F("success!"));
|
||||
} else if (state == RADIOLIB_ERR_PACKET_TOO_LONG) {
|
||||
Serial.println(F("too long!"));
|
||||
Utils::println(F("too long!"));
|
||||
} else if (state == RADIOLIB_ERR_TX_TIMEOUT) {
|
||||
Serial.println(F("timeout!"));
|
||||
Utils::println(F("timeout!"));
|
||||
} else {
|
||||
Serial.print(F("failed, code "));
|
||||
Serial.println(state);
|
||||
Utils::print(F("failed, code "));
|
||||
Utils::println(String(state));
|
||||
}
|
||||
#endif
|
||||
#ifdef HAS_INTERNAL_LED
|
||||
digitalWrite(internalLedPin, LOW);
|
||||
#endif
|
||||
if (Config.loramodule.txFreq != Config.loramodule.rxFreq) {
|
||||
changeFreqRx();
|
||||
}
|
||||
|
||||
ignorePacket = true;
|
||||
}
|
||||
|
||||
String generatePacket(String aprsisPacket) {
|
||||
|
|
@ -183,44 +147,23 @@ namespace LoRa_Utils {
|
|||
}
|
||||
|
||||
void startReceive() {
|
||||
#ifdef HAS_SX126X
|
||||
radio.startReceive();
|
||||
#endif
|
||||
}
|
||||
|
||||
String receivePacket() {
|
||||
String loraPacket = "";
|
||||
#ifdef HAS_SX127X
|
||||
int packetSize = LoRa.parsePacket();
|
||||
if (packetSize) {
|
||||
while (LoRa.available()) {
|
||||
int inChar = LoRa.read();
|
||||
loraPacket += (char)inChar;
|
||||
}
|
||||
rssi = LoRa.packetRssi();
|
||||
snr = LoRa.packetSnr();
|
||||
freqError = LoRa.packetFrequencyError();
|
||||
if ((loraPacket.indexOf("\0") != -1) || (loraPacket.indexOf("\r") != -1) || (loraPacket.indexOf("\n") != -1)) {
|
||||
loraPacket = packetSanitization(loraPacket);
|
||||
}
|
||||
if(!operationDone && !Config.lowPowerMode) return "";
|
||||
|
||||
if (loraPacket != "") {
|
||||
Utils::println("<--- LoRa Packet Rx : " + loraPacket);
|
||||
Utils::println("(RSSI:" + String(rssi) + " / SNR:" + String(snr) + " / FreqErr:" + String(freqError) + ")");
|
||||
if (Config.syslog.active && WiFi.status() == WL_CONNECTED && loraPacket != "") {
|
||||
SYSLOG_Utils::log("Rx", loraPacket, rssi, snr, freqError);
|
||||
}
|
||||
}
|
||||
}
|
||||
return loraPacket;
|
||||
#endif
|
||||
#ifdef HAS_SX126X
|
||||
if (transmissionFlag || Config.lowPowerMode) {
|
||||
transmissionFlag = false;
|
||||
operationDone = false;
|
||||
|
||||
String loraPacket = "";
|
||||
|
||||
if (transmissionFlag && !Config.lowPowerMode) {
|
||||
radio.startReceive();
|
||||
transmissionFlag = false;
|
||||
} else {
|
||||
int state = radio.readData(loraPacket);
|
||||
if (state == RADIOLIB_ERR_NONE) {
|
||||
if (loraPacket != "") {
|
||||
if (loraPacket != "" && !ignorePacket) {
|
||||
rssi = radio.getRSSI();
|
||||
snr = radio.getSNR();
|
||||
freqError = radio.getFrequencyError();
|
||||
|
|
@ -234,17 +177,25 @@ namespace LoRa_Utils {
|
|||
} else if (state == RADIOLIB_ERR_RX_TIMEOUT) {
|
||||
// timeout occurred while waiting for a packet
|
||||
} else if (state == RADIOLIB_ERR_CRC_MISMATCH) {
|
||||
Serial.println(F("CRC error!"));
|
||||
Utils::println(F("CRC error!"));
|
||||
if (Config.syslog.active && WiFi.status() == WL_CONNECTED) {
|
||||
SYSLOG_Utils::log("Rx", "RADIOLIB_ERR_CRC_MISMATCH", 0,0,0);
|
||||
}
|
||||
} else {
|
||||
Serial.print(F("failed, code "));
|
||||
Serial.println(state);
|
||||
Utils::print(F("failed, code "));
|
||||
Utils::println(String(state));
|
||||
}
|
||||
|
||||
if (ignorePacket) {
|
||||
Utils::println("<--- LoRa Packet Rx : " + loraPacket);
|
||||
Utils::println("Received own packet. Ignoring");
|
||||
|
||||
ignorePacket = false;
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
return loraPacket;
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -9,14 +9,13 @@
|
|||
|
||||
|
||||
// LORA MODULES
|
||||
#if defined(TTGO_T_LORA32_V2_1) || defined(HELTEC_V2) || defined(ESP32_DIY_LoRa)
|
||||
#undef LORA_RST
|
||||
#define LORA_SCK 5 // GPIO5 - SX1276 SCK
|
||||
#define LORA_MISO 19 // GPIO19 - SX1276 MISO
|
||||
#define LORA_MOSI 27 // GPIO27 - SX1276 MOSI
|
||||
#define LORA_CS 18 // GPIO18 - SX1276 CS ---> NSS
|
||||
#define LORA_RST 14 // GPIO14 - SX1276 RST
|
||||
#define LORA_IRQ 26 // GPIO26 - SX1276 IRQ ---->DIO0
|
||||
#if defined(TTGO_T_LORA32_V2_1) || defined(HELTEC_V2) || defined(ESP32_DIY_LoRa) || defined(TTGO_T_Beam_V1_2) || defined(TTGO_T_Beam_V1_0)
|
||||
#define RADIO_SCLK_PIN 5 // GPIO5 - SX1276 SCK
|
||||
#define RADIO_MISO_PIN 19 // GPIO19 - SX1276 MISO
|
||||
#define RADIO_MOSI_PIN 27 // GPIO27 - SX1276 MOSI
|
||||
#define RADIO_CS_PIN 18 // GPIO18 - SX1276 CS ---> NSS
|
||||
#define RADIO_RST_PIN 14 // GPIO14 - SX1276 RST
|
||||
#define RADIO_BUSY_PIN 26 // GPIO26 - SX1276 IRQ ---->DIO0
|
||||
#endif
|
||||
|
||||
#if defined(HELTEC_V3) || defined(HELTEC_WS)
|
||||
|
|
@ -120,15 +119,15 @@
|
|||
|
||||
|
||||
#ifdef ESP32_C3_DIY_LoRa
|
||||
#define OLED_SDA 8
|
||||
#define OLED_SCL 9
|
||||
#define OLED_RST 10
|
||||
#define LORA_SCK 4
|
||||
#define LORA_MISO 5
|
||||
#define LORA_MOSI 6
|
||||
#define LORA_CS 7
|
||||
#define LORA_RST 3
|
||||
#define LORA_IRQ 2
|
||||
#define OLED_SDA 8
|
||||
#define OLED_SCL 9
|
||||
#define OLED_RST 10
|
||||
#define RADIO_SCLK_PIN 4
|
||||
#define RADIO_MISO_PIN 5
|
||||
#define RADIO_MOSI_PIN 6
|
||||
#define RADIO_CS 7
|
||||
#define RADIO_RST_PIN 3
|
||||
#define RADIO_IRQ_PIN 2
|
||||
#endif
|
||||
|
||||
/* (Same pins for LILYGO LoRa32 and ESP32 Wroom Dev )
|
||||
|
|
|
|||
Loading…
Reference in New Issue