HardwareAllTheThings/docs/protocols/lora.md

136 lines
2.4 KiB
Markdown

# LoRa
### LoRa with Arduino on 868.1MHZ
[arduino-LoRa](https://github.com/sandeepmistry/arduino-LoRa)\
use 868.1MHZ with SpreadFactor 10
```c
#include <SPI.h>
#include <LoRa.h>
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("LoRa Receiver");
if (!LoRa.begin(868.1E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
LoRa.setSpreadingFactor(10);
}
void onReceive(int packetSize) {
Serial.print("packet recv\n");
// read packet
for (int i = 0; i < packetSize; i++) {
Serial.print((char)LoRa.read());
}
}
void loop() {
LoRa.receive();
LoRa.onReceive(onReceive);
}
```
### Bruteforce all the EU frequencies and the SpreadFactor
```c
#include <SPI.h>
#include <LoRa.h>
float freq[5] = { 868.3E6, 868.5E6, 867.1E6, 867.5E6, 867.7E6, 867.9E6 };
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("LoRa Receiver");
if (!LoRa.begin(868.1E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
LoRa.setSpreadingFactor(10);
}
void onReceive(int packetSize) {
Serial.print("packet recv\n");
// read packet
for (int i = 0; i < packetSize; i++) {
Serial.print((char)LoRa.read());
}
}
void loop() {
LoRa.receive();
LoRa.onReceive(onReceive);
delay(5000);
While(1) {
int i;
for(i=0; i < 5 ; i++)
{
LoRa.setFrequency(freq[i]);
int j;
for(j=7; j <= 12; j++)
{
// loop on spreading factor is finish, set new freq
LoRa.setSpreadingFactor(i);
delay(5000);
}
}
}
}
```
### Display RSSI of the packet
> The Received Signal Strength Indication (RSSI) is the received signal power in milliwatts and is measured in dBm.
The RSSI is measured in dBm and is a negative value.\
The closer to 0 the better the signal is.
Typical LoRa RSSI values are:
* RSSI minimum = -120 dBm.
* If RSSI=-30dBm: signal is strong.
* If RSSI=-120dBm: signal is weak.
```c
#include <SPI.h>
#include <LoRa.h>
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("LoRa Receiver");
if (!LoRa.begin(867.1E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
LoRa.setSpreadingFactor(8);
}
void onReceive(int packetSize) {
Serial.print("packet recv\n");
int rssi = LoRa.packetRssi();
Serial.print(rssi);
}
void loop() {
LoRa.receive();
LoRa.onReceive(onReceive);
delay(1000);
}
```