Panduan LoRa Arduino: Komunikasi Nirkabel Jarak Jauh SX1278 Ra-02 dengan ESP32
Panduan LoRa Arduino: pengkabelan SX1278 Ra-02, pengaturan SF dan bandwidth, kode pengirim dan penerima, ESP32 dan Pico, peringatan 3,3 V, uji jangkauan, serta LoRa vs LoRaWAN.
Proyek LoRa Arduino adalah cara paling praktis untuk mengirim data antar-board sejauh beberapa kilometer, dengan daya sangat kecil dan tanpa internet atau kartu SIM. LoRa (Long Range) adalah modulasi radio yang dikembangkan oleh Semtech; dengan modul murah seperti Ra-02 berbasis SX1278 pada 433 MHz, kamu bisa mencapai 1–3 km di kota dan hingga 10 km di area terbuka. Konsekuensinya adalah kecepatan: dari beberapa ratus byte hingga beberapa kilobit per detik. Karena itu, LoRa tidak cocok untuk audio atau video, tetapi ideal untuk mengirim data pengukuran kecil seperti suhu, kelembapan, level air, status pintu, atau posisi GPS dalam jarak jauh.
Dalam panduan ini, kamu akan mempelajari langkah demi langkah bagaimana LoRa menjangkau jarak sejauh itu, pengaturan SF, BW, dan CR yang menentukan jangkauan, frekuensi yang tepat untuk wilayahmu, pengkabelan Ra-02 ke Arduino Uno, ESP32, dan Raspberry Pi Pico, kode pengirim dan penerima dengan library LoRa, pembacaan RSSI dan SNR, serta uji jangkauan nyata. Bagian terakhir menjelaskan perbedaan LoRa dan LoRaWAN, The Things Network (TTN), serta proyek sensor lapangan yang berjalan selama berbulan-bulan dengan baterai.
Apa itu LoRa dan bagaimana jangkauannya bisa begitu jauh?
LoRa menggunakan teknik yang disebut chirp spread spectrum (CSS). Setiap simbol dikirim sebagai “chirp” yang frekuensinya menyapu naik secara teratur melalui pita; informasi tersembunyi dalam frekuensi awal chirp tersebut. Ketika penerima mengalikan sinyal masuk dengan bentuk chirp yang sudah diketahui lalu menjumlahkannya, derau saling meniadakan sementara sinyal terakumulasi. Dengan demikian, LoRa mampu mendekode sinyal hingga 20 dB di bawah lantai derau. Modul ASK 433 MHz biasa membutuhkan sinyal yang jelas lebih kuat daripada derau, sedangkan LoRa dapat memahami sinyal yang nyaris tidak terdeteksi; inilah rahasia jangkauan yang jauh lebih panjang dengan daya output yang sama.
Konsekuensinya adalah waktu: semakin lama sebuah chirp berlangsung, semakin banyak energi yang dikumpulkan penerima dan semakin jauh jangkauannya, tetapi data yang sama dikirim lebih lambat. Dalam LoRa, jangkauan, kecepatan, dan umur baterai selalu saling terkait. Data pengukuran sebesar 20 byte membutuhkan sekitar 57 milidetik pada pengaturan tercepat dan 1,3 detik pada pengaturan dengan jangkauan terjauh. Tabel berikut membandingkan LoRa dengan pilihan komunikasi nirkabel lainnya di dunia Arduino.
| Fitur | LoRa (SX1278) | nRF24L01 | 433 MHz ASK | Wi-Fi (ESP32) |
|---|---|---|---|---|
| Jangkauan umum | 1–3 km di kota, hingga 10 km di area terbuka | 50–100 m (sekitar 1 km dengan PA+LNA) | 20–100 m | 50–100 m (ke router) |
| Laju data | 0,3–5,5 kbit/s (125 kHz) | 250 kbit/s – 2 Mbit/s | 1–10 kbit/s | Kisaran Mbit/s |
| Arus pemancaran | 40–120 mA (bergantung pada daya) | 11–12 mA | 10–40 mA | 120–240 mA |
| Arus sleep | Di bawah 1 µA | Sekitar 1 µA | Tidak ada (dimatikan) | 10 µA (deep sleep) |
| Dua arah | Ya | Ya | Tidak (pemancar dan penerima terpisah) | Ya |
| Infrastruktur | Tidak diperlukan | Tidak diperlukan | Tidak diperlukan | Router dan internet |
Modul LoRa: Ra-02, RFM95, E32, dan board siap pakai
Sebagian besar modul LoRa di pasaran memakai chip dari keluarga SX127x buatan Semtech. SX1276 mencakup 137–1020 MHz dan SX1278 mencakup 137–525 MHz, sehingga SX1278 digunakan dalam modul 433 MHz dan SX1276 dalam modul 868/915 MHz. Modul terbagi menjadi dua kelompok: radio “polos” yang berkomunikasi melalui SPI dan modul siap pakai dengan prosesor sendiri yang digunakan seperti port serial melalui UART.
| Modul | Chip | Frekuensi | Antarmuka | Catatan |
|---|---|---|---|---|
| Ai-Thinker Ra-02 | SX1278 | 433 MHz | SPI | Paling murah dan paling umum; konektor antena IPEX |
| Ai-Thinker Ra-01 | SX1278 | 433 MHz | SPI | Varian Ra-02 dengan antena pegas |
| HopeRF RFM95W | SX1276 | 868 / 915 MHz | SPI | Pilihan populer untuk LoRaWAN dan TTN |
| Ebyte E32 / E220 | SX1278 / LLCC68 | 433 / 868 MHz | UART | Memiliki prosesor sendiri; bekerja seperti port serial tanpa library |
| TTGO LoRa32, Heltec LoRa 32 | ESP32 + SX1276/78 | 433 / 868 / 915 MHz | Terpasang pada board | ESP32, LoRa, dan OLED dalam satu board |
| Fitur Ra-02 | Nilai |
|---|---|
| Chip | Semtech SX1278 |
| Rentang frekuensi | 410–525 MHz (umumnya 433 MHz) |
| Daya output maksimum | +18 dBm (sekitar 63 mW) |
| Sensitivitas penerima | Hingga -141 dBm (pada bandwidth tersempit) |
| Catu daya | 1,8–3,7 V, umumnya 3,3 V |
| Arus | Sekitar 40–120 mA ketika memancar, sekitar 12 mA ketika mendengarkan, di bawah 1 µA ketika sleep |
| Antarmuka | SPI (hingga 10 MHz) + pin interrupt DIO0 |
| Antena | Konektor IPEX (U.FL), membutuhkan antena 433 MHz |
Frekuensi mana: 433 MHz atau 868/915 MHz?
LoRa bekerja pada pita ISM bebas lisensi, tetapi pita ini berbeda antarnegara dan masing-masing memiliki batas daya serta duty cycle. Di Eropa, dua pita digunakan untuk LoRa: 433,05–434,79 MHz dan 863–870 MHz; di Amerika Utara, pitanya adalah 902–928 MHz. Jaringan LoRaWAN dan TTN menggunakan 868 MHz di Eropa dan 915 MHz di AS, sedangkan 433 MHz sangat umum untuk koneksi hobi titik-ke-titik dengan modul Ra-02 yang murah. Periksa wilayahmu sebelum membeli karena antena dan chip disetel untuk frekuensi tertentu; modul 868 MHz tidak akan bekerja pada 433 MHz.
| Wilayah | Frekuensi LoRa | Rencana frekuensi LoRaWAN |
|---|---|---|
| Eropa, Britania Raya, Turki | 433 MHz dan 863–870 MHz | EU868 (EU433 jarang digunakan) |
| AS, Kanada, Meksiko | 902–928 MHz | US915 |
| Brasil, Argentina, Australia | 915–928 MHz | AU915 |
| India | 865–867 MHz | IN865 |
| Jepang, Asia Tenggara | 920–923 MHz | AS923 |
| Tiongkok | 470–510 MHz (dan 433 MHz) | CN470 |
SF, BW, dan CR: tiga pengaturan yang menentukan jangkauan
Tiga parameter menentukan jangkauan dan kecepatan LoRa. Spreading Factor (SF) menentukan jumlah “chip” penyusun setiap simbol: dari SF7 hingga SF12, setiap kenaikan menggandakan durasi simbol, memungkinkan penerima mendekode sinyal yang sekitar 2,5 dB lebih lemah, tetapi hampir menggandakan durasi pemancaran. Tabel berikut dihitung untuk bandwidth 125 kHz, pengodean 4/5, dan paket 20 byte; kolom terakhir adalah waktu tunggu minimum antara dua paket untuk mematuhi duty cycle 1%.
| SF | Laju bit | Durasi paket 20 byte | Perkiraan sensitivitas | SNR terendah yang dapat didekode | Waktu tunggu pada duty cycle 1% |
|---|---|---|---|---|---|
| SF7 | 5,5 kbit/s | 57 ms | -123 dBm | -7,5 dB | 6 dtk |
| SF8 | 3,1 kbit/s | 103 ms | -126 dBm | -10 dB | 10 dtk |
| SF9 | 1,8 kbit/s | 185 ms | -129 dBm | -12,5 dB | 18 dtk |
| SF10 | 977 bit/s | 371 ms | -132 dBm | -15 dB | 37 dtk |
| SF11 | 537 bit/s | 741 ms | -134 dBm | -17,5 dB | 73 dtk |
| SF12 | 293 bit/s | 1319 ms | -137 dBm | -20 dB | 131 dtk |
Bandwidth (BW) adalah lebar bagian spektrum yang ditempati sinyal: 125 kHz merupakan nilai standar; 250 dan 500 kHz menggandakan dan melipatempatkan kecepatan, tetapi mengurangi sensitivitas sebesar 3 dan 6 dB, sedangkan 62,5 kHz ke bawah meningkatkan jangkauan, tetapi menjadi peka terhadap pergeseran frekuensi kristal murah. Coding Rate (CR) adalah tambahan data untuk koreksi galat: 4/5 menambahkan 1 bit koreksi untuk setiap 4 bit, sedangkan 4/8 menambahkan 4; ini membantu di lingkungan berderau, tetapi membuat paket lebih panjang. Rumus laju bitnya adalah Rb = SF × (BW / 2^SF) × 4 / (4 + CR); untuk SF9, 125 kHz, dan 4/5, hasilnya 9 × 125000 / 512 × 0,8 ≈ 1758 bit/s.
Pengkabelan Ra-02: Arduino Uno, ESP32, dan Pico
Selain empat jalur SPI (SCK, MISO, MOSI, NSS), Ra-02 memerlukan pin reset dan pin interrupt (DIO0). DIO0 menjadi HIGH ketika pemancaran selesai atau paket baru tiba; library LoRa menggunakannya sebagai interrupt. Pin DIO1–DIO5 modul boleh dibiarkan tidak terhubung untuk kode dalam panduan ini. Jika kamu baru mengenal SPI, baca artikel Apa Itu SPI? terlebih dahulu.
| Pin Ra-02 | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| 3.3V | Regulator 3,3 V eksternal | 3V3 | 3V3 (OUT) |
| GND | GND | GND | GND |
| SCK | D13 (melalui level shifter) | GPIO 18 | GP18 |
| MISO | D12 (langsung) | GPIO 19 | GP16 |
| MOSI | D11 (melalui level shifter) | GPIO 23 | GP19 |
| NSS | D10 (melalui level shifter) | GPIO 5 | GP17 |
| RESET | D9 (melalui level shifter) | GPIO 14 | GP20 |
| DIO0 | D2 (langsung, pin interrupt) | GPIO 26 | GP21 |
Antena sama pentingnya dengan pengkabelan. Pasang antena yang disetel untuk 433 MHz pada konektor IPEX Ra-02. Membuatnya sendiri mudah: panjang gelombangnya adalah 300 / 433 = 0,693 meter, dan kawat lurus sepanjang 17,3 cm sudah cukup untuk antena seperempat gelombang (8,6 cm untuk 868 MHz, 8,2 cm untuk 915 MHz). Posisikan antena secara vertikal, jangan letakkan di dalam kotak logam, dan pastikan antena pada kedua sisi mengarah sama (keduanya vertikal); antena yang saling tegak lurus kehilangan sebagian besar sinyal.
Langkah demi langkah: pengirim dengan library LoRa
- Buka Library Manager di Arduino IDE, ketik LoRa, lalu instal library LoRa buatan Sandeep Mistry.
- Hubungkan modul sesuai tabel, dan jangan pernah memancar tanpa antena terpasang.
- Upload kode berikut ke board yang akan menjadi pengirim; kode mendeteksi apakah board tersebut ESP32 atau Uno dan memilih pin yang sesuai.
- Buka Serial Monitor pada 115200 baud; kamu seharusnya melihat baris “Gonderildi / sent” setiap 5 detik.
- Jika LoRa.begin() gagal, periksa kabel, catu daya 3,3 V, serta pin NSS dan RESET.
1#include <SPI.h>
2#include <LoRa.h>
3
4#if defined(ESP32)
5const int PIN_SS = 5, PIN_RST = 14, PIN_DIO0 = 26; // ESP32 (VSPI: SCK 18, MISO 19, MOSI 23)
6#else
7const int PIN_SS = 10, PIN_RST = 9, PIN_DIO0 = 2; // Uno (SCK 13, MISO 12, MOSI 11) + seviye dönüştürücü / level shifter
8#endif
9
10const long FREKANS = 433E6; // Ra-02: 433 MHz; RFM95 için 868E6 / 868E6 for an RFM95
11unsigned long sayac = 0;
12
13void setup() {
14 Serial.begin(115200);
15 LoRa.setPins(PIN_SS, PIN_RST, PIN_DIO0);
16 if (!LoRa.begin(FREKANS)) { // SX1278 bulunamadı / SX1278 not found
17 Serial.println("LoRa baslatilamadi / LoRa init failed");
18 while (true) delay(1000);
19 }
20 LoRa.setSpreadingFactor(9); // SF9: menzil ile hız dengesi / range vs speed balance
21 LoRa.setSignalBandwidth(125E3); // 125 kHz bant genişliği / bandwidth
22 LoRa.setCodingRate4(5); // hata düzeltme 4/5 / error coding 4/5
23 LoRa.setSyncWord(0xF3); // iki tarafta aynı olmalı / must match on both sides
24 LoRa.enableCrc(); // bozuk paketi ele / drop corrupted packets
25 LoRa.setTxPower(10); // 10 dBm (433 MHz bandında yasal sınır) / legal limit on 433 MHz
26 Serial.println("Verici hazir / sender ready");
27}
28
29void loop() {
30 LoRa.beginPacket();
31 LoRa.print("BG #");
32 LoRa.print(sayac); // paket numarası / packet number
33 LoRa.endPacket(); // gönderim bitene kadar bekler / blocks until sent
34 Serial.print("Gonderildi / sent #");
35 Serial.println(sayac);
36 sayac++;
37 delay(5000); // havada kalma süresine göre bekle / wait according to airtime
38}
39| Fungsi | Apa kegunaannya? |
|---|---|
| LoRa.setPins(ss, reset, dio0) | Menentukan pin NSS, RESET, dan DIO0; panggil sebelum begin() |
| LoRa.begin(433E6) | Menjalankan modul dan mengatur frekuensi dalam Hz; mengembalikan 0 jika chip tidak ditemukan |
| setSpreadingFactor(6–12) | Pengaturan SF, default 7 |
| setSignalBandwidth(125E3) | Bandwidth, default 125 kHz |
| setCodingRate4(5–8) | Coding rate 4/5 – 4/8, default 4/5 |
| setSyncWord(0xF3) | Sync word, default 0x12 (LoRaWAN menggunakan 0x34) |
| enableCrc() | Menambahkan CRC ke paket; secara default nonaktif dalam library |
| setTxPower(2–20) | Daya output dalam dBm, default 17 |
| beginPacket() / print() / endPacket() | Menyiapkan, menulis, dan mengirim paket |
Penerima: membaca paket, RSSI, dan SNR
Kode penerima memeriksa pada setiap perulangan dengan LoRa.parsePacket() apakah paket baru sudah tiba; jika sudah, fungsi mengembalikan ukurannya dan isinya dibaca byte demi byte dengan LoRa.read(). Kode juga menghitung nomor paket yang terlewat untuk menghitung tingkat kehilangan paket, yang menjadi dasar uji jangkauan yang akan segera kita lakukan.
1#include <SPI.h>
2#include <LoRa.h>
3
4#if defined(ESP32)
5const int PIN_SS = 5, PIN_RST = 14, PIN_DIO0 = 26;
6#else
7const int PIN_SS = 10, PIN_RST = 9, PIN_DIO0 = 2;
8#endif
9
10long sonNo = -1; // son alınan paket numarası / last packet number
11unsigned long alinan = 0, kayip = 0;
12
13void setup() {
14 Serial.begin(115200);
15 LoRa.setPins(PIN_SS, PIN_RST, PIN_DIO0);
16 if (!LoRa.begin(433E6)) {
17 Serial.println("LoRa baslatilamadi / LoRa init failed");
18 while (true) delay(1000);
19 }
20 LoRa.setSpreadingFactor(9); // verici ile aynı ayarlar / same settings as the sender
21 LoRa.setSignalBandwidth(125E3);
22 LoRa.setCodingRate4(5);
23 LoRa.setSyncWord(0xF3);
24 LoRa.enableCrc();
25 Serial.println("Alici hazir / receiver ready");
26}
27
28void loop() {
29 int boyut = LoRa.parsePacket(); // paket geldi mi? / did a packet arrive?
30 if (boyut == 0) return;
31
32 String mesaj = "";
33 while (LoRa.available()) mesaj += (char)LoRa.read();
34
35 int diyez = mesaj.indexOf('#'); // "BG #123" içinden numara / number from "BG #123"
36 long no = (diyez >= 0) ? mesaj.substring(diyez + 1).toInt() : -1;
37 if (sonNo >= 0 && no > sonNo + 1) kayip += no - sonNo - 1; // atlanan numaralar kayıp / skipped numbers are lost
38 if (no >= 0) sonNo = no;
39 alinan++;
40
41 Serial.print(mesaj);
42 Serial.print(" RSSI: ");
43 Serial.print(LoRa.packetRssi()); // dBm, -120'ye yaklaştıkça zayıf / weaker towards -120
44 Serial.print(" dBm SNR: ");
45 Serial.print(LoRa.packetSnr(), 1); // dB, eksi değerler de çözülebilir / negative values still decode
46 Serial.print(" dB kayip / lost: ");
47 Serial.print(100.0 * kayip / (alinan + kayip), 1);
48 Serial.println(" %");
49}
50RSSI (Received Signal Strength Indicator) adalah kekuatan sinyal yang diterima, berupa angka negatif dalam dBm: -40 dBm sangat kuat, -120 dBm sangat lemah. SNR (Signal to Noise Ratio) menunjukkan seberapa kuat sinyal dibandingkan derau. Keistimewaan LoRa adalah SNR bisa bernilai negatif: pada SF9, paket masih dapat didekode hingga -12,5 dB. Untuk mengetahui apakah kamu mendekati batas jangkauan, perhatikan SNR lebih daripada RSSI; di kota yang berderau, SNR mungkin sudah mencapai batas meskipun RSSI sebesar -100 dBm.
| Pembacaan | Nilai | Arti |
|---|---|---|
| RSSI | -30 hingga -70 dBm | Sangat kuat; modul berdekatan |
| RSSI | -70 hingga -110 dBm | Koneksi bagus dan stabil |
| RSSI | -110 hingga -125 dBm | Lemah; pertimbangkan untuk menaikkan SF |
| SNR | +5 dB ke atas | Aman; kamu bisa meningkatkan kecepatan dengan SF lebih rendah |
| SNR | 0 hingga -10 dB | Zona operasi normal LoRa |
| SNR | Mendekati batas SF (-12 dB pada SF9) | Hampir terputus; naikkan SF atau perbaiki antena |
LoRa dengan ESP32: jembatan ke Wi-Fi

