Ažuriranje (06.): Imamo dosta zaliha svih naših proizvoda, pronađite nas i ovdje i    Kupi

Kako postaviti Node-RED server za daljinsko primanje NMEA signala

GNSS RTK tehnologija može se koristiti u mnogim primjenama, obično biste izvršili neka mjerenja, a zatim ih izvezli na računalo za analizu podataka. Ovo je najčešći slučaj.
No za određene primjene možda ćete morati poslati svoje GNSS RTK podatke na svoje računalo/poslužitelj u stvarnom vremenu, tako da možete odmah poduzeti radnje bez čekanja nekoliko sati na obradu podataka.

Popularne aplikacije koje zahtijevaju slanje pozicije u stvarnom vremenu na poslužitelj uključuju: upravljanje voznim parkom i logistiku, usluge prijevoza i javni prijevoz, praćenje imovine, praćenje divljih životinja, ...

U ovom tutorialu objasnit ćemo kako postaviti poslužitelj s Node-RED-om, popularnim alatom za vizualno programiranje, tako da možete započeti vlastiti projekt, a također ćemo pokriti kako konfigurirati vaš GNSS prijemnik i dodatak za slanje podataka na ovaj poslužitelj.

Potreban hardver

Potreban softver

  • GNSS Master aplikacija za Android

Instalacija Node-RED-a

Udaljeni Linux poslužitelj

U našem slučaju koristimo AlmaLinux distribuciju.
Otvorite terminal na vašem serveru i pokrenite sljedeće naredbe:

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

Možete provjeriti je li instalacija uspješna upisivanjem:
/usr/local/bin/node-red --version

Ako je sve u redu, vidjet ćete verziju prikazanu na terminalu.

Ostali uređaji/OS

Upute možete pronaći na službenoj stranici projekta Node-RED. različiti sustavi.

Otvorite TCP port na svom serveru

To možda nije uvijek potrebno, ali možda ćete morati otvoriti TCP port kako biste omogućili dolazne veze.
U cijelom ovom primjeru koristit ćemo TCP port 2222, a vi trebate upisati na terminal vašeg servera:
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

Pokreni Čvor-RED

Upišite ovu naredbu:
 /usr/local/bin/node-red &

Idite u svoj preglednik i upišite:
172.123.123.123:1880
Gdje 172.123.123.123 mora biti IP adresa vašeg poslužitelja.
Ako je sve u redu, trebali biste vidjeti nešto ovako:

Pripremite svoj prvi tok

U Node-RED-u, projekti se nazivaju Flows (Tokovi).
Pripremit ćemo novi tok za slušanje dolaznih TCP veza i ispis svega što se primi u prozor za ispravljanje grešaka.

Pretražite na lijevoj ploči, čvor pod nazivom tcp u, povucite i ispustite ga na platno protoka.
Pretražite i otkloniti neispravnost čvor i spojite ih zajedno ovako:

U Node-RED-u, projekti se nazivaju Flows (Tokovi).
Pripremit ćemo novi tok za slušanje dolaznih TCP veza i ispis svega što se primi u prozor za ispravljanje grešaka.

Pretražite na lijevoj ploči, čvor pod nazivom tcp u, povucite i ispustite ga na platno protoka.
Pretražite i otkloniti neispravnost čvor i spojite ih zajedno ovako:

Dvaput kliknite na tcp u čvoru i postavite TCP port na kojem želite slušati, u ovom primjeru: 2222.
Postavi i za strujanje nizova razdvojenih s \r\n.

Nakon što je ovo učinio kliknite gumb Rasporedi u gornjem desnom kutu ekrana.
Ovaj gumb će pokrenuti blokove nakon bilo kakve izmjene.

Spojite svoj GNSS prijemnik na Node-RED

