Pendahuluan — Lebih Jauh dari ESP-NOW

Di artikel #25 ESP-NOW, kamu sudah mengirim data antar dua ESP32 tanpa router — cocok untuk jarak puluhan hingga ~200 meter. Tapi bagaimana jika sensor harus di ujung kebun, sawah, atau area terpencil yang jaraknya ratusan meter bahkan kilometer dari gateway?

LoRa (Long Range) mengisi celah itu. Dengan modul radio SX1278 di tiap ESP32, kamu bisa mengirim paket data kecil dengan konsumsi daya rendah — tanpa infrastruktur WiFi di titik sensor.

Artikel Jalur D ini fokus pada link LoRa peer-to-peer (node sensor → node receiver). Menggabungkan LoRa ke MQTT/dashboard adalah langkah berikutnya di artikel gateway #28.

Prasyarat: Paham dasar WiFi ESP32 (#4), DHT22 (#5), dan idealnya sudah baca ESP-NOW (#25) untuk membandingkan jangkau radio.

Apa Itu LoRa?

LoRa (Long Range) adalah teknik modulasi radio proprietary Semtech yang dipakai di jaringan LPWAN (Low Power Wide Area Network). Karakteristik utama:

  • Jangkau jauh — ratusan meter hingga beberapa kilometer (LOS), tergantung antena & parameter
  • Data rate rendah — cocok telemetry sensor (suhu, kelembaban), bukan video
  • Hemat daya — node bisa kirim sesekali lalu tidur (deep sleep #11)
  • Tanpa WiFi — link radio langsung antar modul LoRa

Chip SX1278 adalah transceiver LoRa populer di modul murah (433 MHz) yang dipasangkan ke ESP32 via SPI — bus serial cepat yang juga dipakai di sensor I2C BME280 (#13), tapi wiring-nya berbeda (MOSI/MISO/SCK + chip select).

Di Indonesia, pola ini sering dipakai untuk monitoring kebun/sawah (suhu tanah, kelembaban udara), level tangki air jauh dari rumah, atau node capstone greenhouse (#39) yang sensornya di ujung lahan.

LoRa vs ESP-NOW vs WiFi/MQTT

ProtokolJangkauHardwareCocok untuk
ESP-NOW (#25)~10–200 m2× ESP32 sajaNode dekat, latency rendah
LoRa (artikel ini)~500 m – 5+ km LOSESP32 + modul SX1278Sensor sangat jauh, data jarang
WiFi + MQTT (#7)Seluruh jaringan APRouter + broker (#16)Dashboard, multi-subscriber

Lihat juga perbandingan protokol di REST vs MQTT (#20) untuk lapisan cloud setelah data sampai di gateway.

Band Frekuensi & Regulasi Indonesia

Modul SX1278 di pasaran hobby umumnya 433 MHz atau 868/915 MHz. Ini penting — salah band = tidak saling dengar atau bermasalah legal.

Band modulCatatan
433 MHzPaling umum di kit murah; jarak dekat–menengah; hobby/lab — cek regulasi Kominfo sebelum deploy komersial
868 MHzUmum di Eropa; pastikan modul & antena sesuai region
915 MHzUmum di AS; di Indonesia band ISM LPWAN sering dibahas di 920–923 MHz untuk LoRaWAN komersial

Peringatan: Artikel ini untuk belajar & prototipe. Jangan deploy jaringan LoRa skala komersial tanpa riset izin frekuensi dan daya pancar sesuai regulasi Indonesia (Kominfo / SDPPI).

Yang Kamu Butuhkan

  • 2× ESP32 DevKit
  • 2× modul LoRa SX1278 (433 MHz untuk lab — samakan frekuensi di kedua modul)
  • DHT22 di node sensor (opsional)
  • Kabel jumper, breadboard, antena 433 MHz (sering sudah terpasang di modul)
  • Library LoRa by Sandeep Mistry di Arduino IDE

Estimasi biaya: modul LoRa 433 MHz ~Rp 25–40rb ×2 + 2× ESP32 → total lab ~Rp 200–300rb.

Arsitektur Node LoRa

KomponenPeranKoneksi
ESP32 + SX1278 (sensor)Baca DHT22, kirim paket LoRaSPI ke modul LoRa · tanpa WiFi
ESP32 + SX1278 (receiver)Terima paket, tampilkan Serial / siap forwardSPI ke modul LoRa · opsional WiFi nanti (#28)

Alur data secara singkat:

  [ ESP32 Sensor + DHT22 + SX1278 ]
      |
      |  LoRa 433 MHz (paket kecil, SF7–12)
      |  struct: suhu, kelembaban, unix
      v
  [ ESP32 Receiver + SX1278 ]
      |
      |  Serial Monitor (lab)
      |  nanti: WiFi + MQTT publish (#28 gateway)
      v
  [ Mosquitto / Grafana ]  — artikel #28 + #19

Koneksi SX1278 ke ESP32 (SPI)

Pin umum untuk modul LoRa 433 MHz di ESP32 DevKit (sesuaikan dengan silkscreen modul kamu):

Modul LoRaESP32
VCC3.3V
GNDGND
SCKGPIO 5
MISOGPIO 19
MOSIGPIO 27
SS (NSS)GPIO 18
RSTGPIO 14
DIO0GPIO 26

Pro tip: Gunakan pin yang sama persis di sensor dan receiver — mengurangi salah wiring saat debug.

Instalasi Library LoRa.h

  1. Arduino IDE → Sketch → Include Library → Manage Libraries
  2. Cari LoRa by Sandeep Mistry → Install
  3. Pastikan board ESP32 sudah terpasang (Board Manager)

Struktur Data Bersama

typedef struct __attribute__((packed)) {
  float suhu;
  float kelembaban;
  uint32_t unix;
} lora_packet_t;

Contoh nilai konsisten Seri 2 (sama dengan NTP #34):

{"suhu":28.5,"kelembaban":65.2,"unix":1782977400,"iso":"2026-07-02T14:30:00"}

Sketch Sensor — LoRa Sender

#include <SPI.h>
#include <LoRa.h>
#include <DHT.h>

#define DHT_PIN 4
#define LORA_FREQ 433E6

DHT dht(DHT_PIN, DHT22);

typedef struct __attribute__((packed)) {
  float suhu;
  float kelembaban;
  uint32_t unix;
} lora_packet_t;

void setup() {
  Serial.begin(115200);
  dht.begin();

  SPI.begin(5, 19, 27, 18);
  LoRa.setPins(18, 14, 26);

  if (!LoRa.begin(LORA_FREQ)) {
    Serial.println("LoRa init gagal!");
    while (true) { delay(1000); }
  }
  LoRa.setSpreadingFactor(7);
  LoRa.setSyncWord(0x12);
}

void loop() {
  lora_packet_t pkt;
  pkt.suhu = dht.readTemperature();
  pkt.kelembaban = dht.readHumidity();
  pkt.unix = 1782977400;

  LoRa.beginPacket();
  LoRa.write((uint8_t*)&pkt, sizeof(pkt));
  LoRa.endPacket();

  Serial.printf("TX suhu=%.1f RH=%.1f\n", pkt.suhu, pkt.kelembaban);
  delay(10000);
}

Sketch Receiver — LoRa Receiver

#include <SPI.h>
#include <LoRa.h>

#define LORA_FREQ 433E6

typedef struct __attribute__((packed)) {
  float suhu;
  float kelembaban;
  uint32_t unix;
} lora_packet_t;

void setup() {
  Serial.begin(115200);

  SPI.begin(5, 19, 27, 18);
  LoRa.setPins(18, 14, 26);

  if (!LoRa.begin(LORA_FREQ)) {
    Serial.println("LoRa init gagal!");
    while (true) { delay(1000); }
  }
  LoRa.setSpreadingFactor(7);
  LoRa.setSyncWord(0x12);
}

void loop() {
  int packetSize = LoRa.parsePacket();
  if (packetSize == sizeof(lora_packet_t)) {
    lora_packet_t pkt;
    LoRa.readBytes((uint8_t*)&pkt, sizeof(pkt));
    Serial.printf("RX suhu=%.1f RH=%.1f unix=%lu\n",
      pkt.suhu, pkt.kelembaban, (unsigned long)pkt.unix);
  }
}

Parameter LoRa Penting

  • Spreading Factor (SF7–SF12) — SF lebih tinggi = jangkau lebih jauh, data rate lebih lambat
  • Sync Word — harus sama di sender & receiver (mis. 0x12); seperti "password" ringan antar node
  • Bandwidth — default library sering 125 kHz; jangan ubah di satu sisi saja
  • Frequency433E6 untuk modul 433 MHz; kedua modul wajib identik

Tabel Spreading Factor — Praktis

Spreading Factor (SF) menentukan trade-off jangkau vs kecepatan paket. Semua node dalam satu link wajib pakai SF yang sama — ubah di satu sisi saja dan receiver tidak akan decode.

SFJangkau relatifTime on airCocok untuk
SF7Pendek–menengahTer cepatLab, uji pertama, interval 10 detik
SF9MenengahSedangKebun terbuka, antena standar
SF11JauhLambatUji jarak maksimum LOS
SF12Paling jauhPaling lambatTelemetry jarang (tiap 15–60 menit)

Mulai uji dengan setSpreadingFactor(7) seperti sketch di atas. Jika paket hilang saat board dijauhkan, naikkan SF bertahap dan catat jarak + RSSI di Serial Monitor receiver (LoRa.packetRssi() opsional). Untuk node baterai, SF lebih tinggi = radio aktif lebih lama per paket — kombinasikan dengan deep sleep (#11) dan interval kirim yang jarang.

Antena & Jangkauan

  • Gunakan antena yang sesuai band modul (433 MHz dengan modul 433 MHz)
  • Line-of-sight (LOS) jauh lebih baik daripada melalui banyak dinding
  • Naikkan SF (mis. 10–12) untuk uji jarak jauh — trade-off: paket lebih lambat
  • Untuk jarak <200 m dalam bangunan, pertimbangkan ESP-NOW (#25) yang lebih sederhana

Deep Sleep + LoRa di Node Sensor

Pola mirip deep sleep (#11): bangun → baca sensor → kirim LoRa → esp_deep_sleep_start(). Init LoRa ulang setiap boot setelah deep sleep.

Contoh interval lapangan: kirim setiap 5 menit dengan SF9 — baterai 18650 bisa bertahan berhari-hari jika radio dimatikan di antara paket. Receiver tetap powered (USB/solar) karena harus selalu mendengarkan; pola ini sama seperti gateway ESP-NOW di #25 yang always-on sementara sensor tidur.

Koneksi DHT22 di Node Sensor

Di board sensor, DHT22 tetap di GPIO data (mis. GPIO 4) seperti tutorial #5. LoRa modul memakai bus SPI terpisah — tidak bentrok dengan DHT22 selama pin tidak dobel.

  • DHT22 VCC → 3.3V · GND → GND · DATA → GPIO 4 + resistor pull-up 10kΩ
  • LoRa modul VCC → 3.3V (jangan 5V) · wiring SPI sesuai tabel di atas
  • Label fisik SENSOR vs RECEIVER — hindari flash sketch tertukar

Checklist: Kapan Pakai LoRa?

  1. Sensor >200 m dari gateway dan tidak ada WiFi? → LoRa
  2. Data kecil, interval menit/jam? → LoRa
  3. Butuh latency <1 detik di dalam ruangan? → ESP-NOW (#25)
  4. Butuh dashboard MQTT langsung dari sensor? → WiFi + MQTT (#7) atau gateway LoRa (#28)

Uji Coba (Lab)

# Serial Monitor receiver @ 115200 — harus muncul RX suhu=... unix=1782977400
# Setelah gateway LoRa→MQTT (#28), uji broker:
mosquitto_sub -h 192.168.1.50 -u kindo_esp32 -P GANTI_PASSWORD_MQTT \
  -t kodingindonesia/esp32/dht22/data -v
  1. Flash sender ke board sensor, receiver ke board kedua
  2. Buka Serial Monitor 115200 di kedua board
  3. Pastikan LoRa init gagal tidak muncul
  4. Dalam 10 detik, receiver menampilkan RX suhu=...
  5. Jauhkan board secara bertahap — catat jarak saat paket hilang
  6. Ubah setSyncWord di satu sisi — data harus berhenti (verifikasi pairing)

FAQ Singkat

LoRa sama dengan LoRaWAN?
Tidak. Artikel ini pakai LoRa radio point-to-point. LoRaWAN butuh gateway & server khusus — di luar scope tutorial ini.
Bisa kirim ke HP?
Tidak langsung. Butuh receiver ESP32, lalu forward ke MQTT/app (#28).
Modul 433 MHz bisa bicara dengan 868 MHz?
Tidak. Frekuensi hardware harus sama.

Tips & Troubleshooting

  • LoRa init gagal: Cek wiring SPI, 3.3V (bukan 5V ke modul), pin RST/DIO0
  • RX kosong: Sync word / frequency / SF beda antara sender & receiver
  • Data korup: struct packed harus identik di kedua sketch
  • Jangkau pendek: Antena, orientasi, atau naikkan SF
  • Interferensi: 433 MHz ramai di perkotaan — uji di waktu berbeda atau ganti lokasi

Keamanan & Produksi

  • Sync word bukan enkripsi kuat — untuk produksi pertimbangkan AES di payload atau LoRaWAN
  • Riset regulasi Kominfo sebelum deploy lapangan skala besar
  • Label board SENSOR / RECEIVER + frekuensi modul

Langkah Selanjutnya (Jalur D)

LoRa membuka sensor di ujung lahan yang WiFi dan ESP-NOW tidak jangkau. Lanjutkan Seri 2 di halaman artikel Koding Indonesia.