Päivitys (13 / 02 / 2026): Meillä on runsaasti varastossa kaikkia tuotteitamme, löydät meidät myös täältä ja    Lue lisää

Node-RED-palvelimen määrittäminen NMEA-signaalin vastaanottamiseksi etänä

GNSS RTK-teknologiaa voidaan käyttää monissa sovelluksissa. Yleensä otetaan joitakin mittauksia ja ne viedään tietokoneelle tietojen analysointia varten. Tämä on yleisin tapaus.
Mutta tietyissä sovelluksissa sinun on ehkä lähetettävä GNSS RTK -data tietokoneellesi/palvelimellesi reaaliajassa, jotta voit toimia välittömästi odottamatta muutaman tunnin käsittelyä.

Suosittuja sovelluksia, jotka vaativat reaaliaikaisen sijainnin lähettämisen palvelimelle, ovat: kalustonhallinta ja logistiikka, kyytipalvelut ja julkinen liikenne, omaisuuden seuranta, villieläinten seuranta jne.

Tässä opetusohjelmassa selitämme, kuinka palvelin määritetään Node-RED:llä, joka on suosittu visuaalisen ohjelmoinnin työkalu, jotta voit aloittaa oman projektisi. Käymme myös läpi, kuinka GNSS-vastaanotin ja -laajennus konfiguroidaan lähettämään dataa tälle palvelimelle.

Vaadittu laitteisto

Vaadittu ohjelmisto

  • GNSS Master sovellus Androidille

Node-REDin asennus

Etä-Linux-palvelin

Meidän tapauksessamme käytämme AlmaLinux-jakelua.
Avaa palvelimellesi johtava terminaali ja suorita seuraavat komennot:

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

Voit tarkistaa asennuksen onnistumisen kirjoittamalla:
/usr/local/bin/node-red --version

Jos kaikki on kunnossa, näet version terminaalissa.

Muut laitteet/käyttöjärjestelmät

Löydät ohjeet Node-RED-projektin viralliselta sivulta. eri järjestelmät.

Avaa TCP-portti palvelimellasi

Tämä ei välttämättä ole aina välttämätöntä, mutta saatat joutua avaamaan TCP-portin salliaksesi saapuvat yhteydet.
Käytämme tässä esimerkissä TCP-porttia 2222. Kirjoita palvelinpäätteelle:
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

Suorita Node-RED

Kirjoita tämä komento:
 /usr/local/bin/node-red &

Mene selaimeesi ja kirjoita:
172.123.123.123:1880
Missä 172.123.123.123 on oltava palvelimesi IP-osoite.
Jos kaikki on kunnossa, sinun pitäisi nähdä jotain tällaista:

Valmistele ensimmäinen työvirtasi

Node-REDissä projekteja kutsutaan Flow-projekteiksi.
Valmistelemme uuden työnkulun kuuntelemaan saapuvia TCP-yhteyksiä ja tulostamaan vastaanotetut tiedot debug-ikkunaan.

Vasemmanpuoleisessa paneelissa haetaan solmua nimeltä tcp sisään, vedä ja pudota se työntöalueelle.
Hae myös korjata virheet jstk solmu ja yhdistä ne toisiinsa näin:

Node-REDissä projekteja kutsutaan Flow-projekteiksi.
Valmistelemme uuden työnkulun kuuntelemaan saapuvia TCP-yhteyksiä ja tulostamaan vastaanotetut tiedot debug-ikkunaan.

Vasemmanpuoleisessa paneelissa haetaan solmua nimeltä tcp sisään, vedä ja pudota se työntöalueelle.
Hae myös korjata virheet jstk solmu ja yhdistä ne toisiinsa näin:

Kaksoisnapsauta solmun TCP-kohtaa ja aseta TCP-portti, jota haluat kuunnella, tässä esimerkissä: 2222.
Aseta myös striimaamaan merkkijonoja, jotka on erotettu \r\n-merkeillä.

Tämän jälkeen napsauta Ota käyttöön -painiketta näytön oikeassa yläkulmassa.
Tämä painike suorittaa lohkot minkä tahansa muokkauksen jälkeen.

Yhdistä GNSS-vastaanottimesi Node-REDiin

