SX127x - Added examples for CAD and LoRa settings
This commit is contained in:
parent
3b51c3b661
commit
79fc6cd9f5
2 changed files with 209 additions and 0 deletions
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* KiteLib SX127x Channel Activity Detection Example
|
||||
*
|
||||
* This example scans the current LoRa channel using SX1278 LoRa radio module
|
||||
* and detects valid LoRa preambles. Preamble is the first part of LoRa transmission,
|
||||
* so this can be used to check if the LoRa channel is free,
|
||||
* or if you should start receiving a message.
|
||||
*
|
||||
* Other modules from SX127x family can also be used.
|
||||
* SX1272 lora = Kite.ModuleA;
|
||||
* SX1273 lora = Kite.ModuleA;
|
||||
* SX1276 lora = Kite.ModuleA;
|
||||
* SX1277 lora = Kite.ModuleA;
|
||||
* SX1279 lora = Kite.ModuleA;
|
||||
*/
|
||||
|
||||
// include the library
|
||||
#include <KiteLib.h>
|
||||
|
||||
// SX1278 module is in slot A on the shield
|
||||
SX1278 lora = Kite.ModuleA;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
|
||||
// initialize SX1278 with default settings
|
||||
Serial.print(F("[SX1278] Initializing ... "));
|
||||
// carrier frequency: 434.0 MHz
|
||||
// bandwidth: 125.0 kHz
|
||||
// spreading factor: 9
|
||||
// coding rate: 7
|
||||
// sync word: 0x12
|
||||
// output power: 17 dBm
|
||||
// node address in EEPROM starts at: 0
|
||||
byte state = lora.begin();
|
||||
if(state == ERR_NONE) {
|
||||
Serial.println(F("success!"));
|
||||
} else {
|
||||
Serial.print(F("failed, code 0x"));
|
||||
Serial.println(state, HEX);
|
||||
while(true);
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
Serial.print(F("Scanning channel for LoRa preamble ... "));
|
||||
|
||||
// start scanning current channel
|
||||
uint8_t state = lora.scanChannel();
|
||||
|
||||
if(state == PREAMBLE_DETECTED) {
|
||||
// LoRa preamble was detected
|
||||
Serial.println(" detected preamble!");
|
||||
|
||||
} else if(state == CHANNEL_FREE) {
|
||||
// no preamble was detected, channel is free
|
||||
Serial.println(" channel is free!");
|
||||
|
||||
}
|
||||
|
||||
// wait 100 ms before new scan
|
||||
delay(100);
|
||||
}
|
146
examples/SX127x_Settings/SX127x_Settings.ino
Normal file
146
examples/SX127x_Settings/SX127x_Settings.ino
Normal file
|
@ -0,0 +1,146 @@
|
|||
/*
|
||||
* KiteLib SX127x Settings Example
|
||||
*
|
||||
* This example shows how to change all the properties of LoRa transmission.
|
||||
* KiteLib currently supports the following settings:
|
||||
* - pins (SPI slave select, digital IO 0, digital IO 1)
|
||||
* - carrier frequency
|
||||
* - bandwidth
|
||||
* - spreading factor
|
||||
* - coding rate
|
||||
* - sync word
|
||||
* - output power during transmission
|
||||
*/
|
||||
|
||||
// include the library
|
||||
#include <KiteLib.h>
|
||||
|
||||
// SX1278 module is in slot A on the shield
|
||||
SX1278 loraSX1278 = Kite.ModuleA;
|
||||
|
||||
// create another instance of LoRa class using SX1272 module and user-specified pinout
|
||||
// NSS pin: 6
|
||||
// DIO0 pin: 4
|
||||
// DIO1 pin: 5
|
||||
SX1272 loraSX1272 = new Module(6, 4, 5);
|
||||
|
||||
// create third instance of LoRa class using SX1276 module and user-specified pinout
|
||||
// we ran out of Uno digital pins, so here we use analog ones
|
||||
// NSS pin: A0
|
||||
// DIO0 pin: A1
|
||||
// DIO1 pin: A2
|
||||
SX1276 loraSX1276 = new Module(A0, A1, A2);
|
||||
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
|
||||
// initialize SX1278 with default settings
|
||||
Serial.print(F("[SX1278] Initializing ... "));
|
||||
// carrier frequency: 434.0 MHz
|
||||
// bandwidth: 125.0 kHz
|
||||
// spreading factor: 9
|
||||
// coding rate: 7
|
||||
// sync word: 0x12
|
||||
// output power: 17 dBm
|
||||
// node address in EEPROM starts at: 0
|
||||
byte state = loraSX1278.begin();
|
||||
if(state == ERR_NONE) {
|
||||
Serial.println(F("success!"));
|
||||
} else {
|
||||
Serial.print(F("failed, code 0x"));
|
||||
Serial.println(state, HEX);
|
||||
while(true);
|
||||
}
|
||||
|
||||
// initialize the second LoRa instance with non-default settings
|
||||
// this LoRa link will have maximum range, but very low data rate
|
||||
Serial.print(F("[SX1276] Initializing ... "));
|
||||
// carrier frequency: 434.0 MHz
|
||||
// bandwidth: 7.8 kHz
|
||||
// spreading factor: 12
|
||||
// coding rate: 8
|
||||
// sync word: 0x13
|
||||
// output power: 17 dBm
|
||||
// node address in EEPROM starts at: 0
|
||||
state = loraSX1276.begin(434.0, 7.8, 12, 8, 0x13);
|
||||
if(state == ERR_NONE) {
|
||||
Serial.println(F("success!"));
|
||||
} else {
|
||||
Serial.print(F("failed, code 0x"));
|
||||
Serial.println(state, HEX);
|
||||
while(true);
|
||||
}
|
||||
|
||||
// initialize the third LoRa instance with non-default settings
|
||||
// this LoRa link will have high data rate, but lower range
|
||||
// NOTE: when using spreading factor 6, the total packet length has to be known in advance!
|
||||
// it can be set using the length variable of your Packet instance
|
||||
// Packet::length = x;
|
||||
// where x is the total packet length including both addresses
|
||||
Serial.print(F("[SX1272] Initializing ... "));
|
||||
// carrier frequency: 915.0 MHz
|
||||
// bandwidth: 500.0 kHz
|
||||
// spreading factor: 6
|
||||
// coding rate: 5
|
||||
// sync word: 0x14
|
||||
// output power: 2 dBm
|
||||
// node address in EEPROM starts at: 0
|
||||
state = loraSX1272.begin(915.0, 500.0, 6, 5, 0x14, 2);
|
||||
if(state == ERR_NONE) {
|
||||
Serial.println(F("success!"));
|
||||
} else {
|
||||
Serial.print(F("failed, code 0x"));
|
||||
Serial.println(state, HEX);
|
||||
while(true);
|
||||
}
|
||||
|
||||
// you can also change the settings at runtime
|
||||
|
||||
// different modules accept different parameters
|
||||
// see https://github.com/jgromes/LoRaLib/wiki/Supported-LoRa-modules
|
||||
|
||||
// you can check if the setting was changed successfully
|
||||
|
||||
// set bandwidth to 250 kHz
|
||||
if(loraSX1278.setBandwidth(250.0) == ERR_INVALID_BANDWIDTH) {
|
||||
Serial.println("Selected bandwidth is invalid for this module!");
|
||||
while(true);
|
||||
}
|
||||
|
||||
// set spreading factor to 10
|
||||
if(loraSX1278.setSpreadingFactor(10) == ERR_INVALID_SPREADING_FACTOR) {
|
||||
Serial.println("Selected spreading factor is invalid for this module!");
|
||||
while(true);
|
||||
}
|
||||
|
||||
// set coding rate to 6
|
||||
if(loraSX1278.setCodingRate(6) == ERR_INVALID_CODING_RATE) {
|
||||
Serial.println("Selected coding rate is invalid for this module!");
|
||||
while(true);
|
||||
}
|
||||
|
||||
// set carrier frequency to 433.5 MHz
|
||||
if(loraSX1278.setFrequency(433.5) == ERR_INVALID_FREQUENCY) {
|
||||
Serial.println("Selected frequency is invalid for this module!");
|
||||
while(true);
|
||||
}
|
||||
|
||||
// set LoRa sync word to 0x14
|
||||
// NOTE: value 0x34 is reserved for LoRaWAN networks and should not be used
|
||||
if(loraSX1278.setSyncWord(0x14) != ERR_NONE) {
|
||||
Serial.println("Unable to set sync word!");
|
||||
while(true);
|
||||
}
|
||||
|
||||
// set output power to 10 dBm (accepted range is 2 - 17 dBm)
|
||||
if(loraSX1278.setOutputPower(10) == ERR_INVALID_OUTPUT_POWER) {
|
||||
Serial.println("Selected output power is invalid for this module!");
|
||||
while(true);
|
||||
}
|
||||
|
||||
Serial.println("All settings succesfully changed!");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// nothing here
|
||||
}
|
Loading…
Add table
Reference in a new issue