Range isssue with RF95 in Dragino shields w/arduino uno

Hello all, I am very new to LoRa and relatively new at coding for arduino, so please forgive what may be a dumb set of questions.

I purchased the Dragino gps/lora shield as well as the dragino lora transceiver shield, each mounted to an arduino uno.

I am trying to send gps NMEA sentences from my mobile track (client) to my stationary receiver (server) where the incoming NMEA data is serial captured and saved to a spreadsheet.

The GPS side I have figure out, having worked with GPS for years, and the Adafruit GPS library for arduino was very helpful in refining my data stream down to the single NMEA RMC sentence I need for my purposes.

As it stands, I am able to send data from my client to receiver at about 3 meters, but any break in line of sight or any obstruction seems to stop the signal. I am receiving the data I need no problem, parsed and ready, but obviously I need to achieve a greater range than a matter of feet.

I have tried changing frequency on both ends, have tried various LoRa modem configs, messed with my TX power, all to no avail.

If I am being honest, I am just a beginner grasping at the straws I can find via Google, most of which lack context for a beginner. Any educated guidance I receive would be extremely helpful and most appreciated. While I am looking for a solution to “make it work” , I would also like to understand what is causing my issue and why said solution fixes it.

Following are my Client and server sketches respectively. I have had some limited guidance from a friend more familiar with coding than myself, and he gets full credit for getting me this far. Unfortunately he is as new to LoRa as I am, so he could offer little guidance in that respect.

Client:

#include <RadioHead.h>
#include <RH_RF95.h>
#include <SPI.h>
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 2);
Adafruit_GPS GPS(&mySerial);

String NMEA1;
char c;
RH_RF95 rf95;

float frequency = 915.0;

void setup() {

Serial.begin(115200);
//while (!Serial) ; // Wait for serial port to be available

if (!rf95.init())
Serial.println(“init failed”);
// Setup ISM frequency
rf95.setFrequency(frequency);
// Setup Power,dBm
rf95.setTxPower(13);

GPS.begin(9600); //Turn GPS on at baud rate of 9600
GPS.sendCommand("$PGCMD,33,0*6D"); // Turn Off GPS Antenna Update
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); //Tell GPS we want only $GPRMC and $GPGGA NMEA sentences
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz update rate

if (!rf95.init()) {
Serial.println(“Radio Did Not Intialize!”);
}else{
Serial.println(“Lora Radio Ready”);
}
delay(1000); //Pause
}

void loop()
{
while(!GPS.newNMEAreceived()) {
c=GPS.read();
}

GPS.parse(GPS.lastNMEA());
NMEA1=GPS.lastNMEA();

if(NMEA1.indexOf("$GPRMC") > 0){
Serial.println(NMEA1);

 char buf[70];
  NMEA1.toCharArray(buf, 70);        
  rf95.send((uint8_t*)buf, sizeof(buf));

  rf95.waitPacketSent();
  Serial.println("Sent lora packet");

}
}

Server:
#include <RadioHead.h>

#include <RH_RF95.h>

#include <SPI.h>

RH_RF95 rf95;

void setup()

{ Serial.begin(115200);
while (!Serial) ; // Wait for serial port to be available
if (!rf95.init())
Serial.println(“init failed”);

}

void loop()
{
if (rf95.available())
{
// Should be a message for us now
uint8_t buf[RH_RF95_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (rf95.recv(buf, &len))
{
//RH_RF95::printBuffer("request: ", buf, len);

  Serial.println((char*)buf);



}

}
}

To anyone who has read this far, thank you for sticking through a total Nub question. Again, any guidance would be MUCH appreciated.