RTK Portable Bluetooth Kit Android-laitteella

  1. Yhdistä kannettava Bluetooth-pakettisi BT:n kautta Android-laitteeseesi.
  2. avoin GNSS Master sovelluksessa, yhdistä BT-moduuliin kohdassa GNSS-vastaanottimen yhteys.
  3. Aseta korjaussyöttö tarvittaessa
  4. Valitse Receiver Data Output -kohdasta TCP Client ja syötä palvelimesi IP-osoite TCP Address -kohtaan ja 2222 TCP Port -kohtaan. Napsauta Connect (Yhdistä).
  5. Siinä kaikki. Jos kaksoisnapsautat Node-RED:n debug-ikkunaa, sinun pitäisi nähdä jotain tällaista, kaikki vastaanotettavat tiedot:

Muut GNSS-vastaanottimet, joissa on 4G-, WiFi- tai Ethernet-liitännät

Jos sinulla on eri GNSS-vastaanotin, voit saavuttaa samat tulokset myös ilman Android-laitetta.
Varmista, että lähetät XBee-laajennuksen COM-porttiin viestit, jotka haluat lähettää palvelimellesi. Yleensä haluat lähettää ainakin seuraavat viestit: NMEA GGA.

Määritä sitten 4G-, WiFi- tai Ethernet NTRIP Master TCP-asiakastoiminnoilla varustetut laajennukset samoilla parametreilla kuin aiemmin, TCP-palvelin on palvelimesi IP-osoite, TCP-portti on 2222.

Niin yksinkertaista 🙂

Tee jotain datalla

Okei, ei kovin jännittävää tähän mennessä, vai mitä?
Palvelimellasi voi katsoa reaaliaikaisia ​​NMEA-striimejä, mutta haluamme nähdä joitakin Node-RED:n ominaisuuksia.
Seuraavassa esimerkissä näytämme, kuinka syötetietovirran jäsentäminen leveys- ja pituusasteen selvittämiseksi mahdollistaa, ja piirrämme reaaliaikaisen sijainnin kartalle, jossa näkyy vanhat sijainnit.

Poista ensin nykyinen työnkulkusi.
Klikkaa oikean yläkulman valikkoa > Hallitse palettia > Asenna > hae solmu-punainen-contrib-verkkomaailmankartta ja asentaa sen.

Palaa valikkoon > Tuo > Leikepöytä ja liitä seuraava koodi:

    
     [
  {
    "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": []
  }
]

    
   

Sinun pitäisi nähdä jotain tällaista:

Kaksoisnapsauta maailmankartan solmua.
Valitse karttaluettelon alasvetovalikosta OpenStreetMap tai jokin muu taso ja napsauta Valmis:

paina Sijoittaa painiketta.
Voit käyttää reaaliaikaista karttaa selaimestasi täältä:
172.123.123.123:1880/maailmankartta/
jossa IP-osoitteen on oltava sama kuin palvelimesi IP-osoite.

Näet kartan, jossa on merkki, joka näyttää GNSS-vastaanottimesi sijainnin. Kartta päivittyy reaaliajassa. Voit zoomata sisään/ulos haluamallasi tavalla.

Suosittelemme, että tutustut jokaiseen työnkulkusi solmuun ymmärtääksesi paremmin, mitä ne tekevät, muokataksesi niitä ja nähdäksesi, mikä muuttuu.

Löydät runsaasti opetusohjelmia ja tekoälytyökalut auttavat sinua myös, jos haluat tehdä jotain hieman edistyneempää.

Have fun!

Jos haluat sammuttaa Node-RED:n, toimi seuraavasti:
iptables -A INPUT -p tcp --dport 2222 -j REJECT

tyyppi ps aux | grep node , etsi solmuprosessi, jos , ja lopeta prosessi seuraavasti:
kill NODE_PROCESS_ID

Jos pidit tästä sisällöstä, voit seurata meitä Twitter, YouTube, Facebook or LinkedIn pysyäksesi ajan tasalla tällaisesta sisällöstä.

Onko sinulla kysyttävää tai pyyntöjä?
Ota meihin yhteyttä! Vastaamme <24 tuntia!

ikoni
Ota yhteyttä ArduSimple
lähellä
ArduSimple GNSS RTK -arviointitaulut on tehty helpoksi

Haluatko oppia lisää GPS:stä ja RTK:sta?

Jos olet juuri nyt kiireinen, insinöörimme voivat lähettää sinulle kolme lyhyttä sähköpostia, joissa kerrotaan kaikki tarvittavat tiedot projektisi aloittamiseksi.