Update (13 / 02 / 2026): Kami memiliki banyak stok semua produk kami, temukan kami juga di dan    Toko sekarang

Cara mengatur server Node-RED untuk menerima NMEA dari jarak jauh

GNSS Teknologi RTK dapat digunakan dalam berbagai aplikasi. Biasanya, Anda akan melakukan beberapa pengukuran, lalu mengekspornya ke komputer untuk menganalisis data. Ini adalah kasus yang paling umum.
Namun untuk aplikasi tertentu, Anda mungkin perlu mengirim data GNSS RTK ke komputer/server Anda secara real-time, sehingga Anda dapat segera mengambil tindakan tanpa menunggu beberapa jam untuk memproses data.

Aplikasi populer yang memerlukan pengiriman posisi waktu nyata ke server meliputi: manajemen armada dan logistik, transportasi online dan transportasi umum, pelacakan aset, pemantauan satwa liar, …

Dalam tutorial ini, kami akan menjelaskan cara menyiapkan server dengan Node-RED, yang merupakan alat populer untuk pemrograman visual, sehingga Anda dapat memulai proyek Anda sendiri, kami juga akan membahas cara mengonfigurasi penerima GNSS dan plugin untuk mengirim data ke server ini.

Perangkat keras yang diperlukan

Perangkat lunak yang diperlukan

  • GNSS Master aplikasi untuk Android

Instalasi Node-RED

Server Linux jarak jauh

Dalam kasus kami, kami menggunakan distribusi AlmaLinux.
Buka terminal ke server Anda dan jalankan perintah berikut:

sudo dnf module reset -y nodejs
sudo dnf module enable -y nodejs:20
sudo dnf install -y nodejs npm gcc-c++ make
# then:
sudo npm i -g --unsafe-perm node-red

Anda dapat memeriksa apakah instalasi berhasil dengan mengetik:
/usr/local/bin/node-red --version

Jika semuanya baik-baik saja, Anda akan melihat versi yang ditampilkan di terminal.

Perangkat/OS lain

Anda dapat menemukan petunjuk di halaman resmi proyek Node-RED untuk sistem yang berbeda.

Buka port TCP di server Anda

Ini mungkin tidak selalu diperlukan tetapi Anda mungkin perlu membuka port TCP untuk mengizinkan koneksi masuk.
Kami akan menggunakan port TCP 2222 dalam contoh ini, Anda harus mengetik di terminal server Anda:
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

Jalankan Node-RED

Ketikkan perintah ini:
 /usr/local/bin/node-red &

Buka peramban Anda dan ketik:
172.123.123.123:1880
Di mana 172.123.123.123 harus menjadi alamat IP server Anda.
Jika semuanya baik-baik saja, Anda akan melihat sesuatu seperti ini:

Siapkan aliran pertama Anda

Dalam Node-RED, proyek disebut Flow.
Kami akan menyiapkan alur baru untuk mendengarkan koneksi TCP yang masuk dan mencetak apa pun yang diterima ke dalam jendela debug.

Cari di panel kiri, node yang disebut tcp masuk, seret dan letakkan ke kanvas alur.
Cari juga men-debug simpul dan hubungkan keduanya seperti ini:

Dalam Node-RED, proyek disebut Flow.
Kami akan menyiapkan alur baru untuk mendengarkan koneksi TCP yang masuk dan mencetak apa pun yang diterima ke dalam jendela debug.

Cari di panel kiri, node yang disebut tcp masuk, seret dan letakkan ke kanvas alur.
Cari juga men-debug simpul dan hubungkan keduanya seperti ini:

Klik dua kali pada node tcp dan atur port TCP tempat Anda ingin mendengarkan, dalam contoh ini: 2222.
Tetapkan juga untuk mengalirkan string yang dibatasi oleh \r\n.

Setelah melakukan ini klik tombol Deploy di kanan atas layar.
Tombol ini akan menjalankan blok setelah modifikasi apa pun.

Hubungkan penerima GNSS Anda ke Node-RED

RTK Portable Bluetooth Kit dengan perangkat Android

  1. Hubungkan Perangkat Bluetooth Portabel Anda melalui BT ke perangkat Android Anda.
  2. Open GNSS Master aplikasi, sambungkan ke modul BT di Koneksi Penerima GNSS.
  3. Atur Input Koreksi jika diperlukan
  4. Pada Output Data Penerima, pilih Klien TCP dan masukkan alamat IP server Anda di Alamat TCP dan 2222 di Port TCP. Klik Sambungkan.
  5. Itu saja, jika Anda mengklik dua kali pada jendela debug di Node-RED Anda akan melihat sesuatu seperti ini, dengan semua data yang diterima:

Penerima GNSS lain dengan plugin 4G, WiFi atau Ethernet

Jika Anda memiliki penerima GNSS yang berbeda, Anda juga dapat memperoleh hasil yang sama, bahkan tanpa perangkat Android.
Pastikan untuk mengeluarkan ke port COM plugin XBee pesan yang ingin Anda kirim ke server Anda, biasanya Anda ingin mengirim, setidaknya, NMEA GGA.

Kemudian, konfigurasikan 4G, WiFi atau Ethernet NTRIP Master plugin dengan fungsionalitas klien TCP dengan parameter yang sama seperti yang telah kita lakukan sebelumnya, server TCP adalah alamat IP server Anda, port TCP adalah 2222.

Sesederhana itu 🙂

Lakukan sesuatu dengan data tersebut

Oke, sejauh ini tidak terlalu menarik kan?
Tidak apa-apa untuk melihat aliran NMEA langsung di server Anda, tetapi kami ingin melihat beberapa kemampuan Node-RED.
Pada contoh berikutnya, kami akan menunjukkan cara mengurai aliran input untuk mendapatkan lintang dan bujur dan kami akan memplot lokasi saat ini di peta dengan jejak yang menunjukkan lokasi lama.

Pertama-tama, hapus aliran Anda saat ini.
Klik menu kanan atas > Kelola palet > Instal > cari node-red-contrib-web-peta dunia dan menginstalnya.

Kembali ke menu > Impor > Papan Klip dan tempel kode berikut:

    
     [
  {
    "id": "tab1",
    "type": "tab",
    "label": "GNSS Live Map + Track",
    "disabled": false,
    "info": ""
  },
  {
    "id": "tcpInNmea2222",
    "type": "tcp in",
    "z": "tab1",
    "name": "NMEA TCP 2222",
    "server": "server",
    "host": "",
    "port": "2222",
    "datamode": "stream",
    "datatype": "utf8",
    "newline": "\\r\\n",
    "topic": "",
    "base64": false,
    "x": 150,
    "y": 140,
    "wires": [
      [
        "fnGGA"
      ]
    ]
  },
  {
    "id": "fnGGA",
    "type": "function",
    "z": "tab1",
    "name": "Filter GGA → {lat,lon}",
    "func": "// Allman style\nfunction nmeaToDecimal(raw, hemi)\n{\n    if (!raw || !hemi)\n    {\n        return null;\n    }\n    const isLat = (hemi === 'N' || hemi === 'S');\n    const degDigits = isLat ? 2 : 3;\n    const deg = parseInt(raw.slice(0, degDigits), 10);\n    const min = parseFloat(raw.slice(degDigits));\n    if (Number.isNaN(deg) || Number.isNaN(min))\n    {\n        return null;\n    }\n    let dec = deg + (min / 60.0);\n    if (hemi === 'S' || hemi === 'W')\n    {\n        dec = -dec;\n    }\n    return dec;\n}\n\nif (typeof msg.payload !== 'string')\n{\n    return null;\n}\n\nconst line = msg.payload.trim();\nif (!line.startsWith('$') || line.indexOf('GGA,') === -1)\n{\n    return null;\n}\n\nconst f = line.split(',');\nconst lat = nmeaToDecimal(f[2], f[3]);\nconst lon = nmeaToDecimal(f[4], f[5]);\nif (lat == null || lon == null)\n{\n    return null;\n}\n\nmsg.payload = { lat, lon };\nreturn msg;",
    "outputs": 1,
    "noerr": 0,
    "initialize": "",
    "finalize": "",
    "libs": [],
    "x": 410,
    "y": 140,
    "wires": [
      [
        "fnToWorldmap"
      ]
    ]
  },
  {
    "id": "fnToWorldmap",
    "type": "function",
    "z": "tab1",
    "name": "Marker + Track",
    "func": "// Input: msg.payload={lat,lon}\n// Output1 → worldmap marker\n// Output2 → worldmap-tracks polyline (then wired into worldmap)\n\nif (!msg.payload || msg.payload.lat == null || msg.payload.lon == null)\n{\n    return null;\n}\n\nconst lat = Number(msg.payload.lat);\nconst lon = Number(msg.payload.lon);\nconst name = \"GPS-1\"; // keep constant per device\nconst now = Date.now();\n\nconst base =\n{\n    name: name,\n    lat: lat,\n    lon: lon,\n    layer: \"GNSS\",\n    time: now, // helps pruning\n    icon: \"fa-location-arrow\",\n    popup: `Lat: ${lat.toFixed(6)}<br>Lon: ${lon.toFixed(6)}<br>UTC: ${new Date(now).toISOString()}`\n};\n\nreturn [ { payload: base }, { payload: base } ];",
    "outputs": 2,
    "noerr": 0,
    "initialize": "",
    "finalize": "",
    "libs": [],
    "x": 650,
    "y": 140,
    "wires": [
      [
        "worldmap",
        "dbgMarker"
      ],
      [
        "tracks"
      ]
    ]
  },
  {
    "id": "tracks",
    "type": "worldmap-tracks",
    "z": "tab1",
    "name": "Track GNSS (layer GNSS)",
    "depth": "1000",
    "layer": "GNSS",
    "doors": "",
    "x": 930,
    "y": 180,
    "wires": [
      [
        "worldmap"
      ]
    ]
  },
  {
    "id": "worldmap",
    "type": "worldmap",
    "z": "tab1",
    "name": "Live Map (/worldmap)",
    "lat": "0",
    "lon": "0",
    "zoom": "2",
    "layer": "OSM",
    "cluster": "",
    "maxage": "",
    "usermenu": "show",
    "layers": "show",
    "panit": "false",
    "panlock": "false",
    "zoomlock": "false",
    "hiderightclick": "false",
    "coords": "none",
    "showgrid": "false",
    "showruler": "false",
    "showlayer": "true",
    "showmenu": "true",
    "path": "/worldmap",
    "overlist": "DR,CO,RA,DN,HM",
    "maplist": "OSM,Esri Terrain,Esri Satellite",
    "mapname": "",
    "mapurl": "",
    "mapopt": "",
    "kmlurl": "",
    "devicelabel": "name",
    "layercontrol": "false",
    "x": 930,
    "y": 120,
    "wires": []
  },
  {
    "id": "dbgMarker",
    "type": "debug",
    "z": "tab1",
    "name": "Marker payload",
    "active": false,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "statusVal": "",
    "statusType": "auto",
    "x": 930,
    "y": 220,
    "wires": []
  },
  {
    "id": "hint",
    "type": "comment",
    "z": "tab1",
    "name": "Send NMEA (\\r\\n delimited) to TCP 2222. Open http://<host>:1880/worldmap",
    "info": "",
    "x": 330,
    "y": 90,
    "wires": []
  }
]

    
   

