Komponen · 13 mnt baca

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.

FiturLoRa (SX1278)nRF24L01433 MHz ASKWi-Fi (ESP32)
Jangkauan umum1–3 km di kota, hingga 10 km di area terbuka50–100 m (sekitar 1 km dengan PA+LNA)20–100 m50–100 m (ke router)
Laju data0,3–5,5 kbit/s (125 kHz)250 kbit/s – 2 Mbit/s1–10 kbit/sKisaran Mbit/s
Arus pemancaran40–120 mA (bergantung pada daya)11–12 mA10–40 mA120–240 mA
Arus sleepDi bawah 1 µASekitar 1 µATidak ada (dimatikan)10 µA (deep sleep)
Dua arahYaYaTidak (pemancar dan penerima terpisah)Ya
InfrastrukturTidak diperlukanTidak diperlukanTidak diperlukanRouter 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.

ModulChipFrekuensiAntarmukaCatatan
Ai-Thinker Ra-02SX1278433 MHzSPIPaling murah dan paling umum; konektor antena IPEX
Ai-Thinker Ra-01SX1278433 MHzSPIVarian Ra-02 dengan antena pegas
HopeRF RFM95WSX1276868 / 915 MHzSPIPilihan populer untuk LoRaWAN dan TTN
Ebyte E32 / E220SX1278 / LLCC68433 / 868 MHzUARTMemiliki prosesor sendiri; bekerja seperti port serial tanpa library
TTGO LoRa32, Heltec LoRa 32ESP32 + SX1276/78433 / 868 / 915 MHzTerpasang pada boardESP32, LoRa, dan OLED dalam satu board
Fitur Ra-02Nilai
ChipSemtech SX1278
Rentang frekuensi410–525 MHz (umumnya 433 MHz)
Daya output maksimum+18 dBm (sekitar 63 mW)
Sensitivitas penerimaHingga -141 dBm (pada bandwidth tersempit)
Catu daya1,8–3,7 V, umumnya 3,3 V
ArusSekitar 40–120 mA ketika memancar, sekitar 12 mA ketika mendengarkan, di bawah 1 µA ketika sleep
AntarmukaSPI (hingga 10 MHz) + pin interrupt DIO0
AntenaKonektor IPEX (U.FL), membutuhkan antena 433 MHz
SX1278 adalah chip 3,3 V dan pin-pinnya tidak tahan terhadap 5 V. Menghubungkan Ra-02 langsung ke pin 5V Arduino Uno atau jalur SPI 5 V akan merusaknya secara permanen. Catu dayanya harus selalu 3,3 V, dan dengan Uno kamu memerlukan level shifter pada jalur SPI (dijelaskan di bagian pengkabelan).

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.

WilayahFrekuensi LoRaRencana frekuensi LoRaWAN
Eropa, Britania Raya, Turki433 MHz dan 863–870 MHzEU868 (EU433 jarang digunakan)
AS, Kanada, Meksiko902–928 MHzUS915
Brasil, Argentina, Australia915–928 MHzAU915
India865–867 MHzIN865
Jepang, Asia Tenggara920–923 MHzAS923
Tiongkok470–510 MHz (dan 433 MHz)CN470
Menurut aturan Eropa, daya yang diizinkan pada pita 433 MHz umumnya 10 mW (10 dBm), dan pada subpita 868 MHz sebagian besar sebesar 25 mW dengan duty cycle 1%; dengan kata lain, perangkat yang memancar selama 1 detik harus diam selama 99 detik berikutnya. Daya maksimum Ra-02 sebesar 18 dBm melebihi batas tersebut, sehingga kode contoh menggunakan setTxPower(10). Periksa regulator radio nasionalmu untuk mengetahui batas yang tepat.

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%.