RTK Portable Bluetooth Kit s Android uređajem

  1. Spojite svoj prijenosni Bluetooth komplet putem BT-a na svoj Android uređaj.
  2. Otvoren GNSS Master aplikaciji, spojite se na BT modul u odjeljku Veza s GNSS prijemnikom.
  3. Po potrebi postavite unos za korekciju
  4. U odjeljku Izlaz podataka prijemnika odaberite TCP klijent i unesite IP adresu vašeg poslužitelja u TCP adresu i 2222 u TCP port. Kliknite Poveži se.
  5. To je sve, ako dvaput kliknete na prozor za otklanjanje pogrešaka u Node-RED-u trebali biste vidjeti nešto poput ovoga, sa svim primljenim podacima:

Ostali GNSS prijemnici s 4G, WiFi ili Ethernet dodacima

Ako imate drugačiji GNSS prijemnik, možete postići iste rezultate, čak i bez Android uređaja.
Obavezno pošaljite poruke koje želite poslati na svoj poslužitelj na COM port XBee dodatka, obično želite poslati barem NMEA GGA.

Zatim konfigurirajte svoj 4G, WiFi ili Ethernet NTRIP Master dodaci s funkcionalnošću TCP klijenta s istim parametrima kao i prije, TCP poslužitelj je IP adresa vašeg poslužitelja, TCP port je 2222.

Jednostavno kao to 🙂

Učinite nešto s podacima

Ok, zasad nije baš uzbudljivo, zar ne?
U redu je vidjeti NMEA streamove uživo na vašem serveru, ali želimo vidjeti neke od mogućnosti Node-RED-a.
U sljedećem primjeru pokazat ćemo vam kako parsirati ulazni tok kako bismo dobili zemljopisnu širinu i dužinu te ćemo prikazati lokaciju uživo na karti s tragom koji prikazuje stare lokacije.

Prije svega, izbrišite svoj trenutni tok.
Kliknite na izbornik gore desno > Upravljanje paletom > Instaliraj > pretraži node-red-contrib-web-karta-svijeta i instalirati ga.

Vratite se na izbornik > Uvoz > Međuspremnik i zalijepite sljedeći kod:

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

    
   

Trebali biste vidjeti nešto poput ovoga:

Dvaput kliknite čvor karte svijeta.
Na padajućem popisu Karta odaberite OpenStreetMap ili neki drugi sloj, kliknite Gotovo:

Pritisnite razviti tipku.
Ovdje možete pristupiti karti uživo iz svog preglednika:
172.123.123.123:1880/karta svijeta/
gdje IP adresa mora biti ista kao i adresa vašeg poslužitelja.

Vidjet ćete kartu s oznakom koja prikazuje lokaciju vašeg GNSS prijemnika, ažurirajući se u stvarnom vremenu, a možete je zumirati po želji.

Preporučujemo vam da pogledate svaki od čvorova na vašem toku kako biste bolje razumjeli što rade, modificirali ih i vidjeli što se mijenja.

Naći ćete mnoštvo tutorijala, a AI alati će vam također pomoći ako želite napraviti nešto malo naprednije.

Zabavite se!

Ako želite isključiti Node-RED, učinite sljedeće:
iptables -A INPUT -p tcp --dport 2222 -j REJECT

vrsta ps aux | grep node , pronađite proces čvora ako je i završite proces na sljedeći način:
kill NODE_PROCESS_ID

Ako vam se svidio ovaj sadržaj, možete nas pratiti na X / Twitter, YouTube, Facebook or LinkedIn da biste bili u tijeku s ovakvim sadržajem.

Imate pitanja ili zahtjeva?
Kontaktirajte nas! Odgovaramo <24 sata!

Ikona
Kontakt ArduSimple
Zatvori
ArduSimple Pojednostavljene evaluacijske ploče GNSS RTK

Želite li saznati više o GPS-u i RTK-u?

Ako ste trenutno zauzeti, naši inženjeri vam mogu poslati 3 kratka e-maila u kojima će objasniti sve što trebate znati za početak projekta.