Anda akan melihat sesuatu seperti ini:

Klik dua kali simpul peta dunia.
Pada daftar turun bawah Peta, pilih OpenStreetMap atau lapisan lain, klik Selesai:

Tekan Menyebarkan .
Anda dapat mengakses peta langsung di sini dari browser Anda:
172.123.123.123:1880/peta dunia/
di mana alamat IP harus sama dengan alamat IP server Anda.

Anda akan melihat peta dengan penanda yang menunjukkan lokasi penerima GNSS Anda, diperbarui secara real time, Anda dapat memperbesar/memperkecil sesuai keinginan.

Kami sarankan Anda mengamati setiap simpul pada alur Anda untuk lebih memahami apa yang mereka lakukan, memodifikasinya, dan melihat perubahan apa yang terjadi.

Anda akan menemukan banyak tutorial dan alat AI juga akan membantu Anda jika Anda ingin melakukan sesuatu yang sedikit lebih maju.

Have fun!

Jika Anda ingin mematikan Node-RED, silakan lakukan hal berikut:
iptables -A INPUT -p tcp --dport 2222 -j REJECT

mengetik ps aux | grep node , temukan proses simpul jika dan hentikan proses dengan:
kill NODE_PROCESS_ID

Jika Anda menyukai konten ini, Anda dapat mengikuti kami di Twitter, Youtube, Facebook or LinkedIn untuk tetap update konten seperti ini.

Punya pertanyaan atau permintaan?
Hubungi kami! Kami akan menjawab <24 jam!

Ikon
Kontak ArduSimple
Penyelesaian
ArduSimple Papan evaluasi GNSS RTK dibuat mudah

Ingin mempelajari lebih lanjut tentang GPS dan RTK?

Jika Anda sedang sibuk saat ini, teknisi kami dapat mengirimkan 3 email singkat yang menjelaskan semua yang perlu Anda ketahui untuk memulai proyek Anda.