SFLaju bitDurasi paket 20 bytePerkiraan sensitivitasSNR terendah yang dapat didekodeWaktu tunggu pada duty cycle 1%
SF75,5 kbit/s57 ms-123 dBm-7,5 dB6 dtk
SF83,1 kbit/s103 ms-126 dBm-10 dB10 dtk
SF91,8 kbit/s185 ms-129 dBm-12,5 dB18 dtk
SF10977 bit/s371 ms-132 dBm-15 dB37 dtk
SF11537 bit/s741 ms-134 dBm-17,5 dB73 dtk
SF12293 bit/s1319 ms-137 dBm-20 dB131 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.

SF9, 125 kHz, 4/5 merupakan kombinasi yang seimbang untuk memulai. Jika jangkauannya belum cukup, naikkan SF satu tingkat setiap kali; jika kamu membutuhkan kecepatan, turunkan SF. Frekuensi, SF, BW, CR, dan sync word harus sama persis pada pengirim dan penerima; jika satu saja berbeda, penerima tidak akan mendeteksi paket apa pun. Sync word default adalah 0x12 dan digunakan oleh sebagian besar jaringan privat, sedangkan jaringan LoRaWAN menggunakan 0x34. Memilih nilaimu sendiri seperti 0xF3, sebagaimana dalam contoh, membantu menyaring paket dari perangkat hobi di sekitar dan LoRaWAN pada tingkat perangkat keras.

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-02Arduino UnoESP32Raspberry Pi Pico
3.3VRegulator 3,3 V eksternal3V33V3 (OUT)
GNDGNDGNDGND
SCKD13 (melalui level shifter)GPIO 18GP18
MISOD12 (langsung)GPIO 19GP16
MOSID11 (melalui level shifter)GPIO 23GP19
NSSD10 (melalui level shifter)GPIO 5GP17
RESETD9 (melalui level shifter)GPIO 14GP20
DIO0D2 (langsung, pin interrupt)GPIO 26GP21
Ada dua masalah dengan Uno. Pertama adalah tegangan: output SCK, MOSI, NSS, dan RESET Uno bertegangan 5 V; kamu harus menurunkannya ke 3,3 V dengan level shifter (misalnya 74HC4050) atau pembagi tegangan 2,2 kΩ + 3,3 kΩ pada setiap jalur. MISO dan DIO0 mengarah dari modul ke Uno, sehingga bisa dihubungkan langsung. Kedua adalah arus: pin 3.3V Uno mampu memasok sekitar 50 mA, sedangkan Ra-02 bisa menarik lebih dari 100 mA ketika memancar. Pasok daya modul dari regulator 3,3 V terpisah seperti AMS1117. Kedua masalah ini tidak muncul pada ESP32, Pico, atau Arduino Pro Mini 3,3 V.

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

  1. Buka Library Manager di Arduino IDE, ketik LoRa, lalu instal library LoRa buatan Sandeep Mistry.
  2. Hubungkan modul sesuai tabel, dan jangan pernah memancar tanpa antena terpasang.
  3. Upload kode berikut ke board yang akan menjadi pengirim; kode mendeteksi apakah board tersebut ESP32 atau Uno dan memilih pin yang sesuai.
  4. Buka Serial Monitor pada 115200 baud; kamu seharusnya melihat baris “Gonderildi / sent” setiap 5 detik.
  5. Jika LoRa.begin() gagal, periksa kabel, catu daya 3,3 V, serta pin NSS dan RESET.
C++ (Arduino IDE)
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
FungsiApa 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.

C++ (Arduino IDE)
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}
50

RSSI (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.

PembacaanNilaiArti
RSSI-30 hingga -70 dBmSangat kuat; modul berdekatan
RSSI-70 hingga -110 dBmKoneksi bagus dan stabil
RSSI-110 hingga -125 dBmLemah; pertimbangkan untuk menaikkan SF
SNR+5 dB ke atasAman; kamu bisa meningkatkan kecepatan dengan SF lebih rendah
SNR0 hingga -10 dBZona operasi normal LoRa
SNRMendekati batas SF (-12 dB pada SF9)Hampir terputus; naikkan SF atau perbaiki antena

LoRa dengan ESP32: jembatan ke Wi-Fi

Board pengembangan ESP32
ESP32: pin 3,3 V-nya terhubung ke Ra-02 tanpa level shifter, dan board ini dapat meneruskan data LoRa ke internet melalui Wi-Fi secara bersamaan.

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.

MicroPython
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)
29

