In Finland Digita operates LoraWAN network (ISM 868 MHz) which covers quite a large geographical area.
Finnish LoraWAN radio coverage map: https://www.digita.fi/yrityksille/iot/iot_lorawan-verkon_peittokartta

Hardware: Arduino and Semtech SX1278 shield for the Arduino. Install SX1278 library for the Arduino and do some modifications: https://teknokoodiradio.vuodatus.net/lue/2017/03/arduino-lora-868-mhz
Also add some lines of code in method sx1278.setMode (switch case structure)
/*
  setMode switch-case
    case 11:  setCR(CR_5);    // CR = 4/5
          setSF(SF_7);    // SF = 7
          setBW(BW_125);    // BW = 125 KHz
          break;
    // mode 12
    case 12:  setCR(CR_5);    // CR = 4/5
          setSF(SF_8);    // SF = 8
          setBW(BW_125);    // BW = 125 KHz
          break;
    // mode 13
    case 13:  setCR(CR_5);    // CR = 4/5
          setSF(SF_9);    // SF = 9
          setBW(BW_125);    // BW = 125 KHz
          break;
    // mode 14
    case 14:  setCR(CR_5);    // CR = 4/5
          setSF(SF_10);   // SF = 10
          setBW(BW_125);    // BW = 125 KHz
          break;
    // mode 15
    case 15:  setCR(CR_5);    // CR = 4/5
          setSF(SF_11);   // SF = 11
          setBW(BW_125);    // BW = 125 KHz
          break;
  */

lora869525-2.jpg

/*
 * https://github.com/wirelessopensource/lora_shield_arduino/tree/master/libraries/SX1278
 *
 * bw = bandwidth, cr = coding rate, sf = spreading factor
 * mode bw  cr  sf  sensitivity (dB)
 * 1    125 4/5 12  -134                max range, slow data rate
 * 2    250 4/5 12  -131
 * 3    125 4/5 10  -129
 * 4    500 4/5 12  -128
 * 5    250 4/5 10  -126
 * 6    500 4/5 11  -125.5
 * 7    250 4/5 9   -123
 * 8    500 4/5 9   -120
 * 9    500 4/5 8   -117
 * 10   500 4/5 7   -114                mim range, fast data rate
 * 11   125 4/5 7
 * 12   125 4/5 8
 * 13   125 4/5 9
 * 14   125 4/5 10
 * 15   125 4/5 11
 */

 /*
  Set mode additions
    case 11:  setCR(CR_5);    // CR = 4/5
          setSF(SF_7);    // SF = 7
          setBW(BW_125);    // BW = 125 KHz
          break;
    // mode 12
    case 12:  setCR(CR_5);    // CR = 4/5
          setSF(SF_8);    // SF = 8
          setBW(BW_125);    // BW = 125 KHz
          break;
    // mode 13
    case 13:  setCR(CR_5);    // CR = 4/5
          setSF(SF_9);    // SF = 9
          setBW(BW_125);    // BW = 125 KHz
          break;
    // mode 14
    case 14:  setCR(CR_5);    // CR = 4/5
          setSF(SF_10);   // SF = 10
          setBW(BW_125);    // BW = 125 KHz
          break;
    // mode 15
    case 15:  setCR(CR_5);    // CR = 4/5
          setSF(SF_11);   // SF = 11
          setBW(BW_125);    // BW = 125 KHz
          break;
  */
#include <SX1278.h>

#define rxPacketLen     255
#define serialSpeed     9600
#define debug_mode      0
#define show_modem_stat 0
#define loraFreq        7

float f868[8] = {868.1, 868.3, 868.5, 867.1, 867.5, 867.7, 867.9, 869.525};                                                           
char rxPacket[rxPacketLen];

uint8_t loraMode = 11; // SF7   BW 125 kHz

void setup() {
  Serial.begin(serialSpeed);
  sx1278.OFF();
  delay(20);
  sx1278.ON();
  Serial.println(F("sx1278.ON"));
  delay(20);
  sx1278.setCRC_OFF();

  sx1278.setFreq(f868[loraFreq]);
  chgMode(loraMode);

  Serial.println(f868[loraFreq], DEC);
  Serial.println();
}

// receiveAll returns 1 if no packets received within timeout. receive() returns "NOT 'RxDone' flag" when
// timeout and no data received
void loop() {
  int r = sx1278.receiveAll();

#if (debug_mode > 0)
  Serial.println();
  Serial.print(F("receiveAll: "));
  Serial.println(r, DEC);
#endif

#if (show_modem_stat == 1)
  int modemStat = sx1278.readRegister(REG_MODEM_STAT);
  Serial.print(F("Modem status: "));
  Serial.println(modemStat, DEC);
#endif

  if (r == 0) {
    Serial.println();
    for (r = 0; r < sx1278.packet_received.length; r++) {
      Serial.print(sx1278.packet_received.data[r], HEX);
      rxPacket[r] = (char) sx1278.packet_received.data[r];
      if (r == rxPacketLen - 1) {
        break;
      }
    }
    Serial.println();
    Serial.println(f868[loraFreq], DEC);
    Serial.println(F("Msg: "));
    Serial.print(rxPacket);
    memset(rxPacket, 0, sizeof(rxPacket));
  }
}

void chgMode(int m) {
  int r = sx1278.setMode(m);

#if (debug_mode > 0)
  Serial.print(F("sx1278.setMode result "));
  Serial.print(r, DEC);
  Serial.print(F(" value "));
  Serial.print(m, DEC);
  Serial.println();
#endif
}

void setOFF() {
  sx1278.OFF();
  Serial.println(F("sx1278.OFF"));
  Serial.println();
}