11#include < SX127x_driver.h>
22
33// Pin setting
4- int8_t nssPin = 10 , resetPin = 9 , irqPin = 2 , rxenPin = 7 , txenPin = 8 ;
4+ int8_t nssPin = 10 , resetPin = 9 , irqPin = 2 , rxenPin = - 1 , txenPin = - 1 ;
55
66// RF frequency setting
77uint32_t frequency = 915000000 ;
@@ -37,6 +37,10 @@ void settingFunction() {
3737 Serial.println (" Setting pins" );
3838 sx127x_setPins (nssPin);
3939 pinMode (irqPin, INPUT);
40+ if (txenPin != -1 && rxenPin != -1 ) {
41+ pinMode (txenPin, OUTPUT);
42+ pinMode (rxenPin, OUTPUT);
43+ }
4044
4145 // Reset RF module by setting resetPin to LOW and begin SPI communication
4246 sx127x_reset (resetPin);
@@ -64,6 +68,15 @@ void settingFunction() {
6468 Serial.print (frequency / 1000000 );
6569 Serial.println (" MHz" );
6670
71+ // Set rx gain to selected gain
72+ Serial.print (" Set RX gain to " );
73+ if (boost == SX127X_RX_GAIN_POWER_SAVING) Serial.println (" power saving gain" );
74+ else if (boost == SX127X_RX_GAIN_BOOSTED) Serial.println (" boosted gain" );
75+ uint8_t LnaBoostHf = boost ? 0x03 : 0x00 ;
76+ uint8_t AgcOn = level == SX127X_RX_GAIN_AUTO ? 0x01 : 0x00 ;
77+ sx127x_writeRegister (SX127X_REG_LNA, LnaBoostHf | (level << 5 ));
78+ sx127x_writeBits (SX127X_REG_MODEM_CONFIG_3, AgcOn, 2 , 1 );
79+
6780 // Set modulation param and packet param
6881 Serial.println (" Set modulation with predefined parameters" );
6982 Serial.println (" Set packet with predefined parameters" );
@@ -107,6 +120,12 @@ uint8_t receiveFunction(char* message, uint8_t &length) {
107120 Serial.println (" Attach interrupt on IRQ pin" );
108121 attachInterrupt (digitalPinToInterrupt (irqPin), checkReceiveDone, RISING);
109122
123+ // Set txen and rxen pin state for receiving packet
124+ if (txenPin != -1 && rxenPin != -1 ) {
125+ digitalWrite (txenPin, LOW);
126+ digitalWrite (rxenPin, HIGH);
127+ }
128+
110129 // Receive message
111130 Serial.println (" Receiving message..." );
112131 sx127x_writeRegister (SX127X_REG_OP_MODE, SX127X_LORA_MODEM | SX127X_MODE_RX_CONTINUOUS);
@@ -126,6 +145,9 @@ uint8_t receiveFunction(char* message, uint8_t &length) {
126145 uint8_t irqStat = sx127x_readRegister (SX127X_REG_IRQ_FLAGS);
127146 sx127x_writeRegister (SX127X_REG_IRQ_FLAGS, SX127X_IRQ_RX_DONE);
128147 Serial.println (" Clear IRQ status" );
148+ if (rxenPin != -1 ) {
149+ digitalWrite (rxenPin, LOW);
150+ }
129151
130152 // Get FIFO address of received message and configure address pointer
131153 reg = sx127x_readRegister (SX127X_REG_FIFO_RX_CURRENT_ADDR);
@@ -140,6 +162,15 @@ uint8_t receiveFunction(char* message, uint8_t &length) {
140162 Serial.print (length);
141163 Serial.println (" )" );
142164
165+ // Get and display packet status
166+ Serial.println (" Get received packet status" );
167+ float rssi = ((int16_t ) sx127x_readRegister (SX127X_REG_PKT_RSSI_VALUE) - SX127X_RSSI_OFFSET_HF);
168+ float snr = (int8_t ) sx127x_readRegister (SX127X_REG_PKT_SNR_VALUE) / 4.0 ;
169+ Serial.print (" Packet status: RSSI = " );
170+ Serial.print (rssi);
171+ Serial.print (" | SNR = " );
172+ Serial.println (snr);
173+
143174 // Read message from buffer
144175 Serial.print (" Message in bytes : [ " );
145176 for (uint8_t i = 0 ; i < length; i++) {
0 commit comments