NTRIP

NTRIP client and NTRIP server related examples.

NTRIP client application

This example application connects to a NTRIP caster and forwards the RTCM corrections to GPS1.
It prints on the terminal some basic input/output data statistics.

Note

Make sure to adapt the network connection to yours (fixed IP or DHCP).
You need to make sure your GPS1 is properly configured at 115200bps and able to send NMEA GGA and receive RTCM corrections on UART1.
You will need to use your own NTRIP credentials, the ones on the example will not work.

import socket
import time
import machine
import sbc
import uasyncio as asyncio
import network
import sbc.ntr

async def task_gps1(gps_reader, ntr_cli):
    nmea_parser = sbc.NMEA_parser(cb = ntr_cli.nmea_process)
    while True:
        if(ntr_cli.active):
            data = await gps_reader.read(32)
            ret = nmea_parser.parse(data)
        else:
            await asyncio.sleep(1)

def ntr_cli_cb(rtcm):
    gps1.write(rtcm)
    print('NTRIP Client total data consumption: In', ntr_cli.stats_in, 'B / Out', ntr_cli.stats_out, 'B')

lan = network.LAN()
lan_dhcp = False
while(not lan.active()):
    try:
        lan.active(True)
    except:
        print('Ethernet interface not found')
        time.sleep(1)

if(not lan_dhcp):
    (lan_ip, lan_subnet, lan_gateway, lan_dns) = ("10.0.0.1", "255.255.255.0", "10.0.0.2", "8.8.8.8")
    lan.ifconfig((lan_ip, lan_subnet, lan_gateway, lan_dns))
print('LAN connected, configuration (ip, subnet, gateway, dns): ', lan.ifconfig())

ntr_cli = sbc.ntr.Ntr_Cli(user = 'ardusimple:1234', host = 'rtk2go.com', port = '2101', mp = 'ARDU1', periodGGA_s = 10)

gps1 = sbc.Gps(1, 115200)
gps1_reader = asyncio.StreamReader(gps1.get_uart_id())

loop = asyncio.get_event_loop()
loop.create_task(task_gps1(gps1_reader, ntr_cli))
loop.create_task(ntr_cli.ntr_cli(lan, ntr_cli_cb))
ntr_cli.enable()
loop.run_forever()

NTRIP server application

This example application connects to a NTRIP caster and sends SBC RTCM corrections to it.
It prints on the terminal some basic input/output data statistics.

Note

Make sure to adapt the network connection to yours (fixed IP or DHCP).
You need to make sure your GPS1 is properly configured as a base station at 115200bps and able to send RTCM corrections on UART1.
You will need to use your own NTRIP caster credentials, the ones on the example will not work.

import socket
import time
import machine
import sbc
import uasyncio as asyncio
import network
import sbc.sck
import sbc.ntr

async def print_stats(ntr_srv):
    ntr_srv_stats = 0
    while True:
        print('NTRIP Server total data consumption: Out', ntr_srv.sck.stats_out, 'B')
        ntr_srv_stats = ntr_srv.sck.stats_out
        await asyncio.sleep(1)

async def task_gps1(gps_reader, ntr_srv):
    while True:
        if(ntr_srv.active):
            buf = await gps_reader.read(256)
            ret = await ntr_srv.sendRTCM(buf)
        else:
            await asyncio.sleep(1)

lan = network.LAN()
lan_dhcp = False
while(not lan.active()):
    try:
        lan.active(True)
    except:
        print('Ethernet interface not found')
        time.sleep(1)

if(not lan_dhcp):
    (lan_ip, lan_subnet, lan_gateway, lan_dns) = ("10.0.0.1", "255.255.255.0", "10.0.0.2", "8.8.8.8")
    lan.ifconfig((lan_ip, lan_subnet, lan_gateway, lan_dns))
print('LAN connected, configuration (ip, subnet, gateway, dns): ', lan.ifconfig())

sck_cli = sbc.sck.Sck_Cli(host = 'rtk2go.com', port = '2101')
ntr_srv = sbc.ntr.Ntr_Srv(sck = sck_cli, user = '', pwd = '1234', mp = 'ARDU1')

gps1 = sbc.Gps(1, 115200)
gps1_reader = asyncio.StreamReader(gps1.get_uart_id())

loop = asyncio.get_event_loop()
loop.create_task(task_gps1(gps1_reader, ntr_srv))
loop.create_task(sck_cli.sck_cli(lan))
loop.create_task(ntr_srv.ntr_srv())
loop.create_task(print_stats(ntr_srv))
ntr_srv.enable()
loop.run_forever()