ESP32 adalah board paling mudah untuk LoRa: pin-pinnya sudah bertegangan 3,3 V, pin 3V3-nya dapat memasok arus yang dibutuhkan modul, dan bus VSPI (GPIO 18, 19, 23) digunakan langsung. Kode pengirim dan penerima di atas dapat dikompilasi pada ESP32 tanpa perubahan; baris #if defined(ESP32) memilih NSS = 5, RESET = 14, dan DIO0 = 26. Kita menghubungkan DIO0 ke GPIO 26, bukan GPIO 2, karena GPIO 2 adalah pin strapping yang memengaruhi cara chip melakukan boot. Kekuatan utama ESP32 adalah perannya sebagai jembatan: board ini dapat meneruskan data yang tiba melalui LoRa dari sensor di lapangan ke halaman web, server MQTT, atau Telegram melalui Wi-Fi. Board seperti TTGO LoRa32 dan Heltec LoRa 32 sudah menggabungkan ESP32, chip LoRa, dan layar OLED pada satu board; nomor pinnya berbeda, jadi periksa skema rangkaian board tersebut.
LoRa dengan Raspberry Pi Pico (MicroPython)
Pada Pico, kamu menghubungkan Ra-02 ke bus SPI0 (GP16 MISO, GP18 SCK, GP19 MOSI, GP17 NSS). Repositori resmi micropython-lib memiliki driver LoRa untuk chip SX127x; kamu bisa menginstalnya melalui pengelola paket Thonny atau dengan mpremote mip install lora-sync lora-sx127x. Driver menerima pengaturannya dalam bentuk dictionary; selama SF, bandwidth, dan sync word cocok dengan sisi Arduino, Pico dapat membaca paket dari pengirim Arduino di atas tanpa masalah. Driver melaporkan SNR sebagaimana tersimpan dalam register chip, yaitu empat kali nilai dB, sehingga kode membaginya dengan 4. Karena antena Ra-02 terhubung ke output PA_BOOST chip, pengaturan tx_ant harus berupa “PA_BOOST”; jika tidak, pancarannya akan sangat lemah.
1from machine import Pin, SPI
2from lora import SX1278 # mip: lora-sync + lora-sx127x paketleri / packages
3import time
4
5lora_cfg = {
6 "freq_khz": 433000, # Ra-02: 433 MHz
7 "sf": 9, # Arduino tarafıyla aynı / same as the Arduino side
8 "bw": "125", # kHz
9 "coding_rate": 5, # 4/5
10 "preamble_len": 8,
11 "syncword": 0xF3,
12 "tx_ant": "PA_BOOST", # Ra-02 anteni PA_BOOST çıkışında / Ra-02 antenna is on PA_BOOST
13 "output_power": 10, # dBm
14}
15
16spi = SPI(0, baudrate=2_000_000, sck=Pin(18), mosi=Pin(19), miso=Pin(16))
17modem = SX1278(spi=spi, cs=Pin(17), dio0=Pin(21), reset=Pin(20), lora_cfg=lora_cfg)
18
19while True:
20 paket = modem.recv(timeout_ms=10000) # 10 sn dinle / listen for 10 s
21 if paket and paket.valid_crc:
22 # snr kayıtta 4 katı tutulur / snr is stored as 4x in the register
23 print(bytes(paket), "RSSI:", paket.rssi, "dBm SNR:", paket.snr / 4, "dB")
24 elif paket:
25 print("CRC hatali paket / bad CRC")
26 else:
27 print("Paket yok / no packet")
28 time.sleep_ms(10)
29Uji jangkauan: berapa km jangkauan LoRa?
Satu-satunya cara mengetahui jangkauan sebenarnya adalah mengujinya. Letakkan pengirim di dekat jendela atau di atap rumah, hubungkan penerima ke laptop atau ke ESP32 + OLED yang ditenagai power bank, lalu catat RSSI, SNR, dan tingkat kehilangan paket sambil menjauh. Ketika tingkat kehilangan paket melebihi 10% atau SNR mendekati batas SF, kamu sudah mencapai batas jangkauan praktisnya. Ubah hanya satu hal dalam setiap pengujian (SF, antena, ketinggian) agar kamu bisa melihat penyebab perbedaannya. Kamu bisa mengukur jarak garis lurus antara dua titik dengan aplikasi peta di ponselmu.
| Lingkungan | Jangkauan umum (Ra-02, SF9–SF12, antena sederhana) | Faktor penentu |
|---|---|---|
| Di dalam ruangan atau gedung | Beberapa lantai, 100–500 m | Dinding beton dan logam |
| Kota padat | 1–3 km | Gedung, tanpa jalur pandang langsung |
| Pinggiran kota, desa | 3–6 km | Pepohonan dan bangunan rendah |
| Pedesaan terbuka, ladang | 5–10 km | Ketinggian antena dari tanah |
| Jalur pandang langsung antarpuncak bukit | 15 km atau lebih | Kelengkungan bumi dan penguatan antena |
- Tinggikan antena: tidak ada yang meningkatkan jangkauan lebih besar daripada ketinggian antena. Antena setinggi 5 meter, alih-alih 1 meter, memperpanjang jalur pandang langsung berkali-kali lipat.
- Gunakan antena yang tepat: antena pegas kecil bawaan modul memang praktis, tetapi tidak efisien; kawat seperempat gelombang sepanjang 17,3 cm atau antena cambuk luar ruangan memberikan perbedaan yang nyata.
- Naikkan SF: beralih dari SF9 ke SF12 memberikan penguatan sekitar 8 dB, yang di area terbuka berarti jarak kira-kira lebih dari dua kali lipat.
- Persempit bandwidth: menurunkan dari 125 kHz ke 62,5 kHz memberikan tambahan 3 dB, tetapi pergeseran frekuensi kristal antara kedua modul dapat menimbulkan masalah.
- Bebaskan zona Fresnel: meskipun jalur pandang langsung terlihat bebas, pohon atau bangunan di zona berbentuk elips antara kedua antena melemahkan sinyal; sedikit meninggikan antena mengatasi masalah ini.
- Jangan abaikan catu daya: lonjakan arus selama pemancaran dapat menurunkan tegangan jalur 3,3 V yang lemah dan mereset modul; tambahkan kapasitor 100 µF pada catu daya.
LoRa vs LoRaWAN: apa itu TTN?
Kedua istilah ini sering tertukar. LoRa hanyalah modulasi radio, yaitu lapisan fisik: dua modul saling mengirim paket secara langsung, dan kamu menentukan siapa mengirim apa kepada siapa. Semua contoh dalam panduan ini menggunakan LoRa titik-ke-titik. LoRaWAN adalah protokol jaringan yang dibangun di atas LoRa: perangkat (simpul akhir) mengirim paketnya ke gateway terdekat, gateway meneruskannya melalui internet ke server jaringan, lalu data mencapai aplikasimu dari sana. LoRaWAN menangani sendiri identitas perangkat, enkripsi AES-128, penyesuaian frekuensi dan SF secara otomatis (ADR), serta aturan duty cycle.
| Fitur | LoRa (titik-ke-titik) | LoRaWAN |
|---|---|---|
| Lapisan | Radio saja (lapisan fisik) | Radio + protokol jaringan (MAC) |
| Infrastruktur | Dua modul sudah cukup | Memerlukan gateway dan server jaringan |
| Enkripsi | Tidak ada, kamu menambahkannya sendiri | AES-128, wajib |
| Library Arduino | LoRa (Sandeep Mistry) | MCCI LoRaWAN LMIC, RadioLib |
| Frekuensi di Eropa | 433 atau 868 MHz, bebas memilih | Rencana kanal EU868 |
| Paling cocok untuk | Kebun sendiri, antardua gedung, remote | Jaringan sensor seluruh kota, banyak perangkat |
The Things Network (TTN) adalah jaringan LoRaWAN gratis berbasis komunitas yang terdiri dari gateway yang dipasang oleh sukarelawan. Jika ada gateway TTN di dekatmu, kamu bisa mendaftarkan perangkatmu dan membaca datanya melalui internet tanpa membangun gateway sendiri. Penggunaan gratis tunduk pada kebijakan penggunaan wajar: total durasi pemancaran sekitar 30 detik per perangkat per hari dan paling banyak 10 pesan downlink per hari. Karena TTN di Eropa menggunakan EU868 dan di AS menggunakan US915, Ra-02 433 MHz tidak cocok untuk jaringan ini; untuk TTN, pilih RFM95 yang sesuai dengan wilayahmu atau modul LoRaWAN siap pakai. Jika tidak ada gateway di sekitar, LoRa titik-ke-titik jauh lebih sederhana.
Proyek: sensor ladang dan kebun bertenaga baterai

