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
| Protokol | Jangkau | Hardware | Cocok untuk |
|---|---|---|---|
| ESP-NOW (#25) | ~10–200 m | 2× ESP32 saja | Node dekat, latency rendah |
| LoRa (artikel ini) | ~500 m – 5+ km LOS | ESP32 + modul SX1278 | Sensor sangat jauh, data jarang |
| WiFi + MQTT (#7) | Seluruh jaringan AP | Router + 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 modul | Catatan |
|---|---|
| 433 MHz | Paling umum di kit murah; jarak dekat–menengah; hobby/lab — cek regulasi Kominfo sebelum deploy komersial |
| 868 MHz | Umum di Eropa; pastikan modul & antena sesuai region |
| 915 MHz | Umum 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
| Komponen | Peran | Koneksi |
|---|---|---|
| ESP32 + SX1278 (sensor) | Baca DHT22, kirim paket LoRa | SPI ke modul LoRa · tanpa WiFi |
| ESP32 + SX1278 (receiver) | Terima paket, tampilkan Serial / siap forward | SPI 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 LoRa | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| SCK | GPIO 5 |
| MISO | GPIO 19 |
| MOSI | GPIO 27 |
| SS (NSS) | GPIO 18 |
| RST | GPIO 14 |
| DIO0 | GPIO 26 |
Pro tip: Gunakan pin yang sama persis di sensor dan receiver — mengurangi salah wiring saat debug.
Instalasi Library LoRa.h
- Arduino IDE → Sketch → Include Library → Manage Libraries
- Cari LoRa by Sandeep Mistry → Install
- 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
- Frequency —
433E6untuk 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.
| SF | Jangkau relatif | Time on air | Cocok untuk |
|---|---|---|---|
| SF7 | Pendek–menengah | Ter cepat | Lab, uji pertama, interval 10 detik |
| SF9 | Menengah | Sedang | Kebun terbuka, antena standar |
| SF11 | Jauh | Lambat | Uji jarak maksimum LOS |
| SF12 | Paling jauh | Paling lambat | Telemetry 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?
- Sensor >200 m dari gateway dan tidak ada WiFi? → LoRa
- Data kecil, interval menit/jam? → LoRa
- Butuh latency <1 detik di dalam ruangan? → ESP-NOW (#25)
- 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
- Flash sender ke board sensor, receiver ke board kedua
- Buka Serial Monitor 115200 di kedua board
- Pastikan
LoRa init gagaltidak muncul - Dalam 10 detik, receiver menampilkan
RX suhu=... - Jauhkan board secara bertahap — catat jarak saat paket hilang
- Ubah
setSyncWorddi 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 packedharus 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)
- Gateway LoRa → MQTT (#28): receiver + WiFi publish ke
kodingindonesia/esp32/dht22/datavia broker Mosquitto (#16) (192.168.1.50, userkindo_esp32) - Grafana (#19) — visualisasi setelah data masuk MQTT
- ESP-NOW (#25) — bandingkan untuk node dekat gateway
- ESP32-CAM (#27): streaming video — kebutuhan berbeda dari telemetry LoRa
- Capstone greenhouse (#39) — sensor LoRa kebun + pompa MQTT
LoRa membuka sensor di ujung lahan yang WiFi dan ESP-NOW tidak jangkau. Lanjutkan Seri 2 di halaman artikel Koding Indonesia.