This is a project page for an ESP8266-based NMEA data logger. Adafruit hardware is used, but you can probably use any 8266 board you like. The 8266 board was chosen for the integrated WiFi capabilities; I was initially considering a PyBoard with a “hat” to give it WiFi, but then I found out that the 8266 WiFi chipset has the ability to run custom code.

Parts list

  1. ESP8266-based board
  2. SPI-based MicroSD card reader
  3. Case
    • In this project: Custom-designed case, done with Fusion360
  4. Software
    • In this project: Custom code, CircuitPython + PyNMEA2
  5. Storage
    • In this project: 8 GB MicroSD card
  6. NMEA source:
    • In this project: ShipModul, converting Raymarine SeaTalk network to NMEA packets

An ESP8266 board is not a requirement, but things like the Feather M0 Adalogger are more constrained with respect the programming languages you can use on them, and integrated storage capacity for holding code. If you’re in the UK, check out PiMoroni for ESP gear; I’ve never had any quibbles with hardware I’ve bought from them, even if the pricing does feel a bit steep compared to the US (but then there’s the whole import duties problem).

Conceptual design

The concept for this logger is partially derived from the functionality iNavX offers on an iPad. I have two core issues with iNavX as a logger – power draw, and inane track point storage, display, and export. On the power draw front I need to keep the iPad open with the screen permanently running, or it won’t record the NMEA data from the network. On the track point storage, iNavX does no grouping whatsoever of the data, so all my datapoints ever are in a single scrolling list – not even grouped by day.

NMEA loggers also appear to be few and far between; there’s at least one hardware one I’ve found (that requires you purchase a video overlay hardware module.. what?), and the majority of software ones want a Windows PC.


The ESP8266 chipset allows me to not deal with WiFi intricacies when talking to the ShipModul (converts SeaTalk to NMEA, and broadcasts it using UDP packets over WiFi), nor do I need to deal with hard-wiring the unit to the NMEA terminals of the ShipModul, which reduces the cable clutter behind my chart table – the ESP solution can be mounted anywhere in the boat, but preferably on the same power circuit as the ShipModul so they power up at the same time.

If you’ve got Fusion360 and a 3D printer, you can import these objects in to Fusion:


For the first go, it’ll be in MicroPython. PyNMEA should provide me with NMEA sentence decoding, and the machine libraries in MicroPython should provide me with SD card writing. Data will be recorded in per-day folders, potentially with sub-folders or naming conventions to indicate if there are multiple tracks for a single day (ie, the boat power was on, boat moved, boat power turned off, time elapses, boat power turns on again and boat moves again). Motion detection should also be feasible, which would be an alternative way to define tracks – perhaps the case where the power is turned on at the start of a voyage, and not turned off for a few days.