Penggunaan klasik LoRa adalah mengambil data dari ladang tanpa listrik atau Wi-Fi, atau dari rumah kaca di ujung kebun. Kode ESP32 berikut mengukur kelembapan tanah, mengirim paket kecil berbentuk “T1,42,37” (ID simpul, nomor paket, persentase kelembapan), lalu menempatkan modul LoRa dan ESP32 dalam mode sleep dan bangun kembali 10 menit kemudian. Sensor diberi daya melalui GPIO 25 hanya selama pengukuran, sehingga tidak menarik arus selama sleep, dan pada sensor resistif, korosi elektrodanya juga berkurang. Kalibrasi sensor dibahas dalam artikel Sensor Kelembapan Tanah dan detail deep sleep dalam artikel deep sleep ESP32. Penerima di rumah bisa menggunakan kode penerima di atas dan memisahkan nilai pada tanda koma.
1#include <SPI.h>
2#include <LoRa.h>
3
4const int PIN_SS = 5, PIN_RST = 14, PIN_DIO0 = 26;
5const int NEM_PIN = 34; // toprak nem sensörü AO (yalnız giriş pini) / soil sensor AO (input-only pin)
6const int SENSOR_GUC = 25; // sensörü yalnız ölçerken besle / power the sensor only while measuring
7const int KURU = 3000, ISLAK = 1200; // kendi sensörünle kalibre et / calibrate with your sensor
8const uint64_t UYKU_US = 10ULL * 60 * 1000000; // 10 dakika / 10 minutes
9
10RTC_DATA_ATTR uint32_t paketNo = 0; // derin uykuda korunur / kept during deep sleep
11
12void setup() {
13 pinMode(SENSOR_GUC, OUTPUT);
14 digitalWrite(SENSOR_GUC, HIGH);
15 delay(200); // sensör otursun / let the sensor settle
16 int ham = analogRead(NEM_PIN);
17 digitalWrite(SENSOR_GUC, LOW);
18 int nem = constrain(map(ham, KURU, ISLAK, 0, 100), 0, 100); // % nem / % moisture
19
20 LoRa.setPins(PIN_SS, PIN_RST, PIN_DIO0);
21 if (LoRa.begin(433E6)) {
22 LoRa.setSpreadingFactor(10); // uzak tarla için daha yüksek SF / higher SF for a distant field
23 LoRa.setSignalBandwidth(125E3);
24 LoRa.setSyncWord(0xF3);
25 LoRa.enableCrc();
26 LoRa.setTxPower(10);
27 LoRa.beginPacket();
28 LoRa.print("T1,"); // düğüm kimliği / node id
29 LoRa.print(paketNo++);
30 LoRa.print(",");
31 LoRa.print(nem); // ör. "T1,42,37" / e.g. "T1,42,37"
32 LoRa.endPacket();
33 LoRa.sleep(); // SX1278 uykuda 1 uA altı / under 1 uA asleep
34 }
35 esp_sleep_enable_timer_wakeup(UYKU_US);
36 esp_deep_sleep_start(); // 10 dk sonra setup() baştan başlar / setup() restarts after 10 min
37}
38
39void loop() {}
40Mari perkirakan umur baterainya. Setiap 10 menit (600 detik), simpul bangun selama sekitar 0,5 detik dan menarik arus rata-rata sekitar 100 mA selama waktu tersebut; selama sleep, modul ESP32 polos dan Ra-02 bersama-sama menarik sekitar 15 µA. Arus rata-ratanya adalah (0,5 × 100) / 600 + 0,015 ≈ 0,1 mA; secara teori, sel 18650 berkapasitas 2000 mAh akan bertahan 20.000 jam, lebih dari dua tahun. Dalam praktiknya, self-discharge baterai dan rugi-rugi regulator memperpendek durasi ini. Perhatikan: board ESP32 DevKit siap pakai dapat menarik beberapa miliampere bahkan selama sleep karena chip USB-ke-serial dan regulator di dalamnya; arus sleep 5 mA membuat baterai yang sama hanya bertahan 17 hari. Untuk umur baterai yang panjang, gunakan regulator dengan arus diam rendah atau modul polos. Kamu bisa menghitung dengan nilaimu sendiri menggunakan kalkulator umur baterai.
Ide proyek LoRa
- Level tangki air jarak jauh: ukur tingkat isi tangki yang jauh dengan sensor level air dan kirim datanya ke rumah.
- Notifikasi kotak surat: deteksi terbukanya kotak surat di gerbang kebun dengan reed switch dan tampilkan pada layar di dalam rumah.
- Timbangan sarang lebah: kirim berat sarang beberapa kali sehari dengan load cell HX711.
- Pelacak GPS: lacak sepeda atau hewan yang berjarak beberapa kilometer dengan NEO-6M GPS.
- Pemantau iklim rumah kaca: terima suhu dan kelembapan rumah kaca melalui LoRa dan aktifkan peringatan di rumah ketika ambang terlampaui.
- Gateway-mu sendiri: teruskan data dari beberapa sensor LoRa ke Wi-Fi dengan satu ESP32 dan pantau di ponselmu.
Kesalahan umum dan solusinya
| Gejala | Kemungkinan penyebab | Solusi |
|---|---|---|
| “LoRa init failed” | Kabel SPI, pin NSS, atau RESET salah; tidak ada daya | Periksa pengkabelan dan nilai setPins(), ukur tegangan 3,3 V |
| Pengirim memancar, penerima tidak mendeteksi apa pun | Frekuensi, SF, BW, CR, atau sync word berbeda | Samakan pengaturan pada kedua sisi |
| Modul menjadi panas atau sama sekali tidak bekerja | Diberi catu daya 5 V atau menerima sinyal 5 V | Gunakan catu daya 3,3 V dan level shifter; modul mungkin sudah rusak |
| Board reset ketika memancar | Jalur 3,3 V tidak mampu menangani lonjakan arus | Regulator terpisah dan kapasitor 100 µF pada catu daya |
| Jangkauan hanya beberapa meter | Tidak ada antena atau antena untuk frekuensi yang salah | Pasang antena 433 MHz; memancar tanpa antena dapat merusak PA |
| Paket berisi karakter kacau | CRC nonaktif, paket berderau diterima | Panggil enableCrc() pada kedua sisi |
| Sebagian paket tidak pernah tiba | Paket terlalu sering, saling bertabrakan di udara | Perbesar interval paket sesuai durasi pemancaran |
Modul LoRa adalah cara termurah untuk membawa proyek Arduino keluar rumah, ke ladang, kebun, dan gedung sebelah: dengan frekuensi yang tepat, SF yang sesuai, dan antena yang bagus, kamu bisa membangun sensor berjarak beberapa kilometer yang bekerja berbulan-bulan dengan baterai. Untuk data cepat pada jarak lebih pendek, nRF24L01 atau ESP-NOW mungkin lebih cocok untukmu. Dalam aplikasi BlueGrays, kamu akan menemukan proyek komunikasi satu arah dan dua arah antara dua Arduino, penyiraman pintar, serta deep sleep ESP32 dengan skema rangkaian dan kode langkah demi langkah, dan kamu bisa menambahkan LoRa pada proyek-proyek tersebut.
Pertanyaan umum
Berapa jangkauan modul LoRa?
Modul SX1278 seperti Ra-02 dengan antena sederhana biasanya menjangkau 1–3 km di kota dan 5–10 km di area terbuka. Dengan antena yang dipasang tinggi dan jalur pandang langsung tanpa penghalang, jangkauan lebih dari 15 km bisa dicapai. Jangkauan terutama bergantung pada ketinggian antena, kualitas antena, dan pengaturan SF.
Apa perbedaan LoRa dan LoRaWAN?
LoRa hanyalah modulasi radio, dan dua modul saling mengirim paket secara langsung. LoRaWAN adalah protokol jaringan yang dibangun di atas LoRa: perangkat mengirim ke gateway, data mencapai server jaringan melalui internet, dan enkripsi serta pengelolaan perangkat ditangani oleh protokol. LoRa cocok untuk kebunmu sendiri; LoRaWAN cocok untuk jaringan seluruh kota.
Frekuensi LoRa mana yang harus kugunakan: 433, 868, atau 915 MHz?
Ini bergantung pada wilayahmu. Eropa menggunakan 433 MHz dan 863–870 MHz (EU868 untuk LoRaWAN), Amerika Utara menggunakan 902–928 MHz (US915), dan wilayah lain memiliki rencana frekuensi sendiri seperti AU915 atau AS923. Beli modul dan antena untuk pitamu, serta patuhi batas daya dan duty cycle setempat.
Bisakah modul LoRa dihubungkan ke Arduino 5 V?
Tidak secara langsung; SX1278 adalah chip 3,3 V dan sinyal 5 V akan merusaknya. Untuk menggunakannya dengan Arduino Uno, pasang level shifter pada jalur SCK, MOSI, NSS, dan RESET, lalu pasok daya modul dari regulator 3,3 V terpisah. ESP32 dan Raspberry Pi Pico bekerja pada 3,3 V sehingga bisa dihubungkan langsung.
Bisakah LoRa mengirim audio atau gambar?
Dalam praktiknya, tidak. Laju data LoRa pada bandwidth 125 kHz sekitar 0,3–5,5 kilobit per detik, dan aturan duty cycle membatasi seberapa sering kamu boleh memancar. Bahkan foto kecil akan membutuhkan beberapa menit; LoRa dirancang untuk data kecil seperti pembacaan sensor, posisi, dan pesan status.
Apa itu spreading factor (SF) dan nilai mana yang harus kugunakan?
SF menentukan durasi pemancaran setiap simbol LoRa; dari SF7 hingga SF12, setiap kenaikan meningkatkan jangkauan, tetapi membagi dua laju data dan menggunakan lebih banyak daya baterai. SF9 merupakan pilihan seimbang untuk memulai. Naikkan SF jika jangkauan belum cukup, turunkan ke SF7 jika kamu membutuhkan kecepatan pada jarak dekat; pengirim dan penerima harus menggunakan SF yang sama.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
Komunikasi Satu Arah Antara 2 Arduino
Kamu membuat dua Arduino berbicara lewat satu kabel: tekan tombol di satu board dan LED di board lain menyala, tekan lagi dan LED mati. Board pengirim melaporkan tekanan tombol dengan pesan singkat, d

