1. Getting Started
1.1. Why use BBN OS?
Why use BBN OS? Some people use just commercial marine electronics on board, some ones use smart tablets and marine Wi-Fi multiplexers. All these solutions lack one important component - an onboard computer capable of monitoring and controlling all aspects of the boat systems, and capable of storing data. Some people put an Intel-based computer for it. Intel-based solutions are more power consuming. With BBN OS you can build a central boat computer meeting your needs. All on low power consuming raspberry pi with flexibility of adding countless choices of sensors to talk to all boat systems, Internet, local Wi-Fi, cameras, NMEA network, and a system able to decode marine radio protocols. BBN OS is free and open source. It is based on commonly used community supported open source projects such as SignalK, PyPilot, OpenCPN, and others. BBN OS graphical user interface will let you build a cockpit front-end to all functionality of the OS from chartplotting, dashboards, weather information, to media player, etc.
1.1.1. Use Cases
Cockpit Touchscreen Chartplotter
Nav Station Computer
Pi Based Laptop
SSB Radio Decoder
Marine Data Server, Multiplexer
Wi-Fi Access Point
Data Analytics Server
1.1.2. Smart Boat
1.2. Download Image
Download SD card image (~2.5 Gb file):
Alternative place to download if the previous link doesn’t work for you:
1.2.1. 32-bit vs 64-bit images
There are pros and cons to each
32-bit takes less memory but runs slower
32-bit is more supported at the moment (Some cameras not supported on 64-bit yet at the time of writing this)
QtVlm, wx2img, many OpenCPN plugins are 32-bit only (at the time of writing this)
You still can run 64-bit kernel with 32-bit image, user space programs will be 32-bit. (Add arm_64bit=1 into /boot/config.txt)
32-bit is available on more hardware
64-bit OS and OpenCPN are working fine but technically still called 'beta'
Most of the open (minor) issues are present in both 32 and 64-bit images
|Switch from 32-bit kernel to 64-bit kernel has an impact on java installation. See (workaround): https://github.com/bareboat-necessities/lysmarine_gen/issues/44|
So as of time of writing this the best performance/compatibility is the 32-bit image with the kernel switched to 64-bit.
Install 32-bit image
Upgrade and install all additional plugins for OpenCPN via OpenCPN plugin downloader after updating the catalog.
Switch to 64-bit kernel in /boot/config.txt
Proceed with all other configuration steps.
1.3. Prepare SD Card
Write the downloaded image to SD card. Minimum 32Gb SD card recommended. You can use Raspberry Pi Imager for that:
If your screen resolution is lower than 1024x600 you would need to manually set it in /boot/config.txt file, by mounting /boot partition of your SD card (on windows its done just by inserting it into SD card slot and editing in a plain text editor).
Quality of SD card is essential for performance of your system. BBN OS comes with disk benchmarking tool. Good SD card would show about 45 MB/sec (or higher) read i/o speed in it. SSD drives would show much better results: 178 MB/sec read and 147 MB/sec write i/o speed or higher.
1.4. First Boot from SD Card
Insert SD card into raspberry pi SD card slot and power on. Wait for boot process to run GUI (about 2 mins).
1.5. Setting up Network
1.5.1. Wired Ethernet
If you have wired ethernet router you can just plug-in your raspberry pi ethernet port into the router
1.5.2. Wi-Fi Client
Go into network settings menu and delete Wi-Fi wireless access point.
|You need to set up Wi-Fi country.|
Change /etc/wpa_supplicant/wpa_supplicant.conf to add line for your country (example):
Change /etc/default/crda to set your country (example):
When raspberry pi Wi-Fi card discovers your Wi-Fi router network click to connect to Wi-Fi and enter the correct Wi-Fi password.
When the password storage manager pops up to enter the password for your password storage I just normally leave it blank, so I’m not prompted again.
1.5.3. Wi-Fi Access Point
Wi-Fi connections are managed by widely used Gnome NetworkManager. Look for 'nmcli' documentation (command line interface to NetworkManager). Or you can figure it out from Administration/Advanced Network Settings app menu. By default, OS image is set up to provide you with an access point.
1.5.4. Using iPhone as Internet gateway
Enable Personal Hotspot on iphone. Plug it in into pi with BBN OS via USB and tell iPhone to trust the connected computer. You will have a tethered Internet connection from your pi via iPhone (using usbmuxd).
You do not have to be plugged in into USB if your phone, and a boat computer are on the same local Wi-Fi network.
1.5.5. Using Android phone as Internet gateway
Enable USB tethering in network settings on your Android phone. Plug it into your boat computer via USB.
The output of the command below should show a new route via usb0 interface:
You can also do tethering via Wi-Fi instead of USB.
1.5.6. SpaceX Starlink
SpaceX Starlink Dishy is coming to boats soon and is easy to support. Power usage might be relatively high for small boats.
1.5.7. Typical Setup on a Boat
Raspberry Pi wired to OpenWrt LTE/4G/WiFi router via ethernet port
Raspberry Pi provides 5GHz WiFi 802.11ac local access point for boat local WiFi network
OpenWrt LTE/4G/WiFi router provides WiFi connection to marinas
OpenWrt LTE/4G/WiFi router provides access to the Internet via LTE/4G cellular data network
OpenWrt LTE/4G/WiFi router provides 2.4GHz (WiFi 802.11n) local access point for boat IoT devices
OpenWrt LTE/4G/WiFi router serves as firewall
If you use raspberry pi WiFi it is better to disable WiFi power management:
sudo systemctl unmask email@example.com sudo systemctl enable firstname.lastname@example.org sudo systemctl start email@example.com
|It is important to protect your installation from unauthorized access from the Internet. Make sure you put your raspberry pi behind a router which adds a firewall protection. It is also important to change default passwords.|
1.6. Set Timezone / Locale
Open Terminal from GUI and on the terminal command line:
cd ~/add-ons ./timezone-setup.sh
For changing locale (ex: to en_US.UTF-8):
sudo su perl -pi -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' /etc/locale.gen locale-gen en_US.UTF-8 update-locale en_US.UTF-8
1.7. Change Password
Default user and root passwords are changeme. You would want to modify it before your computer connects on-line to the Internet.
Open Terminal from GUI and on the terminal command line:
cd ~/add-ons ./change-password.sh
To change root password:
sudo su passwd exit
1.8. International Keyboard
Keyboard layout controlled by pre-installed ibus application. To add a language:
I also disable it from showing up in system tray, and I rely on switching languages using onboard keyboard Win-Space key combo.
1.9. SSD Boot
If you have an SSD drive, and you would like to boot from it (which would be a better way, and it would greatly improve the performance of the system) then you can follow the steps below:
The OS image comes with utility called 'rpi-clone' preinstalled. If you have a custom case for your raspberry pi (Ex. DeskPi Pro), then you would need to install vendor drivers for your case per vendor instructions.
Open Terminal from GUI and your command line for rpi-clone should look like (check usage https://github.com/billw2/rpi-clone as there might be nuances for your particular set up):
sudo rpi-clone sda
Follow the prompts.
1.10. Set up GPS
Plugin your GPS USB mouse and OS should recognize it. Check:
ls -l /dev/ttyLYS*
1.11. Set up AIS
Plugin your dAISy AIS receiver into USB and OS should recognize it. Check:
ls -l /dev/ttyLYS*
1.12. Update OpenCPN Plugins
Go to Tools/Options/Plugins
Update Plugin Catalog
Browse plugins list and update plugins when an update available (one by one)
|Due to a bug in OpenCPN https://github.com/bareboat-necessities/lysmarine_gen/issues/53 Updating plugins on a system booted with arm64 kernel doesn’t work even if userspace is armhf. As a workaround: boot with armhf kernel, update all plugins and only then switch to arm64 kernel.|
1.13. Set up Charts
OS image comes with several chartplotters:
with extensive set of plugins as well as weather GRIB file viewers
Start OpenCPN. Go into Tools/Options/Charts/Chart Downloader tab.
Click 'Add Catalog'. For USA: click USA NOAA & Inland Charts / ENC / By Region.
Pick your region, click (or touch) 'OK'
Click 'Update' (to update the catalog)
Click 'Download Charts…' tab
Right-click (or long touch) in the charts list
Click 'Select all' from the pop-up menu
Press 'Download selected charts' button, and wait for it to finish
Press 'Apply' button
Click 'Chart Files' tab
Press 'Prepare all ENC Charts' button
Press 'OK' button when done.
O-Charts can be registered using preinstalled OpenCPN plugins (on arm32 user space make sure to update plugins on-line from OpenCPN catalog) with O-Charts USB dongle or key.
When you are online NOAA raster MB tiles should work out of the box. O-Charts can be registered using AvNav plugin with O-Charts USB dongle or key.
1.13.3. SignalK, FreeBoard-SK, TukTuk
Follow SignalK documentation to install offline charts for these.
1.14. Set up your Ship Parameters
Do not forget to set up your ship parameters in SignalK and Vessel applications. They can come handy.
Also in OpenCPN Polar plugin pick a polar file for your boat from ~/Polars or build it from your past voyages data recordings. It will be needed for weather routing, etc.
SignalK manages its own updates. Login into SignalK Marine Data Server web UI application and perform updates via its app store.
For SignalK support visit: https://signalk-dev.slack.com/
Starting PyPilot server:
sudo systemctl enable pypilot@pypilot sudo systemctl start pypilot@pypilot
Apart from the official PyPilot documentation you will find this WiKi https://github.com/pypilot/workbook/wiki very useful as well.
You can add weather budgie desktop applet. Unfortunately it is linked to a fixed location which is fine for a day-sailor but doesn’t work for others.
Off-shore sailors or even coastal cruisers should focus on using XyGrib and GRIB plugin for OpenCPN.
For real blue water sailors OpenCPN Climatology and OpenCPN weather routing plugins are essential.
Launch xyGrib. Select an area on the map. Click to download Grib file. Choose Atmospheric Model and Wave Model. Pick Wind, Wind Gust options in Surface Data and Wave Height in Wave Data. Click Download.
Now you can overlay this GRIB data on OpenCPN chart. You can play Grib file forecast forward. Enable GRIB plugin in OpenCPN. Click on GRIB plugin in OpenCPN plugin toolbar. Load GRIB file into OpenCPN. See weather data overlaid over your chart.
OpenCPN GRIB plugin can also prepare SailDoc email requests for Grib files. You can store them and email via Internet (if you have connection) or use WinLink Pat (WinLink client: https://github.com/la5nta/pat/wiki) via SSB radio.
1.17.2. NOAA weather in SignalK
SignalK comes with NOAA weather plugin. After you configure it, weather alerts will show up in KIP dashboard.
WeatherFax OpenCPN plugin is capable of downloading weather faxes from Internet as well as capturing them from SSB radio via audio input. (Pi needs a sound card with audio input because it is sold without audio input card). Just as GRIB files they can be overlaid over charts.
1.17.4. Weather routing
Weather routing OpenCPN plugin is able to plan your trip route. It uses your boat polar diagram, so make sure you have built it in advance using Polar plugin, or download it for your boat. Few places to check:
You also need to download climatology data using OpenCPN climatology plugin, and download a grib file. They are also needed and used in weather routing.
1.18. WinLink (SailMail analogue) for Raspberry Pi
cd ~/add-ons ./winlink-pat-install.sh
Documentation on setting it up and using it:
Video Series: Winlink on a Raspberry Pi https://www.youtube.com/playlist?list=PL1QTYT4Qo9cY98NFmxrTvtGyWI9pgxtFq
1.19. Music Players
The OS image comes with Mopidy, MPD server, MusicBox, Shairport-Sync (AirPlay) server. The default audio output set up to audio jack port.
Start MusicBox web UI. Try pre-configured playlist, or you can search Tune-In or YouTube.
Iris is an alternative player to MusicBox. Iris is also included in the BBN OS image.
1.19.3. Playing from your iPhone (Spotify, etc)
Play music on iPhone. Select AirPlay on your iPhone and cast to 'lysmarine' airplay target (your phone must be on lysmarine-hotspot WiFi).
1.19.4. Playing from mobile phones with MPD applications
Install MPD compatible media player on your mobile device and from it you can control playing your Mopidy library on your raspberry pi.
1.19.5. Playing Spotify
Start your Spotify app on your mobile device which is connected to boat WiFi. Select 'Lysmarine' device as target to play on your pi via raspotify. You need to have a premium Spotify account.
1.20. Interfacing with ship systems
The first place to start configuring boat interfaces would be SignalK. SignalK comes with many plugins to talk to many boat devices with the support of various protocols.
1.20.1. NMEA 0183
If you use FTDI USB serial to USB sticks the OS should recognize them right away, and if they are wired correctly to NMEA devices (ex: wind/depth/speed/GPS) their reading should automatically show up in instrument dashboards.
When wiring NMEA 0183 devices:
Transmit (Tx) (+) should connect to a receive (Rx) (+) Tx (-) should connect to a Rx (-) Rx (+) should connect to a Tx (+) Rx (-) should connect to a Tx (-)
In the event the sending device has a Tx (-), but there is not a corresponding Rx (-) on the receiving device, leave the sending device’s Tx (-) disconnected. Failure to follow this guideline can damage the sending device.
In the event that the receiving device has a Rx (-), but there is no corresponding Tx (-) on the sending device, bring the Rx (-) to ground.
1.20.2. NMEA 2000
Check SignalK plugin settings and SignalK documentation.
Check PyPilot settings and PyPilot documentation.
General steps are
enable i2c (Interface options)
cd ~/add-ons ./os-settings.sh
Enable pypilot service
sudo systemctl enable pypilot@pypilot sudo systemctl start pypilot@pypilot
At this point you should be able to see reading of pitch/roll, etc, and magnetic heading in pypilot control. Which you would need to calibrate.
Start pypilot calibration. Press 'Boat Level' when the boat leveled. (Your IMU must be obviously mounted hard to the boat, can’t be just hanging). For magnetic heading: IMU doesn’t know how you oriented it inside (where bow is pointing), so you need to adjust it by filling magnetic heading adjustment field.
Establish connection from PyPilot to SignalK (restart PyPilot just before doing it to get a fresh valid request)
Go to SignalK web UI as admin and approve the access request from PyPilot for READ/WRITE access.
IMU data should start flowing into SignalK
1.20.4. Barometer / Temperature / Humidity
Check SignalK plugin settings and SignalK documentation.
General steps are:
enable i2c (Interface options)
cd ~/add-ons ./os-settings.sh
To check if it’s working:
lsmod | grep i2c-dev i2cdetect 1
Login into SignalK Marine Data Server
Enable BMP or BME sensor plugin. Give it correct i2c address. Reduce poll timeout to 20 sec.
Change 'salon.inside' to 'outside' (one word) for OpenCPN to display readings.
Restart SignalK server.
At this point you should be able to see barometric pressure and temperature (possibly humidity) in your data feed.
Many other devices are supported (usually via SignalK)
1.21. Instrument Dashboards
Enable OpenCPN 'Dashboard' plugin, add instruments. Dashboards are dockable to the right on bottom of OpenCPN canvas.
Load KIP demo. In setting of KIP dashboard change the URL to http://localhost:3000
You should request KIP token to be registered in SignalK, then go into SignalK app and authorize it. After that edit instruments and layout in KIP dashboard settings.
1.22. Remote Access
BBN OS image comes with RealVNC server pre-installed and ready to be used on the local network.
|You need to change the authentication method or the default unix user password before connecting the system to the Internet.|
OS image also provides VNC client app.
RealVNC with cloud connectivity
Create an account on realvnc.com website. Login from your pi’s RealVNC server into realvnc.com cloud using the account you set up. Set-up a password on your pi’s VNC server for users to connect. While being logged in into realvnc.com website create a team and invite people you want to have remote desktop access to your pi. When they accept your invite let them know the password to connect to your local VNC server. They would need to download realVNC viewer (can be for PC, Linux, Mac, etc) and follow the instructions from the invite.
OS image comes with ssh enabled. You can log in using ssh user: 'user'.
1.22.3. Android Devices
OS image comes with scrcpy pre-installed and pre-configured. You can view and control your Android devices. You need to enable USB debugging on your Android device or follow the instructions to enable controlling it via WiFi. See: https://github.com/Genymobile/scrcpy In most cases you just need to enable USB debugging on your Android device and plug it in (thanks to autoadb).
The URLs of the applications on your boat computer:
http://lysmarine:3000/admin/#/e/_signalk_vesselpositions Vessels Positions
http://lysmarine:3000/tuktuk-chart-plotter/ TukTuk Chartplotter
http://lysmarine:3000/@signalk/signalk-autopilot/ SK Autopilot
http://lysmarine:3000/@signalk/freeboard-sk SK Freeboard
http://lysmarine:6680/musicbox_webclient/ Mopidy MusicBox
http://lysmarine:6680/iris/ Mopidy Iris
http://lysmarine:8765 MotionEye Cameras
Make sure your lysmarine computer is mapped to a static IP address on your network via MAC address mapping on your router.
1.22.5. Casting from Chromium to your TV
You can start Chromium and cast browser tab or whole desktop to your smart TV via ChromeCast protocol using Chromium menu 'Cast' option and selecting an appropriate source. Your TV and your boat computer need to be on the same network (LAN or Wi-Fi).
1.22.6. SmartPhone Applications
There are many applications for smartphones which will take live NMEA data stream from your boat computer host: lysmarine, port: 10110.
There are several ones which will even discover SignalK and use SignalK protocol. Examples: SignalK Monitor, SignalK.
Your phone and your boat computer need to be on the same Wi-Fi network.
1.23. Headless Operation
It’s possible to disable booting into GUI by running:
and selecting booting into the console under System Options / Boot - Auto Login.
1.24. Marine Radio
OS image comes with many HAM radio applications, decoders for many marine specific signals and protocols. Many SDR products should work. Decoding is also possible using external HAM receivers connected via sound input port (USB sound card required as raspberry pi doesn’t have built-in sound input). Proper antennas required for correct reception.
HAM Radio menu contains a few applications useful especially for offshore sailors. If you do not have a cellular or a satellite connection, you still have SSB (and if you installed it SDR) radio. These applications will allow you (with some skill and set up):
Receive weather GRIBs via WinLink
Receive and decode WeatherFax, NavTex, NOAA and satellite weather images, Inmarsat Fleet messages
Send and receive emails via WinLink (requires you to have a HAM amateur radio license)
SDR can help you to decode AIS, and ADS-B (aviation analogue of AIS)
Control your rig (SSB/SDR) with raspberry pi and monitor
1.25. Iridium Phone
BBN OS will help you to use Iridium Phone as a modem for low bandwidth Internet access, or to send periodic short burst data with use of a specially written SignalK plugin.
1.26.1. IP Cameras
Should be easy to integrate using pre-installed VLC. See URL in /var/www/bbn-launcher/constants.js
IP cameras usually have some delay in video display.
By default, motioneye service installed and enabled. To disable:
sudo systemctl disable motioneye sudo systemctl stop motioneye sudo systemctl status motioneye
Default user: admin
Password is empty.
1.27. Cruising within Cellular Phone Reception
Adding some OpenWrt LTE/4G router greatly improves your boat connectivity to the world near shore. You should definitely do it to have internet access from your boat.
The OS image gives you internet applications for:
and much more
1.28. Offshore Features
For offshore sailors there are number of features pre-loaded into the OS image
Inmarsat Fleet (receiving messages)
Using Iridium as modem
GRIB (could be over SSB)
SDR / HAM Radio Apps
Weather Routing / Climatology
Radars (several supported)
They do require additional hardware, set up and dedication.
1.29. Watching Movies
Watching on-line (or listening) prepaid copyrighted content (Netflix, Amazon PrimeVideo, Google, Spotify, etc) in a web browser as Chromium requires closed-source DRM libraries. On arm32 version of the OS you can install it from add-ons folder ~/add-ons/ by running:
|As of moment of writing this procedure doesn’t work on arm64. It does work on arm32, and even on arm32 with 64-bit kernel.|
1.30. How it is Made
For those who are comfortable writing software the scripts to create this image stored on the image itself (for the reference) in /install_scripts. The full source code to create the image is available at: https://github.com/bareboat-necessities/lysmarine_gen
1.31. Shutting Down / Rebooting
On the desktop click on the 'Commands' icon. You will see a menu from where you can perform restart/shutdown, and more.
1.31.1. Safe Power-Down
Raspberry pi doesn’t have a safe power-off feature. I.e. it doesn’t perform OS shutdown before powering off with a button. There are numerous third-party solutions with raspberry pi hats or custom cases. Make sure you do not forget to install required software for them per vendor documentation.
1.32. Customizing Desktop
PyPilot web client looks better in dark skin. Switch to the dark theme if it wasn’t done for you automatically.
1.32.1. Customizing Applications Menu
Applications menu can be customized by editing gnome-applications.menu in ~/.config/menus.
1.33. Customizing On First Boot
You can add additional customizations which will be performed on system first boot by mounting OS image and editing /boot/first-boot.sh script. That script as its name suggests executes only once on the first boot.
1.34. Known Issues and Workarounds
If GPS fix is lost in OpenCPN the first thing to try is to restart SignalK. You can do it from the touchscreen via desktop 'Commands' icon.
Do not create data loops with your data flows between OpenCPN, AvNav, SignalK, GPSd, Kplex, PyPilot.
|The touchscreen issues mentioned below fixed since 2021-09-10 release.|
Some applications (namely OpenCPN and gtk2 based as well as some Qt) sometimes stop responding to touch events. There is a workaround. With your finger you can toggle a maximized mode via window frame icon, then you MOVE the window frame by dragging window header few pixels, and switch back to maximized mode if needed. This should restore touch events in that app.
Some gtk3 applications menus (ex: terminal) have issues handling touch events. You can select a menu item with touch but to perform a click on it you would actually need to perform simulated right click by holding finger a bit longer and letting it go.
1.34.2. Wi-Fi DNS
If you use your devices on LAN or WiFi networks they might get assigned different IP addresses from DHCP servers. However, DNS servers tend to cache (remember) name to IP address mappings for quite some time. Thus, you can run into DNS name resolution issues if you do not configure DHCP servers to assign consistent IP addresses (by MAC address for example) to all your devices.
Another situation which can cause name resolution issues in DNS is when one device configured to be able to choose multiple Wi-Fi networks to connect to.
Check /home/user/add-ons directory. It contains number of scripts for installing many additional programs which for one or another reason couldn’t be a part of the distribution image.
1.36. Default Ports
sudo netstat -tulpen
Proto Port Transport Program/Service tcp 22 ssh sshd Secure Remote Shell tcp 25 smtp exim4 e-mail tcp 139 netbios smbd tcp 445 smb smbd tcp 631 CUPS cupsd Printing tcp 2947 gpsd gpsd tcp 3000 http/WS SignalK tcp 4713 pulseaudio pulseaudio audio tcp 4997 http bbn-desktop tcp 5000 airplay shairport-sync music tcp 5037 adb android adb tcp 5900 vnc x11vnc tcp 6600 mpd Mopidy MPD Music tcp 6680 http Mopidy Music tcp 8080 http PyPilot_web tcp 8082 http AvNav Ocharts tcp 8085 http AvNav Updater tcp 8099 http AvNav tcp 8375 http/json SignalK Deltas tcp 8765 http motioneye tcp 10110 NMEA 0183 SignalK tcp 20220 NMEA 0183 PyPilot tcp 23322 json PyPilot tcp 34567 NMEA 0183 AvNav NMEA out tcp dynamic spotify librespot udp 68 DHCP dhclient udp 137 nmb nmbd udp 138 nmb nmbd udp 323 ntp chronyd time service udp 631 IPP CUPS Internet Printing Protocol udp 5353 service discovery avahi-daemon, chromium, others (bonjour, zeroconf, mDNS) udp 10116 NMEA 0183 AvNav, KPlex
The beauty of Linux is that you can customize it for your needs in infinite ways. While this distro aimed to strike common need, you will find that number of post-install customization steps would be required. The key is to script those steps, make them non-interactive, make the steps requite NO GUI. In that case your set up becomes REPRODUCIBLE in case of new OS image releases. You can share your post-install scripts, so the system can be improved and even more fine-tuned.
While the system supports touchscreens during set-up phase you would still want to have a regular wired keyboard and mouse attached to it as there is plenty of activities involved on the shell command line.
You do not have to be a software engineer to install the system. A mechanic, electrician, paralegal professional, civil engineer, money manager are few examples of people with different backgrounds who were able to install and set it up for their boats.
This is not my first build of the boat computer with raspberry pi. A lot of ideas can be taken from my older (2020 build which was based on OpenPlotter). For up-to-date build I would change few things:
Instead of expensive Argonaut M7 I would have used (Model: SL07W, Brand Sihovision, Capacitive Touch Screen 7-inch, (1000 nits), IP65, 1024x600, Cost under $300): https://www.sihovision.com/industrial-touch-monitor/7-inch-industrial-wide-temperaturer-lcd-monitor-with-remote-control-1.html
My waterproofing technique would be cheaper and better. Instead of costly connectors at the back of the computer (even if it is below deck) I would use waterproof glands for exits from the enclosure and pigtail connectors. I would cover the point of connection with heat shrink tubing.
I would have used some kind of safe power-off solution and SSD instead of just SD card. SSD gives HUGE performance gain.
I would use this OS image (instead of OpenPlotter image)
dAISy AIS is better solution than SDR
Use USB 2.0 hub where USB 3.0 not required
For older hardware solutions (lot of it is still valid) see:
Printing from Chromium is a bit inconvenient. You need to choose 'Print' menu, then scroll down and choose 'More Settings' and select 'Print Using System Dialog' which will let you to choose a printer.
1.40. Social Networks and Messaging
BBN OS has several programs to help you stay connected with friends via social networks and messaging applications via Internet.
1.41. Location Reporting
SignalK comes with preinstalled plugin for saillogger.com
1.42. Most useful features for average short cruises
GPS, OpenCPN off-line charts for your sailing area
Tides / Currents in OpenCPN
Waypoints, routes in OpenCPN, tracking
AIS in OpenCPN
Weather Windy, etc if using LTE internet
Dashboards Wind, Speed, Depth, GPS, Local Sunset, etc
Autopilot (if equipped)
Cameras for docking and night light
Local boat WiFi hotspot and LTE gateway
1.43.1. Mosquitto MQTT Server
BBN OS image comes with Mosquitto clients and server preinstalled but disabled. To enable and start it:
Enable and start Mosquitto server (on default port 1883)
sudo systemctl enable mosquitto sudo systemctl start mosquitto
Subscribe to topics
mosquitto_sub -t '#'
Publish from SignalK: Enable MQTT Gateway plugin. Pick 'Send data to remote server' with URL mqtt://localhost. Add topic (Ex: navigation.headingMagnetic). Restart SignalK and observe the data stream in the subscriber.
NodeRed is installed into SignalK. To use NodeRed login into SignalK by visiting http://localhost:3000 clicking 'login', choosing 'remember me' session and storing the password in a browser.
1.44. Data Analytics
BBN OS image comes with grafana preinstalled but disabled. To enable and start it:
Edit the /etc/grafana/grafana.ini file and change line ';http_port = 3000' to 'http_port = 3080' (to avoid conflict with SignalK)
sudo nano /etc/grafana/grafana.ini
Enable and start Grafana server
sudo systemctl enable grafana-server sudo systemctl start grafana-server
Access http://localhost:3080 with user and password 'admin'.
Enable and start InfluxDB server (on default ports 8086 (client-server), 8088 (RPC))
sudo systemctl unmask influxdb.service sudo systemctl enable influxdb sudo systemctl start influxdb
Initialize database and connect to it (for example) from SignalK barograph plugin.
Chronograf and Kapasitor also come pre-installed.
1.45. Power consumption
With Raspberry Pi4 power consumption of your system should be around under 4.5 watts without a monitor. A monitor depending on it’s size and backlight brightness (needed for sunlight readability) can add another 5 watts or even more. Human brain runs on about 12-25 watts for comparison.
1.46. Upgrading your System
1.46.1. Verified Updates
Fixes verified by the development team can be installed by running:
cd /home/user/add-ons ./hot-fixes-install.sh
1.46.2. All Other Updates
Your system packages can be upgraded following standard Debian packaging system procedure:
sudo apt update sudo apt upgrade
SignalK server and modules can be upgraded using SignalK App Store.
OpenCPN charts can be updated using OpenCPN chart downloader plugin.
|As result of software upgrades you might end up with a configuration which wasn’t previously tested. Though you might be able to get some support via community forums at: https://github.com/bareboat-necessities/lysmarine_gen/discussions|
1.47. Data Flow
2. Supported Hardware
For a cabin monitor many people do not use special marine grade ones. If you have enough space on your nav station desk for a keyboard and a mouse, you might consider getting a screen without touch functionality.
For a cockpit display you need >1000 nit brightness for sunlight readability, waterproof, touchscreen, with backlight (brightness) control buttons for night sailing. You would need long HDMI and USB (for touch) cables to connect to raspberry pi below deck. There are even fiberoptic solutions for that. They allow thinner cables. Bonus, if your touchscreen display comes with built in speakers for alarms. Check Sihovision product line, if one of their products will suit you.
2.2. IMU, compass, accelerometer, gyroscope
PyPilot supports these via RTIMULib2. Here is a list of supported units by RTIMULib2:
Honeywell HMC5883L with ADXL345 and L3G4200D
Bosch BMX055 (experimental magnetometer support)
Bosch BNO055 (doesn’t work reliably on Pi, clock issues)
PyPilot Documentation recommends using 9 Dof (9 Degrees of freedom) IMU with mpu9255.
Even without autopilot motor controller these sensors allow displaying roll, pitch, and yaw.
2.3. Environmental Sensors
2.3.1. Barometer, Temperature, Humidity I2C Sensors
These are handled by Signal-K plugins. Supported ones are:
There is also barograph plugin in SignalK.
There are several options:
If you have AIS transducer you just use it via NMEA bus.
AIS built in into NMEA multiplexer used via NMEA network
dAISy USB AIS or Raspberry Pi dAISy AIS Hat. USB one is easier to set up.
Decode AIS radio signals using SDR. Probably the worst option as SDR is quite energy consuming for that task to be run constantly.
OpenCPN Radar plugin reports support of the following radars:
Navico/B&G/Lowrance/Simrad: BR24, 3G, 4G, and HALO20, 20+, 24, 4, 6, and 8
Garmin: HD and xHD
Raymarine: Ethernet-Analog: RD218, RD418 / Ethernet-Digital: RD418D, RD424D
Quantum/Quantum2 Radars from Raymarine seems are not supported by OpenCPN, nor are the Garmin Fantom radars, or Furuno units.
We didn’t have hardware to all these, so reports of successful installations and encountered issues are welcome.
2.6. USB Hubs
Choose powered USB hub which doesn’t backfeed power into pi4, to avoid issue of pi4 not being able to reboot when USB hub is still 'on'.
If you do not plan to connect to your USB hub storage devices, cameras, network cards (high speed devices), then USB 2.0 hub will do the job. No need for USB 3.0 hub.
USB ports follow color convention:
Charge & Sleep or High Current
2.7. LTE/Wi-Fi Routers
The Wi-Fi router you need is somewhat different from your home router. Your home router connects wired to Internet WAN and it gives you local Wi-Fi. On a boat the situation reverses. Your WAN is the marina’s Wi-Fi and your Pi should (preferably) be wired into the router. These Wi-Fi routers are being sold as Travel Wi-Fi routers. Not all cheap Wi-Fi routers will give you the ability to connect to the marina Wi-Fi and share it on a boat. It’s better to choose the ones running OpenWrt operating system, which is Unix based and open-source. LTE is a very valuable feature.
Few recommended would be: GL.iNet (GL-X750 V2) Spitz router, Teltonika RUTX12 (dual SIM).
2.8. SD Cards
In SD card you will be looking at speed (i/o reads, i/o writes), durability, size. >32Gb is recommended.
SeaTalk1 is Raymarine proprietary protocol. Many popular Autohelm Raymarine autopilots use it. To integrate it into your system you have a number of choices:
Use bi-directional NMEA 0183 multiplexer which supports one SeaTalk1 port. First vendors to check are YakBitz and Quark-elec Marine. There are others as well. You want bi-directional multiplexer to be able to control autopilot from your pi via NMEA. There is a dedicated Autohelm autopilot plugin in SignalK.
Buy a dedicated Seatalk1 to NMEA converter.
For read/only Seatalk1 connection you can use this solution: https://github.com/SignalK/signalk-server/blob/master/Seatalk(GPIO).md
SeaTalk1 was reverse engineered and converter into NMEA is available: https://github.com/MatsA/seatalk1-to-NMEA0183 https://github.com/Thomas-GeDaD/Seatalk1-Raspi-reader
2.10. NMEA 0183
Widely supported. Many options to connect to pi.
with FTDI FT232 chipset https://www.amazon.com/dp/B07B416CPK
with CP210x chipset RS422 to USB converter
with CH340 chipset RS422 to USB converter
with Prolific PL2303 chipset RS422 to USB converter
NMEA 0183 Multiplexers working over USB (YakBitz, Quark-elec, etc)
|FTDI is preferable choice between FTDI, CP210x, CH340, or PL2303. FTDI seems always have unique serial ID which might be missing on others, and it will make harder to write udev rules to uniquely name the device on USB bus.|
NMEA 0183 Multiplexers working over WiFi or Ethernet
Yacht Devices https://www.yachtd.com/
NoLand Engineering https://nolandeng.com/
Encoded Solutions https://www.encodedsolutions.com/
Comar Systems https://comarsystems.com/
2.11. NMEA 2000
NMEA 2000 protocol was reverse engineered as a part of this project: https://github.com/canboat/canboat
Since then NMEA 2000 had been natively incorporated into SignalK as well.
Options to connect Pi to NMEA 2000 bus:
Actisense NGT-1 NMEA 2000® to PC https://actisense.com/products/ngt-1-nmea-2000-to-pc-interface/
CANable and CANable Pro by https://canable.io/
iKonvert NMEA 2000-USB Converter
Yacht Devices NMEA 2000 USB Gateway YDNU-02
Bi-directional NMEA 2000 Multiplexer WiFi (Quark-elec, etc)
Yacht Devices NMEA 2000 Wi-Fi Gateway YDWG-02
Yacht Devices NMEA 2000 Ethernet Gateway YDEN-02
OpenCPN TwoCan plugin has a list of compatible with it devices as well.
Stay away from devices which just convert NMEA 2000 into NMEA 0183. You need to feed NMEA 2000 into SignalK and be able to receive it too.
Several options to connect:
Many USB "mouse" GPS should work on BBN OS after plugging-in and giving them some time to acquire satellites outside of the house. Cold start can take half an hour or so with some GPS models.
Re-use GPS built-in into LTE router:
LTE modems on LTE routers have built-in GPS. If you followed our advice on using a router with OpenWrt OS then you will be able to install KPlex (or gpsd) on it and set up a connection to it from SignalK (or/and OpenCPN, AvNav) running on your raspberry pi.
Use GPS from your NMEA network. VHF have GPS and NMEA interfaces. Some NMEA multiplexers come with GPS built-in as well as most chartplotters.
PCB Boards connected to Pi:
Example: BerryGPS. The disadvantage of those is that they use your Pi’s built-in UART and you might have other devices that you want to use it instead.
2.13. SDR, SSB
RTL-SDR, SDRPlay SDR, HackRF SDR, LimeSDR, and likely others. Interfaces USB, Ethernet.
Yaesu, Icom are the popular vendors within HAM community.
SDRs consume quite some power, so it’s better to connect them to pi via a powered USB Hub (in case of USB interface).
Raspberry Pi OS supports NVMe and SATA SSDs with an appropriate extension board, or a Pi case, and their vendor’s driver.
NVMe apparently doesn’t give much performance boost over SATA for pi4 with an exception to CM4 (Pi4 Compute Module) performing better on writes with NVMe drives. pi4 internal interface is the bottleneck for transfer rate speed.
Booting from NVMe drives got supported by linux kernel on pi4 just recently (some bugs might remain).
Perform a benchmark of your SSD after installation with correct drivers. Make sure it falls into expected range.
SSD is also less prone to data corruption on sudden power cut-offs than SD cards.
USB stick drives (flash drives) performance is not as high as NVMe and SATA SSDs.
NASA Marine PC Navtex USB with an antenna (BBN OS comes with a program called PC-NavTex for it). ~$220
USB Devices from wetterinfobox.com (WIB2 - NAVTEX for PC) http://www.wetterinfobox.com
2.16. RTC (Real Time Clock)
Raspberry pi doesn’t have clock module to keep the time when it’s off, so you might consider adding one.
There are a few common i2c RTC modules:
Make sure there are no conflicts in addresses with your other i2c devices. Other devices usually have at least one option for switching to another address to avoid conflicts.
2.17. Sound Cards
As Raspberry Pi doesn’t have an audio input, for use with SSB radio you might want to have an additional sound card which has both audio in and out. There is a good selection of options, but check reviews and the compatibility with Raspberry Pi4.
2.18.1. IP Cameras
IP Cameras should work with MotionEye using their rtsp:// URLs.
2.18.2. Connecting cameras to CSI on raspberry pi
Geekworm Raspberry Pi Hdmi-in Module, Hdmi to CSI-2 could be used to solve distance issue with CSI cameras.
Another trick with Arducam CSI to HDMI Cable extension is for CSI cameras to connect to raspberry pi over longer HDMI. You can’t use HDMI camera, HDMI is used merely as wire signal extension for CSI.
2.18.3. Low light vision
Sionyx has some boating oriented solutions: https://www.sionyx.com/pages/boating
Image stabilization for boat movements is an important factor too.
2.18.4. USB connected cameras
Supported with USB 3.0f
We need your help with testing it and building some recommendations on models, etc.
SignalK Raspberry Pi 1wire plugin supports connecting multiple DS18B20 1-wire temperature sensors.
Sonoff Switches - Supported by SignalK plugin.
Ecowitt weather sensors - Supported via SignalK plugin.
Selly https://shelly.cloud/ - Supported via SignalK plugin.
EmpirBus NXT https://www.empirbus.com/ - Supported via SignalK plugin.
2.21. Power, 12v → 5v Converters
This converter was used with no issues:
TOBSUN EA50-5V DC 12V 24V to DC 5V 10A 50W Converter Regulator 5V 50W Power Supply Step Down Module Transformer
Over-voltage, over-current, over-temperature, short-circuit auto protection
Input voltage: 12/24V, Output: 5V/10A
As well as this UBEC:
US Ship Hobbywing 5V/6V 3A Switch-mode UBEC, Max 5A Lowest RF
Avoid powering Pi4 via GPIO pins directly as it bypasses an overvoltage self healing fuse built-in into pi.
2.21.1. Power Management, Victron, Venus OS
SignalK has good support for interfacing with Victron Energy products and their Venus OS.
SignalK comes with:
Victron Venus OS Plugin
ModBus Client Plugin
There is a great variety of antennas of a boat. Directional vs omnidirectional, active vs passive, internal (some are just a part of a circuit on a PCB) vs external, grounded vs ungrounded, receiving-only vs receiving/transmitting, and a wide variety of shapes.
2.22.1. VHF, AIS
VHF and AIS use similar frequencies, need be in direct line of sight, so the higher they are the better range. They are limited by Earth curvature. The range is around 30 miles. They can use the same antenna with a proper splitter. Transmitter device on AIS has to be licensed and registered.
2.22.2. Wi-Fi, LTE/4G
Similar but distinct separate antennas. Can work even if inside cabin of a fiberglass boat. Range varies on antenna gain. Wi-Fi usually in hundreds of feet. LTE/4G in/under few miles. LTE/4G uses cellular network of antennas of network providers which covers most populated areas.
Receive-only. Doesn’t need to be high. Needs a clear sky view of multiple satellites. External ones are usually active and placed inside of a mushroom-looking plastic. Designed to have almost world-wide coverage (except of extreme North/South poles areas). There are several GNSS systems with different satellite constellations. GPS (US), BEIDOU (China), GALILEO (EU), GLONASS (Russia), and QZSS (Japan)
2.22.4. Iridium, StarLink
Both are satellite communications. Iridium designed for a hand held phone with a small antenna. StarLink is communicating with more satellites on much lower orbits, and it is designed for a directional pizza-sized dish antenna, automatically orienting itself using a motor. Designed to have almost world-wide coverage (except of extreme North/South poles areas).
2.22.5. FM (Frequency Modulation)
Short piece of wire, small telescoping antenna. Receive only. 30-40 miles range. Transmitted from ground stations. VHF is FM too, but FM is loosely used term for music and local news broadcast channels.
2.22.6. Bluetooth, 433MHz FM RF
Bluetooth antennas are small and often just a part of a PCB circuit. Bluetooth range is really short and it is about 10 meters.
433MHz FM RF range is about 300 meters. Often used for remote controls. Wireless masthead wind transducers, etc.
2.22.7. NavTex, WeatherFax
Receive only. Transmitted from ground stations with predefined intervals of time. WeatherFax frequency depends on the region. You need to know a schedule of WeatherFax transmitting stations for different areas.
NavTex frequency is 518 kHz in the medium frequency band. 490 kHz in addition in some countries. Both NavTex and WeatherFax designed for almost world-wide coverage and offshore sailing.
PA0RDT active mini-whip antenna is good for NavTex and WeatherFax frequencies: http://dl1dbc.net/SAQ/miniwhip.html
2.22.8. SSB, HAM
Transmitting on SSB (Single Side Band) radio requires a license for an operator except of in an emergency. Designed for long range communications at sea and for offshore vessels. An insulated backstay of a mast can serve as SSB antenna. Propagation of SSB radio waves work on reflected or refracted back toward Earth from the ionosphere. Performance ranges in excess of 4000 miles. Some parts of SSB frequency spectrum work better at night, others during daytime.
HAM (aka amateur) radio also requires a license for an operator to transmit.
LoRa (Long Range) radio is license-free for both transmitting and receiving. Range 2-5 km in open. Used as a low power (and low traffic bandwidth) wireless platform for Internet of Things (IoT). LoRa antennas are small and usually attached to its devices.
3. How you can help
Add a star on our github project page https://github.com/bareboat-necessities/lysmarine_gen
Report a bug (or contribute to resolving an existing issue) https://github.com/bareboat-necessities/lysmarine_gen/issues
Spread the word. There are many sailing forums on Internet and Facebook. Let other people know what BBN OS could do for you.
Respond to a question in our discussion forums: https://github.com/bareboat-necessities/lysmarine_gen/discussions
Post a video on YouTube explaining how you use BBN OS on your boat
Submit a github pull request with code changes to improve BBN OS
Post a blog article or contribute to HOWTOs section of this document.
Of course, the BBN OS is completely open-source and free to use.
Please send us your HowTo, and we can add it here for everyone to find. Thanks
4.1. BerryGPS-IMU V3
Install the BerryGPS-IMU V3 hat
Follow steps to enable i2c and disable serial port https://ozzmaker.com/berrygps-setup-guide-raspberry-pi/
Remove serial console mentioned in /boot/cmdline.txt (argument with serial0 and baud rate)
sudo i2cdetect -y 1 (should show you addresses)
Create pypilot connection to signalK (see https://bareboat-necessities.github.io/my-bareboat/bareboat-os.html#_imu )
Set up barometer feed from SignalK ( https://bareboat-necessities.github.io/my-bareboat/bareboat-os.html#_barometer_temperature_humidity )
IMU data heading etc should come from pypilot NMEA
check it with telnet localhost 20220
i2c should be enabled, serial console disabled in config.txt
i2c driver should be loaded at boot (that’s what raspi-config step does)
At this point you should have data readable from GPS (via /dev/serial0) and IMU / barometer (via i2c)
Now you set up routing of this data into dashboards, chartplotters
IMU is read by pypilot, which feeds it via 20220 tcp port using NMEA 0183 format
pypilot also needs to have connection via SignalK web socket to port 3000 of signalK
That connection needs to be authorized made READ/WRITE in signalK using their token exchange procedure
GPS is read by signalK by creating NMEA connection to /dev/serial0 port (set correct baud rate)
Barometric/temp data is read by SignalK using signalK BME280 plugin. Make sure setting polling interval below 30 seconds (because OpenCPN expires non-navigational data every 30 seconds)
Calibrate level IMU on water. Calibrate your IMU compass, using pyPilot calibration utility.
I use external GPS antenna with it. (It needs to be an active antenna). There is a jumper/or switch on the Berry board to choose external antenna
|Cellular, GPS, WiFi Antenna (3 in one), Model AFCJF3, Price $80 Designed for marine and recreational vehicles (RV), this multi-band Cellular, GPS, WiFi Antenna (696 MHz - 5900 MHz / 5.9 GHz) is a 3-way omni-directional, IP67 waterproof antenna for harsh environment communication applications. https://www.signalbooster.com/products/cellular-gps-wifi-antenna|
Check with commands:
sudo i2cdetect -y 1
should show addresses on the bus, then
systemctl status pypilot@pypilot
should show that pypilot service as enabled, running and has no errors.
telnet localhost 20220
should show stream of heading NMEA data from pypilot.
telnet localhost 10110
should show both GPS and heading NMEA sentences from SignalK.
Also, check this FAQ for common berryGPS issues:
disabling echo on serial port might be required, as well as enabling ZDA NMEA time sentence.
ublox GPS receivers have extensive configuration. Check: https://gpsd.io/ubxtool-examples.html
4.2. RTL8812AU drivers
Following these steps it compiled fine from the first attempt https://github.com/aircrack-ng/rtl8812au
There is also a script to install various additional WiFi cards drivers
cd /home/user/add-ons ./wifi-drivers-install.sh
4.3. Cloud Storage
Using rclone you can store and sync your files on many cloud vendors storage. More: https://github.com/rclone/rclone
4.4. Using your smartphone as NMEA GPS receiver
Install GPS2IP application on your smartphone. Start it and enable GPS2IP in it. Your phone should be on the same local network as your boat computer. In SignalK add gps2ip_on_smartphone NMEA TCP connection to the IP address shown in GPS2IP app and the port specified there (usually 11123).
4.5. How to navigate with your smartphone as GPS receiver and have an Internet access on a boat within cellular reception
If you have a smartphone on board then you can use it as a source of NMEA GPS data and Internet provider for all your boat devices connected to your boat computer.
4.6. Dual monitor setup
Raspberry Pi comes with two HDMI outputs. However, its software is still not able to handle two heterogeneous displays properly. The hardest case is when one is a touchscreen and another is not, and they have different screen resolutions, and a mouse attached which needs to flow from one screen workspace to another workspace of a secondary screen. Another challenge is at boot time. What if one screen is powered and another is not, but a user decides to turn power on the secondary one later. Raspberry Pi OS seems unable to cover all these scenarios (nor other linux distributions at the current state).
4.7. Autostart programs on desktop startup
You can set up which programs you want to autostart when desktop comes up in Administration→Budgie Desktop Settings. Many users would probably want OpenCPN and KIP Dashboard right away.