NMEA 0183 ke WiFi: Membaca Data Elektronik Kapal di HP dengan ESP32 & OpenCPN
GPS, kompas digital, depth sounder, sampai AIS di kapalmu semuanya "berbicara" lewat protokol NMEA 0183 — tapi biasanya lewat kabel, dan cuma bisa dibaca satu perangkat. Padahal asyik kalau data itu bisa tampil di HP semua awak kapal: posisi, kecepatan, kedalaman, arah angin, semua live. Caranya: pasang gateway NMEA 0183 ke WiFi — dan kamu bisa merakitnya sendiri dengan ESP32 seharga sekitar Rp150 ribuan. Artikel ini panduan lengkap dari nol: cara kerja, wiring, kode program siap copy-paste, sampai setting OpenCPN di HP.
1. Apa Itu Gateway NMEA-to-WiFi dan Cara Kerjanya
Gateway ini adalah jembatan kecil: satu sisi tersambung ke kabel NMEA 0183 perangkat kapalmu (mis. output GPS chart plotter), sisi lain memancarkan WiFi. Setiap kalimat NMEA yang diterima langsung diteruskan lewat jaringan ke HP, tablet, atau laptop yang terhubung. Alurnya sederhana:
GPS / Kompas / Sounder (NMEA 0183, 4800 baud)
|
| kabel TX+ / TX- / GND
v
[ Modul RS422-to-TTL ] --> [ ESP32 ] --WiFi--> HP / Laptop (OpenCPN)
192.168.4.1 : 10110
Kenapa ini berguna? Satu: tanpa kabel ke HP — tidak ada lagi kabel serial menjuntai di dashboard. Dua: banyak perangkat sekaligus — HP nahkoda, HP ABK, dan laptop di meja peta bisa membaca data yang sama. Tiga: murah — gateway pabrikan seperti ShipModul atau Digital Yacht harganya Rp1,5–3 jutaan; rakitan ESP32 totalnya sekitar Rp150 ribu.
2. Alat dan Bahan yang Dibutuhkan
1. Board ESP32 DevKit (±Rp65–95 ribu di Tokopedia). Pilih yang 30/38 pin dengan chip USB CH340 atau CP2102 supaya gampang di-flash dari laptop. Jangan pakai ESP32-CAM — pin-nya tidak cocok untuk tutorial ini.
2. Modul RS422-to-TTL (±Rp30–50 ribu). NMEA 0183 memakai sinyal diferensial RS-422 (±), sedangkan ESP32 hanya paham sinyal TTL 3,3V. Modul ini penerjemahnya. Modul berbasis MAX485 juga bisa dipakai — yang penting ada pin A, B, RO, dan RE/DE.
3. Kabel jumper, solder & timah secukupnya. Di kapal yang bergoyang, koneksi jumper longgar gampang lepas — solder semua sambungan permanen.
4. Catu daya 5V dari aki 12V. Paling gampang: charger USB mobil (colokan lighter 12V) yang bagus, lalu kabel USB ke ESP32. Jangan colok langsung 12V ke board — langsung mati.
5. Box plastik kedap air kecil (±Rp25 ribu). Elektronik dan air laut adalah musuh bebuyutan.
Total belanja: sekitar Rp150–200 ribu. Bandingkan dengan gateway pabrikan — hematnya hampir 90%.
3. Wiring: Menyambungkan NMEA 0183 ke ESP32
Ini bagian paling penting — salah sambung = tidak ada data (tapi tenang, salah sambung kabel data tidak merusak perangkat). Cari dulu output NMEA 0183 di perangkatmu: biasanya terminal berlabel NMEA OUT+ dan NMEA OUT- (atau TX+ / TX-, atau A / B), plus ground sinyal. Di chart plotter Garmin misalnya, ada di kabel power/data; di GPS handheld biasanya lewat kabel data khusus.
Skema sambungannya:
Sumber NMEA 0183 Modul RS422-to-TTL ESP32 DevKit
(talker: GPS/plotter) (MAX485/RS422)
───────────────────── ────────────────── ─────────────
TX+ (atau OUT+ / A) ---> A
TX- (atau OUT- / B) ---> B
GND (signal ground) ---> GND ---> GND
VCC ---> 3V3
RO ---> GPIO16 (RX2)
DI ---> GPIO17 (TX2)
RE dan DE ---> GND (*)
(*) RE dan DE disambung ke GND supaya modul selalu mode menerima — kita tidak perlu mengirim data balik ke perangkat kapal.
Catatan penting soal A/B: label A/B di modul murah kadang terbalik terhadap label TX+/TX- perangkat. Kalau setelah semua beres data tidak masuk-masuk, tukar posisi kabel A dan B — ini troubleshooting nomor satu di proyek seperti ini dan aman dilakukan.
Perangkat NMEA lama single-ended (cuma punya satu kabel TX + GND, tanpa TX-) juga bisa: sambung TX ke A, GND ke GND, dan biarkan B tidak tersambung. Mayoritas perangkat modern sudah diferensial (dua kabel), jadi pakai skema penuh di atas.
4. Kode Program ESP32 (Siap Copy-Paste)
Program ini melakukan tiga hal: membaca kalimat NMEA dari port serial pada 4800 baud, memancarkan WiFi access point bernama KAPAL-NMEA, dan meneruskan setiap kalimat ke semua HP/laptop yang terhubung lewat TCP port 10110 (port standar NMEA over network). Copy seluruh kode di bawah ke Arduino IDE:
#include <WiFi.h>
// ===== Konfigurasi: ubah sesuai keinginan =====
const char* AP_SSID = "KAPAL-NMEA"; // nama WiFi yang dipancarkan
const char* AP_PASS = "nmea0183"; // password WiFi (minimal 8 karakter)
const uint16_t TCP_PORT = 10110; // port standar NMEA over network
#define NMEA_RX_PIN 16 // GPIO16 -> sambung ke RO modul RS422
#define NMEA_TX_PIN 17 // GPIO17 -> sambung ke DI modul RS422
#define NMEA_BAUD 4800 // standar NMEA 0183 (AIS pakai 38400)
#define MAX_LINE 90 // kalimat NMEA maksimal 82 karakter
#define MAX_CLIENT 4 // maksimal 4 perangkat terhubung
WiFiServer server(TCP_PORT);
WiFiClient clients[MAX_CLIENT];
char lineBuf[MAX_LINE];
uint8_t linePos = 0;
void setup() {
Serial.begin(115200); // USB, untuk debug di laptop
Serial2.begin(NMEA_BAUD, SERIAL_8N1, NMEA_RX_PIN, NMEA_TX_PIN);
WiFi.mode(WIFI_AP);
WiFi.softAP(AP_SSID, AP_PASS);
server.begin();
Serial.println("Gateway NMEA 0183 -> WiFi siap.");
Serial.print("Hubungkan HP ke WiFi: ");
Serial.println(AP_SSID);
Serial.print("Alamat gateway: ");
Serial.println(WiFi.softAPIP()); // biasanya 192.168.4.1
}
// Teruskan hanya baris kalimat NMEA yang valid ($... atau !...)
bool validNmea(const char* s, uint8_t len) {
return len > 5 && (s[0] == '$' || s[0] == '!');
}
void broadcastLine(const char* s, uint8_t len) {
for (uint8_t i = 0; i < MAX_CLIENT; i++) {
if (clients[i] && clients[i].connected()) {
clients[i].write((const uint8_t*)s, len);
clients[i].write("\r\n");
}
}
}
void loop() {
// Terima HP/laptop yang baru terhubung
if (server.hasClient()) {
WiFiClient c = server.available();
bool placed = false;
for (uint8_t i = 0; i < MAX_CLIENT; i++) {
if (!clients[i] || !clients[i].connected()) {
clients[i] = c;
placed = true;
Serial.println("Perangkat terhubung ke gateway.");
break;
}
}
if (!placed) c.stop(); // slot penuh, tolak koneksi baru
}
// Baca kalimat NMEA dari serial, teruskan ke semua klien
while (Serial2.available()) {
char ch = (char)Serial2.read();
if (ch == '\n') {
lineBuf[linePos] = '\0';
if (validNmea(lineBuf, linePos)) {
broadcastLine(lineBuf, linePos);
Serial.println(lineBuf); // tampilkan juga di Serial Monitor
}
linePos = 0;
} else if (ch != '\r') {
if (linePos < MAX_LINE - 1) {
lineBuf[linePos++] = ch;
} else {
linePos = 0; // baris terlalu panjang, buang saja
}
}
}
}
Tidak perlu install library tambahan — WiFi.h sudah bawaan board ESP32 di Arduino IDE.
5. Flash Program dan Tes Awal
Langkah 1 — Install board ESP32 di Arduino IDE. Buka File → Preferences, tambahkan URL https://dl.espressif.com/dl/package_esp32_index.json ke "Additional Board Manager URLs", lalu install "esp32" lewat Tools → Board → Boards Manager. Pilih board DOIT ESP32 DEVKIT V1 dan port USB yang muncul.
Langkah 2 — Upload. Paste kode di atas, klik Upload. Kalau gagal upload, tahan tombol BOOT di board selama proses upload lalu lepas — ini kebiasaan board ESP32 murah.
Langkah 3 — Tes tanpa perangkat kapal dulu. Buka Tools → Serial Monitor (115200 baud) dan tekan tombol EN (reset). Harus muncul:
Gateway NMEA 0183 -> WiFi siap. Hubungkan HP ke WiFi: KAPAL-NMEA Alamat gateway: 192.168.4.1
Langkah 4 — Tes WiFi dari HP. Di HP, cari WiFi bernama KAPAL-NMEA, hubungkan dengan password nmea0183. HP akan protes "tidak ada koneksi internet" — itu normal, pilih tetap terhubung. Gateway ini memang tidak butuh internet; dia cuma jembatan data lokal di kapal.
Langkah 5 — Sambungkan kabel NMEA dan lihat datanya. Setelah wiring bagian 3 terpasang dan perangkat kapal menyala, kalimat NMEA akan mengalir di Serial Monitor, contohnya:
$GPGGA,011531.00,0607.42,S,10649.15,E,1,08,0.9,12.3,M,0.0,M,,*47 $GPRMC,011531.00,A,0607.42,S,10649.15,E,5.4,120.5,181026,,,A*6B $HCHDG,120.5,,,7.2,E*3A
$GPGGA/$GPRMC = posisi & kecepatan dari GPS, $HCHDG = arah dari kompas. Kalau baris-baris ini muncul, hardwarenya sudah benar 100%.
6. Setting OpenCPN di HP/Laptop: Menerima Data via WiFi
Sekarang bagian yang menyenangkan — data kapal tampil di HP. Di OpenCPN (Android maupun desktop), buka Options → Connections → Add Connection dan isi:
Tipe koneksi : Network Protokol : TCP Alamat : 192.168.4.1 Port : 10110 Prioritas : 1
Klik Apply, lalu buka jendela NMEA Debug (ikon kunci pas → NMEA Debug). Kalimat-kalimat NMEA akan mengalir di sana — tanda data sudah masuk. Ikon kapal di peta akan muncul di posisi GPS yang sebenarnya, dashboard bisa menampilkan kecepatan (SOG), arah (COG/HDG), dan kedalaman bila sounder ikut tersambung.
Untuk AIS (kalimat !AIVDM, baud 38400): gateway ini hanya satu channel 4800 baud. Opsinya — rakit gateway kedua dengan NMEA_BAUD diubah ke 38400 khusus untuk AIS, atau beli multiplexer NMEA pabrikan yang menggabungkan beberapa input. Jangan campur 4800 dan 38400 dalam satu port serial: hasilnya karakter rusak semua.
7. Troubleshooting: Masalah yang Paling Sering Muncul
Tidak ada data di Serial Monitor. Urutan cek: (1) tukar kabel A/B di modul — penyebab nomor satu; (2) pastikan baud rate perangkat memang 4800 (cek manual book; beberapa GPS modern default 38400); (3) pastikan GND tersambung — tanpa ground bersama, sinyal diferensial tidak terbaca; (4) pastikan perangkat kapal memang mengeluarkan kalimat NMEA di port itu (sebagian port perlu diaktifkan dulu di menu setting perangkat).
Data masuk tapi karakternya aneh/rusak. Baud rate salah — coba 4800, 9600, lalu 38400. Atau kabel terlalu panjang tanpa shield — untuk NMEA 0183 usahakan di bawah 10 meter, pakai kabel shielded bila lewat dekat kabel mesin.
WiFi KAPAL-NMEA tidak muncul di HP. Tekan tombol EN (reset) di ESP32 sekali. Pastikan tidak ada salah ketik di SSID/password — password minimal 8 karakter, kalau kurang dari itu AP gagal start diam-diam.
OpenCPN tidak bisa connect ke 192.168.4.1:10110. Pastikan HP benar-benar terhubung ke WiFi KAPAL-NMEA (bukan data seluler — matikan data seluler sementara saat tes). Di Android 10+, izinkan "tetap terhubung" saat HP protes tidak ada internet.
Data terputus-putus. ESP32 kepanasan di box tertutup — beri lubang ventilasi kecil (tapi tetap hindari cipratan air langsung). Atau catu daya USB tidak stabil — ganti charger mobil yang lebih bagus.
8. Tips Instalasi Permanen di Kapal
Pengaman listrik: pasang sekering (fuse) 1A di jalur positif 12V sebelum charger USB. Aki kapal bisa mengeluarkan arus besar saat korsleting — sekering 5 ribuan ini penyelamat.
Penempatan: taruh box gateway dekat perangkat NMEA (kabel data pendek = sinyal bagus), tapi jauhkan antena WiFi dari kotak besi dan minimal 1 meter dari antena VHF — pemancar VHF bisa mengganggu WiFi saat transmit.
Mode client sebagai alternatif: kalau kapalmu sudah punya router WiFi (mis. dari MiFi), kode di atas bisa diubah ke mode station supaya gateway ikut ke jaringan yang ada — tapi untuk kebanyakan kapal kecil, mode access point bawaan sudah paling praktis: tidak tergantung perangkat lain.
Jangan jadikan satu-satunya sumber data navigasi. Gateway DIY ini hebat untuk monitoring, tapi untuk navigasi utama tetap andalkan perangkat marine yang semestinya. Anggap gateway ini sebagai "layar kedua" yang murah meriah.
Dengan modal sekitar Rp150 ribu dan satu sore waktu luang, kapalmu sekarang punya data elektronik yang bisa dibaca semua HP di atas kapal — kemampuan yang dulu cuma dimiliki kapal dengan sistem seharga belasan juta. Selamat merakit, dan selamat bernavigasi!
Baca juga: AIS: Panduan Lengkap Memahami Data Kapal dan Peta Laut Digital: Panduan Lengkap CM93 & ENC di OpenCPN.
Komentar
Posting Komentar