Uji 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.

LingkunganJangkauan umum (Ra-02, SF9–SF12, antena sederhana)Faktor penentu
Di dalam ruangan atau gedungBeberapa lantai, 100–500 mDinding beton dan logam
Kota padat1–3 kmGedung, tanpa jalur pandang langsung
Pinggiran kota, desa3–6 kmPepohonan dan bangunan rendah
Pedesaan terbuka, ladang5–10 kmKetinggian antena dari tanah
Jalur pandang langsung antarpuncak bukit15 km atau lebihKelengkungan 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.

FiturLoRa (titik-ke-titik)LoRaWAN
LapisanRadio saja (lapisan fisik)Radio + protokol jaringan (MAC)
InfrastrukturDua modul sudah cukupMemerlukan gateway dan server jaringan
EnkripsiTidak ada, kamu menambahkannya sendiriAES-128, wajib
Library ArduinoLoRa (Sandeep Mistry)MCCI LoRaWAN LMIC, RadioLib
Frekuensi di Eropa433 atau 868 MHz, bebas memilihRencana kanal EU868
Paling cocok untukKebun sendiri, antardua gedung, remoteJaringan 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

Sensor kelembapan tanah
Sensor kelembapan tanah: simpul LoRa di ladang melakukan pengukuran dengan sensor ini dan mengirim paket ke rumah setiap 10 menit.

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.

C++ (Arduino IDE)
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() {}
40

Mari 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

GejalaKemungkinan penyebabSolusi
“LoRa init failed”Kabel SPI, pin NSS, atau RESET salah; tidak ada dayaPeriksa pengkabelan dan nilai setPins(), ukur tegangan 3,3 V
Pengirim memancar, penerima tidak mendeteksi apa punFrekuensi, SF, BW, CR, atau sync word berbedaSamakan pengaturan pada kedua sisi
Modul menjadi panas atau sama sekali tidak bekerjaDiberi catu daya 5 V atau menerima sinyal 5 VGunakan catu daya 3,3 V dan level shifter; modul mungkin sudah rusak
Board reset ketika memancarJalur 3,3 V tidak mampu menangani lonjakan arusRegulator terpisah dan kapasitor 100 µF pada catu daya
Jangkauan hanya beberapa meterTidak ada antena atau antena untuk frekuensi yang salahPasang antena 433 MHz; memancar tanpa antena dapat merusak PA
Paket berisi karakter kacauCRC nonaktif, paket berderau diterimaPanggil enableCrc() pada kedua sisi
Sebagian paket tidak pernah tibaPaket terlalu sering, saling bertabrakan di udaraPerbesar interval paket sesuai durasi pemancaran
Lakukan pengujian pertama dengan kedua modul di meja yang sama pada daya rendah (setTxPower(2)). Pada jarak sangat dekat, daya tinggi dapat membuat input penerima jenuh dan menyebabkan kehilangan paket. Setelah bekerja di meja, lanjutkan dengan menambah jaraknya.

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.

Lihat semua proyek
Komunikasi Satu Arah Antara 2 Arduino
#57Menengah
Premium

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

4.4(37)
50
Komunikasi Dua Arah Antara 2 Arduino
#58Menengah
Premium

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

4.5(20)
26
Stasiun Penyiraman Pintar
#83Mahir
Premium

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

5.0(42)
57
Deep Sleep ESP32: Hemat Baterai (OLED + Penghitung RTC RAM)
#135Mahir
Premium

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.

4.3(10)
16
Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)
#145Mahir
Premium

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.

0.0(0)
9
Pencatat Data Suhu ESP32 (DHT22 + RTC DS1307 + microSD + OLED)
#144Mahir
Premium

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.

4.7(7)
12
Kendalikan LED dari Ponselmu lewat Bluetooth
#34Pemula
Premium

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

4.8(68)
89