The basic idea of the project was to get the static geolocation of an Arduino-based microcontroller, without using any GPS device. The obvious choice was to take an ESP8266 board, scan the surrounding WiFi networks and ask a location service provider the current location. Fortunately, the Mozilla Location Service is both free and unlimited, which is not the case of other providers, like Google.

The downside of this method is that you will need Internet access.

Surprisingly, the positioning accuracy is very good in urban and even rural populated areas, good as 10m, usually around 50m. And most of all, it works well even indoor.

Starting with this very simple setup, since we already need Internet access, we took a step further and added a second feature: position reporting. Based on our previous experience with APRS/CWOP automated weather station, we chose the free german CB-APRS service for tracking. This is a partial, but functional, APRS implementation, open even for non-ham radio people. They lack the telemetry, which we use in our reports, but position and weather reports work pretty well.

The CB-APRS callsign is constructed using a prefix and the four hexadecimal digits of the ChipID. The passkey is computed at run-time, if not specified.

Here is a snapshot of the map from CB-APRS (as you can see, the position is not always accurate, but quite good):

Here are the logs and some charts of speed and course (heavy traffic, as every morning in Bucharest):

This project worked well for several months, but, at one moment, we had the idea to emulate a GPS unit, using this device, since we already had the coordinates, speed and course. So, we implemented a NMEA-0183 interface and used it to send the GPGGA and GPRMC sentences through the serial interface, at 9600 baud. Here is the log, which includes some debugging information also:

$PSCAN,WIFI,31,2
$PSCAN,FIX,44.420000,26.120000,247,8,609.90,69.76,178
$GPGGA,145333.0,4420.0000,N,02600.0000,E,1,31,1,0,M,0,M,,*72
$GPRMC,145333.0,A,4420.0000,N,02600.0000,E,136.0,178.0,080318,,,E*61
$PAPRS,094,TKB7FF>CBAPRS,TCPIP*:!4420.00N/02600.00E>178/136Acc:247 Dst:609 Spd:251 Crs:S Vcc:3.0 RSSI:-
$PAPRS,057,TKB7FF>CBAPRS,TCPIP*:T#214,128,061,137,247,295,10000010

These NMEA-0183 sentences can be sent using RS-232, Bluetooth (no hardware available at the moment) or WiFi.

Yes, on ships (yachts, boats, etc) data from the complex AIS system, along with radar, sonar, GPS, engine data and so on are transfered using a local network. And there are various mobile applications that can receive this data and help you monitor in real-time your position, speed and course. Let's have a look (we are not at see here, but the application works nevertheless, using the data from our device):

The data is served on "NMEA-0183 Navigational Data Server" 10110/tcp port and UDP broadcast using the same 10110/udp port.