Komunikasi Dua Arah Antara 2 Arduino
Dua Arduino disambung dengan kabel dan saling berbicara: tekan tombol di satu board dan lampu di board lain menyala, tekan lagi dan lampunya mati. Kedua board menjalankan program yang sama, jadi masin

Stasiun Penyiraman Pintar
Tukang kebun yang menyiram tanamanmu sendiri, supaya tanaman tidak kering ketika kamu berlibur. Sensor kelembapan tanah mengukur seberapa basah tanahnya; ketika kering, Arduino menyalakan pompa air be

Deep Sleep ESP32: Hemat Baterai (OLED + Penghitung RTC RAM)
Mode Deep Sleep ESP32 menurunkan konsumsi arus hingga ~10 µA dengan mematikan CPU dan sebagian besar periferal, sehingga sangat penting untuk perangkat IoT bertenaga baterai. Di proyek ini, kita memakai tiga sumber bangun yang berbeda: timer (15 detik), pin eksternal (EXT0, tombol GPIO 33), dan sentuhan (T0/GPIO 4). Variabel yang ditandai RTC_DATA_ATTR dipertahankan selama deep sleep; penghitung boot, penghitung bangun karena timer, dan penghitung bangun karena tombol terus dilacak.

Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)
Sistem alarm keamanan pintar yang menyalakan buzzer dan LED ketika sensor PIR mendeteksi gerakan, sekaligus mengirim notifikasi instan ke pemilik lewat Telegram. Cooldown 30 detik membatasi seberapa sering alarm berulang; mekanisme ini tidak memvalidasi deteksi PIR atau menghilangkan pemicu palsu. Cocok untuk rumah, garasi, gudang, atau ruang kerja. Dengan ESP32-CAM bisa ditambahkan notifikasi berfoto; dengan ESP32 DevKit V1 klasik, notifikasinya berupa teks.

Pencatat Data Suhu ESP32 (DHT22 + RTC DS1307 + microSD + OLED)
Buat pencatat suhu bercap waktu dengan ESP32! Baca suhu/kelembapan DHT22 setiap menit, ambil waktu sebenarnya dari RTC DS1307, dan catat ke kartu microSD sebagai CSV. OLED menampilkan suhu langsung (font besar), kelembapan, cap waktu, dan penghitung catatan. File /temp_log.csv bisa dibuka di Excel, Google Sheets, atau Python pandas; cocok untuk rumah kaca, suhu kamar, data laboratorium, penyimpanan makanan, atau sarang lebah.

Kendalikan LED dari Ponselmu lewat Bluetooth
Latihan kecil untuk menyalakan dan mematikan lampu kamarmu dari ponsel. Modul Bluetooth meneruskan huruf yang dikirim dari ponselmu ke Arduino; satu huruf menyalakan LED merah, huruf lain menyalakan L
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

