Hi,
So I have gotten a little farther in my LoRa knowledge. I think I managed to get a Gateway set up. But now I am having trouble with P2P comm between two modules. I set up two RN2903 modules with Arduino’s using this setup:
My “Send” Code is:
#include <SoftwareSerial.h>
SoftwareSerial loraSerial(10, 11);
String str;
void setup() {
//output LED pin
pinMode(13, OUTPUT);
led_off();
// Open serial communications and wait for port to open:
Serial.begin(9600);
loraSerial.begin(9600);
loraSerial.setTimeout(1000);
lora_autobaud();
led_on();
delay(1000);
led_off();
Serial.println("Initing LoRa");
loraSerial.listen();
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("sys get ver");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("mac pause"); // Activates P2P transmission between the modules
str = loraSerial.readStringUntil('\n');
Serial.println(str);
// loraSerial.println("radio set bt 0.5");
// wait_for_ok();
loraSerial.println("radio set mod lora");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set freq 915000000");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set pwr 14");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set sf sf7");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set afcbw 41.7");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set rxbw 125");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
// loraSerial.println("radio set bitrate 50000");
// wait_for_ok();
// loraSerial.println("radio set fdev 25000");
// wait_for_ok();
loraSerial.println("radio set prlen 8");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set crc on");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set iqi off");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set cr 4/5");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set wdt 60000"); //disable for continuous reception
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set sync 12");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set bw 125");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
Serial.println("starting loop");
}
void loop() {
led_on();
loraSerial.println("radio tx 6C6F"); //This line does the actual transmission. 6C6F is the data packet in HEX
str = loraSerial.readStringUntil('\n');
Serial.println(str);
str = loraSerial.readStringUntil('\n');
Serial.println(str);
led_off();
delay(2000);
}
void lora_autobaud()
{
String response = "";
while (response=="")
{
delay(1000);
loraSerial.write((byte)0x00);
loraSerial.write(0x55);
loraSerial.println();
loraSerial.println("sys get ver");
response = loraSerial.readStringUntil('\n');
}
}
/*
* This function blocks until the word "ok\n" is received on the UART,
* or until a timeout of 3*5 seconds.
*/
int wait_for_ok()
{
str = loraSerial.readStringUntil('\n');
if ( str.indexOf("ok") == 0 ) {
return 1;
}
else return 0;
}
void led_on()
{
digitalWrite(13, 1);
}
void led_off()
{
digitalWrite(13, 0);
}
and my Receive code is:
#include <SoftwareSerial.h>
SoftwareSerial loraSerial(10, 11);
String str;
char e ;
void setup() {
//output LED pin
pinMode(13, OUTPUT);
//led_off();
// Open serial communications and wait for port to open:
Serial.begin(9600);
loraSerial.begin(9600);
loraSerial.setTimeout(1000);
lora_autobaud();
led_on();
delay(1000);
led_off();
Serial.println("Initing LoRa");
loraSerial.listen();
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("sys get ver");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("mac pause");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set bt 0.5");
wait_for_ok();
loraSerial.println("radio set mod lora");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set freq 915000000");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set pwr 14");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set sf sf7");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set afcbw 41.7");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set rxbw 125");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set bitrate 50000");
wait_for_ok();
loraSerial.println("radio set fdev 25000");
wait_for_ok();
loraSerial.println("radio set prlen 8");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set crc on");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set iqi off");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set cr 4/5");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set wdt 0"); //disable for continuous reception
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set sync 12");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
loraSerial.println("radio set bw 125");
str = loraSerial.readStringUntil('\n');
Serial.println(str);
}
void loop() {
//Serial.println("waiting for a message");
loraSerial.println("radio rx 0"); //continous reception
char e = loraSerial.read();
// if (loraSerial.available() > 0) {
// }
//
str = loraSerial.readStringUntil('\n');
if ( str.indexOf("ok") == 0 )
{
str = String("");
while(str=="")
{
str = loraSerial.readStringUntil('\n');
}
if ( str.indexOf("radio_rx") == 0 ) {
Serial.print("packet: ");
Serial.println(e,HEX);
toggle_led();
}
else
{
Serial.println("Received nothing");
}
}
else
{
Serial.println("radio not going into receive mode");
delay(1000);
}
}
void lora_autobaud()
{
String response = "";
while (response=="")
{
delay(1000);
loraSerial.write((byte)0x00);
loraSerial.write(0x55);
loraSerial.println();
loraSerial.println("sys get ver");
response = loraSerial.readStringUntil('\n');
}
}
/*
* This function blocks until the word "ok\n" is received on the UART,
* or until a timeout of 3*5 seconds.
*/
int wait_for_ok()
{
str = loraSerial.readStringUntil('\n');
if ( str.indexOf("ok") == 0 ) {
return 1;
}
else return 0;
}
void toggle_led()
{
digitalWrite(13, !digitalRead(13));
}
void led_on()
{
digitalWrite(13, 1);
}
void led_off()
{
digitalWrite(13, 0);
}
All I get is:
packet: FFFFFFFF
Any ideas?