If anyone is interested, I ordered a HopeRF RFM6501W (which uses an SX1262) and tested it against a Microchip RN2903:
I disabled ADR on both and set both modems to SF10BW125 with max power output settings. Here is the RSSI+SNR from a fixed location for both. As you can see, the signal from the RFM is noticeably
stronger.
RN2903
“data_rate”: “SF10BW125”,
“coding_rate”: “4/5”,
“rssi”: -77,
“snr”: 8
RFM6501
“data_rate”: “SF10BW125”,
“coding_rate”: “4/5”,
“rssi”: -53,
“snr”: 10
Here is a quick sketch I used to test the RFM module:
#define DEV_EUI "D891231340"
#define APP_EUI "70B3D123133472"
#define APP_KEY "2CD2123213BB2B726E36264"
// RFM
#define loraRfmSerial Serial7
#define LORA_RFM_RESET_PIN 30
void printResponse(void)
{
delay(500);
while (Serial7.available())
{
Serial.write(Serial7.read());
}
}
void setup()
{
Serial.begin(115200);
Serial7.begin(115200);
delay(5000);
// Reset LoRa modem
pinMode(LORA_RFM_RESET_PIN, OUTPUT);
digitalWrite(LORA_RFM_RESET_PIN, LOW);
delay(2000);
digitalWrite(LORA_RFM_RESET_PIN, HIGH);
delay(2000);
// Get DEV EUI (for some reason the first command always fails)
Serial7.write("AT+CDEVEUI?\r");
printResponse();
// Get DEV EUI
Serial7.write("AT+CDEVEUI?\r");
printResponse();
// Set APP EUI
Serial7.write("AT+CAPPEUI=");
Serial7.write(APP_EUI);
Serial7.write("\r");
printResponse();
// Set APP Key
Serial7.write("AT+CAPPKEY=");
Serial7.write(APP_KEY);
Serial7.write("\r");
printResponse();
// Set Join Mode to OTAA
Serial7.write("AT+CJOINMODE=0\r");
printResponse();
// Set App Port to 1
Serial7.write("AT+CAPPPORT=1\r");
printResponse();
// Use channels 8-15
Serial7.write("AT+CFREQBANDMASK=0002\r");
printResponse();
// Disable ADR
Serial7.write("AT+CADR=0\r");
printResponse();
// Set Data rate (SF10 - BW125)
Serial7.write("AT+CDATARATE=0\r");
printResponse();
// Set uplink frequencies
Serial7.write("AT+CFREQLIST=1,2,8,903900000,904100000,904300000,904500000,904700000,904900000,905100000,905300000\r");
printResponse();
// Set downlink frequencies
Serial7.write("AT+CFREQLIST=2,2,8,923300000,923900000,924500000,925100000,925700000,926300000,926900000,927500000\r");
printResponse();
// Set RX2 window...missing BW500 options in CDATARATE needed for US915
//Serial7.write("AT+CRXP=0,0,923300000\r");
//printResponse();
// Join
Serial7.write("AT+CJOIN=1,1,10,8\r");
delay(15000);
printResponse();
}
void loop()
{
while (Serial7.available())
{
Serial.write(Serial7.read());
}
// Send some data
Serial7.write("AT+DTRX=0,1,22,48656C6C6F48656C6C6F00\r");
printResponse();
delay(20000);
}
The module does work, but it’s missing a command that would be needed to properly setup the RX2 window for US915.