Last active
June 16, 2021 05:35
-
-
Save teezzan/5ff7605a783efc7d0a3d7dcaa945cb03 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Libraries for LoRa | |
#include <SPI.h> | |
#include <LoRa.h> | |
//Libraries for OLED Display | |
#include <Wire.h> | |
#include <Adafruit_GFX.h> | |
#include <Adafruit_SSD1306.h> | |
//define the pins used by the LoRa transceiver module | |
#define SCK 5 | |
#define MISO 19 | |
#define MOSI 27 | |
#define SS 18 | |
#define RST 14 | |
#define DIO0 26 | |
//433E6 for Asia | |
//866E6 for Europe | |
//915E6 for North America | |
#define BAND 866E6 | |
//OLED pins | |
#define OLED_SDA 4 | |
#define OLED_SCL 15 | |
#define OLED_RST 16 | |
#define SCREEN_WIDTH 128 // OLED display width, in pixels | |
#define SCREEN_HEIGHT 64 // OLED display height, in pixels | |
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RST); | |
String LoRaData; | |
String ID =1; | |
void setup() { | |
//initialize Serial Monitor | |
Serial.begin(115200); | |
//reset OLED display via software | |
pinMode(OLED_RST, OUTPUT); | |
digitalWrite(OLED_RST, LOW); | |
delay(20); | |
digitalWrite(OLED_RST, HIGH); | |
//initialize OLED | |
Wire.begin(OLED_SDA, OLED_SCL); | |
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c, false, false)) { // Address 0x3C for 128x32 | |
Serial.println(F("SSD1306 allocation failed")); | |
for(;;); // Don't proceed, loop forever | |
} | |
display.clearDisplay(); | |
display.setTextColor(WHITE); | |
display.setTextSize(1); | |
display.setCursor(0,0); | |
display.print("LORA RECEIVER "); | |
display.display(); | |
Serial.println("LoRa Receiver Test"); | |
//SPI LoRa pins | |
SPI.begin(SCK, MISO, MOSI, SS); | |
//setup LoRa transceiver module | |
LoRa.setPins(SS, RST, DIO0); | |
if (!LoRa.begin(BAND)) { | |
Serial.println("Starting LoRa failed!"); | |
while (1); | |
} | |
Serial.println("LoRa Initializing OK!"); | |
display.setCursor(0,10); | |
display.println("LoRa Initializing OK!"); | |
display.display(); | |
} | |
void rec_loop() { | |
//try to parse packet | |
int packetSize = LoRa.parsePacket(); | |
if (packetSize) { | |
//received a packet | |
Serial.print("Received packet "); | |
//read packet | |
while (LoRa.available()) { | |
LoRaData = LoRa.readString(); | |
Serial.print(LoRaData); | |
} | |
int index = LoRaData.indexOf(" "); | |
String id = LoRaData.substring(0,index); | |
if (id != ID){ | |
//Retransmission enabled | |
LoRa.beginPacket(); | |
LoRa.print(LoRaData); | |
LoRa.endPacket(); | |
int rssi = LoRa.packetRssi(); | |
Serial.print(" with RSSI "); | |
Serial.println(rssi); | |
// Dsiplay information | |
display.clearDisplay(); | |
display.setCursor(0,0); | |
display.print("LORA Retransmit"); | |
display.setCursor(0,20); | |
display.print("Received packet:"); | |
display.setCursor(0,30); | |
display.print(LoRaData); | |
display.setCursor(0,40); | |
display.print("RSSI:"); | |
display.setCursor(30,40); | |
display.print(rssi); | |
display.display(); | |
} | |
else { | |
//print RSSI of packet | |
int rssi = LoRa.packetRssi(); | |
Serial.print(" with RSSI "); | |
Serial.println(rssi); | |
// Dsiplay information | |
display.clearDisplay(); | |
display.setCursor(0,0); | |
display.print("LORA RECEIVER"); | |
display.setCursor(0,20); | |
display.print("Received packet:"); | |
display.setCursor(0,30); | |
display.print(LoRaData); | |
display.setCursor(0,40); | |
display.print("RSSI:"); | |
display.setCursor(30,40); | |
display.print(rssi); | |
display.display(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment