Introduction

Currently the pypilot_mfd documentation is incomplete

Motivation

The pypilot_mfd project is intended to provide a free and open design for a marine multifunction display. This is primarily for sensors using open standards such as SignalK and from free software instruments to integrate with solutions like pypilot and openplotter.

Philisophy

pypilot is free software (GPLv3) and as such you can trust it for use as intended and for future use without restrictions. Because the freedom to modify is guarenteed, users from around the world continuously contributed improvements, even small ones to the benefit of all users.

Hardware and Installation

The pypilot_mfd has an internal esp32 microcontroller. This processor can receive the ESP-Now packets produced from various wireless weather instruments as well as communicate wirelessly to opencpn, signalk server, pypilot and others.

Mounting Instructions

Find a good location on the boat to mount the pypilot_mfd display. The enclosure is fully waterproof and can be exposed to the elements however using a cover over the screen can extend its useful life when not in operation especially if mounted in direct sun.

The display can be mounted in any orientation. Internal accelerometers detect the orientation of the screen on powerup. It may be an advantage to mount the screen in portrait or landscape depending on the intended use.

Electrical Connections Overview

diagram

USB-C data connection

USB-C can be used to power the display as well as provide serial communication with other devices. The power consumption is light (0.4 Watts) and is slightly higher when the backlight is enabled. The baud rate can be selected from the web interface.

rs422 data connection

The MFD also supports a galvanically isolated rs422 data connection. This has 2 differential pairs (4 wires) for transmit and recieve of nmea0183 data. The baud rate can be selected from the web interface

Maintainance

The MFD does not require much maintinance besides covering it when not in use. It is recommended to mount it so that the usb and other wire connections are protected from the elements or sealed.

Mechanical Installation

Suggested sensors

Wind sensors

Temperature Pressure Sensors

Outdoor weather sensors

Depth/Water speed sensors

Power off

The pypilot_mfd uses flash memory and therefore should be able to always poweroff simply by removing power. Should the flash become corrupted it is possible that certain settings would be lost.

Usage

Keypad

The MFD has a simple keypad with 4 keys

  • left and right arrows page through different displays. You can enable/disable pages from the web interfaces
  • hamburger key toggles through different time scales on history displays.
  • power key toggles display on/off

To enter the menu, hold the menu key for 1-2 seconds. The menu key selects items in the menu, but holding it can also exit the menu.

< picture of main menu >

Alarms

Web Configuration

holding the left and right keys for 3 seconds will enable the access point ensuring you can connect with a device to access the web configuration if the wifi settings are wrong or they cannot connect

WIFI Network Configuration

Sensors

pypilot_mfd can receive from wireless weather sensors and display the data directly on screen. It can also relay the received wireless sensor data over USB, rs422 (nmea0183) or wifi to other systems. The

Wind Sensors

Multiple wind sensors can be configured to be recieved. This allows the use of primary, secondary and the ability ignore nearby boats using similar sensors. It is also possible to configure wind sensors as port and starboard. This is often useful if sensors are mounted on either side of the boat to automatically switch to the sensor in clear air.

The sensors

Water Speed Sensors

Temperature and Air Pressure Sensors

UV and lightning Sensors

Data Configuration

USB data (NMEA0183)

rs422 data (NMEA0183)

WIFI data

The internal esp32 can only operate on one wifi channel at a time. For this reason, it is recommended that if you have an access point on 2.4ghz with significant bandwidth, to ensure it is on a different channel than the one the MFD and wireless sensors are using.

This could unfortunately make it more difficult to interface all of the sensors

Interfacing with pypilot

When interfacing with pypilot it is both possible to communicate directly using the pypilot protocol as well as with nmea data. It is also possible to indirectly interface via signalk.

For

Interfacing with OpenCPN

OpenCPN can directly interface (via nmea0183 sentences) or indirectly via SignalK. To directly interface, put the MFD into tcp nmea server mode with a specific port, and make a tcp nmea connection to this address:port in OpenCPN. Conversely it is possible for opencpn to listen on a particular port and to make the MFD act as a tcp client.

Interfacing via NMEA0183

NMEA0183 is an old open standard for marine data communication. It can still serve an important purpose as the data is generally fairly concise, readable and supported by a wide variety of equipment. The MFD supports this format for input and output on both USB and rs422 ports as well as via wifi.

Supported sentences for receiving NMEA0183

  • $xxMWV - wind speed and direction apparent/true
  • $xxMWD - wind speed and direction true
  • $xxVWR - wind speed and direction apparent
  • $xxVWT - wind speed and direction true
  • $xxMDA - air pressure, air temperature, water temperature
  • $xxMTA - air temperature
  • $xxRMB - route following information
  • $xxRMC - GPS time, position, speed and heading
  • $xxVHW - Water speed
  • $xxHDM - Compass heading
  • $xxXDR - Pitch and Roll
  • $xxROT - Rate of Turn
  • $xxRSA - Rudder Angle
  • $xxAPB - Autopilot Bearing
  • !xxVDM - AIS ships

Supported sentences for sending NMEA0183

If wireless sensors are connected, the data can be relayed and send out via NMEA0183. Other data received is not relayed.

  • $QYMWV - Apparent Wind Speed and Direction
  • $QYMDA - Barometric Pressure and Relative Humidity
  • $QYMTA - Air Temperature
  • $QYVHW - Water Speed
  • $QYDBT - Depth
  • $QYMTW - Waterm Temperature

Interfacing with SignalK

pypilot_mfd can send and receive SignalK data. The signalk server requires access requests to be granted to receive data

Supported keys for receiving data from SignalK

  • environment.wind.speedApparent
  • environment.wind.angleApparent
  • environment.wind.angleTrue
  • environment.wind.speedTrue
  • environment.outside.temperature
  • environment.outside.pressure
  • depth.belowSurface
  • navigation.speedOverGroundTrue
  • steering.rudderAngle
  • steering.autopilot.target.headingTrue
  • navigation.headingMagnetic
  • navigation.rateOfTurn
  • navigation.speedThroughWater

Supported keys for sending data to Signak

If wireless sensors are connected, the data can be relayed and send out via SignalK. Other data received is not relayed

Wireless wind sensors:

  • environment.wind.angleApparent
  • environment.wind.speedApparent

Wireless pressure/humidity sensors:

  • environment.outside.temperature
  • environment.outside.pressure
  • environment.outside.relativeHumidity

Wireless depth/speed sensors:

  • navigation.speedThroughWater
  • environment.depth.belowSurface
  • environment.water.temperature

For other sensors either no key is supported

Display Pages

Display Options

There are several options that can be set to configure the displayed information.

  • use360 - This will display gauges from 0-180 in port and starboard rather than 0-360

These options select imperial units rather than metric

  • usefahrenheit - display temperatures in farenheit (F) rather than celcius (C)
  • useinHg - displays pressure using inches mercury instead of millibars
  • usedepthft - displays depth in feet rather than meters

The latitude and longitude can be displayed in 3 basic formats:

  • degrees - eg: 78.234410 N 32.932330 E
  • minutes - eg: 78 14.065' N 32 55.940' E
  • seconds - eg: 78 14 3.60" N 32 55' 56.39" E

The LCD contrast and backlight brightness can be set here.

It is also possible to set the rotation of the display. Normally the accelerometers detect the rotation, but in the event they do not, you can change the rotation. The unit should be power cycled to utilize the new orientation.

The mirror should normally be set with a factory jumper, but in the event the diplay shows everything in a mirror image, this option can be toggled.

  • powerdown

The powerdown option specifies if the power button should simply turn off the display and backlight, but continue to receive from wireless sensors, or actually powerdown the microprocessor and go into a sleep mode using the lowest amount of power consumption (microamps)

Pages

The MFD has various pre-programmed display pages. Most users will only want to enable the pages that can display information that is useful to them. If you have multiple MFD displays it might be useful to program different ones to different pages. If for example you have programmed 4 pages, then paging through them with the arrow buttons will not page through information that is not helpful or available.

Automatic Configuration

Automatic configuration button will scan the available incoming sensors, and enable relevant display pages. This should be performed

Alarms

Various alarms can be set and configured from the web interface rather than the menu

History plots

Historical data from the sensors can also be viewed on the web browser

Software Updates

It is possible to update the software either via usb or wirelessly.

OTA Update

stands for Over The Air Updates. It is possible either to select a firmware file in the web configuration to update the software, or if the device is connected on a network with internet access, it can automatically initiate an update from the pypilot.org website.

USB Update

Updatting via usb is more fool-proof and should work in all conditions. To initiate the bootloader, hold the power button on the keypad while applying power to the mfd. The screen should not display anything and the backlight will not turn on. At this point the device is in the bootloader and the commandline tool "esptool.py" can be used to flash new data to the device.