Victron–Monitors (Technical)


A month before heading back to Canada for last hurricane season we suffered a failure of one of our Chinese MPPT solar controllers. Then shortly after that I started noticing one of the other controllers was not holding the optimal voltage for the solar panels (essentially rendering the MPPT function useless). I suspect both of these issues were tied to our lightening strike as both those controllers survived that event(however they lasted a year after that strike). So facing replacement of 2 out of our 4 solar controllers I decided that I would replace 3 with Victron Bluesolar MPPT controllers. I would then keep the 2 remaining Chinese ones (not struck by lightening) for our smallest solar bank, 1 controller as backup.

Unfortunately when it came time to order the new controllers I discovered that the accessories for the Victron controllers are priced VERY high. A remote display currently sells on Amazon for $80USD and I would require 3. The other option is to purchase a Bluetooth dongle, but even those sell for $55USD each. I did originally purchase one Bluetooth dongle but it’s a real pain in the rear to move it around to each controller everyday. It also has other strange requirements, like it only works on Android and Macintosh, but not Windows. So as a cruiser with loads of time on my hands I began thinking and using my Googlefoo to see if I could come up with a solution to remotely display the pertinent data for each controller.


During my brainstorming session I set the following requirements:

1. MUST be a physical display for each controller somewhere in the boat. The Bluetooth dongle is neat, but I don’t want to rely on external equipment (dead tablet battery means I can’t see the data).

2. Must be powered from the solar controller itself, or 12V from the boat.

3. Must display the required data (Battery volts, amps flowing into batts, watts the panels are producing and voltage of the panels).

4. Just display, no requirement to change controller settings. (I could use the Bluetooth dongle when I needed to do that)

4. Be efficient (only use small amounts of power)


So with the requirements set out I began my research. My search began with the port on the controllers that the optional Bluetooth dongle and remote display plugs into (Victron call it a port). I was delighted to discover that not only is this port a simple serial port running at 19200 baud, but Victron has released whitepapers on the protocol used (Victron Whitepaper). The controllers actually run 2 different protocols, a plain text version and a more advanced HEX version that allows settings to be changed. Since I had no requirement to change settings, the default plain text version would make things super simple. This opened up a whole realm of possibilities as interpreting and displaying plain text could be done by thousands of devices.


If I had been back in Canada I would have probably decided on designing a custom circuit board and using a PIC microcontroller (probably foolishly complex). However, that just wasn’t a possibility on the boat. I needed to pick items that would just require wiring and no custom board designing, etching and populating. So with a little brainstorming I came up with the following BOM (bill of materials). Since we had guests coming, I ordered the items to our address in Canada so our guests could bring them.

– Arduino Nano (1 for each controller)

– 16 X 2 LCD Display with I2C interface (blue backlight cause its sexy)

– JST-PH 2.00mm pitch 4-pin connectors (sigh Amazon sent the wrong ones).


I choose the Arduino Nano for a couple of reasons. First, in the Victron whitepaper I discovered that the VCC pin on the port could not supply enough current to run a standard backlight display. This meant that I would need to power a display from another source. Since the Arduino Nano has an onboard voltage regulator, I could use it to power the display from the house 12V. Second, size, the Nano is tiny and would allow me to physically affix it to the display easily. Finally, cost, although there are better Arduino boards (like the Micro), the Nano rains supreme on cost. I was able to get a 3 pack on for $18.21CDN. As to the 16 X 2 display, I didn’t really require an I2C interface as I would have had enough pins on the Nano. However having only 4 wires to hookup made the project that much simpler and only increased the cost by a few dollars for all three displays (work smart, not hard).  The costs breakdown is as follows.

Arduino Nanos  (3 pack)   – $18.21(cdn)

I2C 16 X 2 displays(3)         – $8.65(cdn)

JST connectors (10)            – $3.11(cdn)

Total                              – $29.97 (CANADIAN FOR ALL 3 DISPLAYS)

For shame Victron.. If a mere mortal like me can buy AT RETAIL the components to make a functional display for your MPPT controllers for less than 1/8th the cost of your displays, you are doing something wrong. You are either overcharging, or have overdesigned. Sure, you would need to include an enclosure, but at economies to scale it shouldn’t be hard to hit that price point for manufacture.  Maybe its time to start thinking about offering a simplistic display. Hell, raise the price of your controllers and include it in the box.


Alright once I had all the materials in hand, I knocked up a quick proof of concept version that I could use as a test bed to write and debug the code. Once I confirmed everything worked as expected I made the following schematic as a reference.



Here is a schematic of the Victron port. Ports are in different orientations depending on which model of MPPT you have!


Image from


A couple of things to note about the above schematic.

1. The TX pin on the VE.Direct port must go to the RX pin on the Arduino and vice versa (think about it, TX on one needs to talk to RX on other)

2. You will notice I only have 3 wires going to the port (4 pin port). You do not require the 5V pin if you only connect to the Victron when its powered by the house batts. The 5V pin is only required if you want to connect to the Victron when its disconnected from everything else and in this instance you would never need to do that. Technically, I only require 2 pins as I’m not sending anything to the RX port on the Victrons. However I decided to keep the 3rd pin in case I wanted to play with fancy stuff in the future.

3. Yes, I’m using a software serial port. However at 19200 baud the software serial port is %100 reliable. The Atmega chip has more than enough grunt. (This is why the RXO and TXI pins are not being used on the Arduino)

4. GND pins are GND pins. It doesn’t matter which GND goes where. Wire it up in the easiest manner.


Here is a quick verbal breakdown of the pinout.

ICSP GND             – LCD ground pin

5V pin                    – LCD VCC

A4                          – LCD SDA

A5                           – LCD SCL

GND pin(D side)  – Victron ground

D2                          – Victron TX

D3                          – Victron RX

VIN                         – +12V In (from house batts)

GND pin(A side) – -12V In (from house batts)


Now as to the software. This gave me a little trouble since I had not written in C++ in 15 years. Obtaining the data from the Victron was easy. Displaying text on the LCD was easy. However, I just couldn’t figure out how to parse the text data coming from the Victron. I did write some code that kind of worked, but it looked like it was written by a baby monkey with autism. I floundered for a day before I finally ceded and turned to the Arduino examples and the forums. Of course I found some nice neat code examples that just needed a little glue logic. I have attached the sketch to the bottom of this post and its free for anyone to download and use. It now looks like it was written by a normal baby monkey. I have also attached the required LiquidCrystal_I2C includes as a zip file. Use the “Add Zip Library” function in Arduino studio to install the library.

Before anyone asks.. YES its possible to display any of the parameters output by the Victron. I have actually left an extra parameter (CS) in the code as an example. I’m not sure you would want to display anything different as the 4 parameters I’m displaying are the most important for monitoring your solar setup. However, if you purchased a bigger display (20 X 4 I2C displays are available) it might be nice to display extra data. It should also be possible to add a little bit of code to turn the entire thing into a Victron data cable. This would allow you to use VictronConnect software on your Windows/Mac computer on top of the monitor functions I intended (yes, I actually tested this).


So finally here are some pictures of the finished product.


Backside of our “Energy Display Center”. As you can see I have made some changes  a few times. I wished I could have just bought a new front cover, but I can’t find the electrical box outside of St. Martin. The green boards are the LCDs with the Arduino’s zip tied to the back with double sided tape between!


The completed displays. I could have done a better job cutting, but its pretty tough with a Dremel. It looks better in real life, most of the flaws are not visible. So, the three on the left are the monitors for the Victron controllers, the one on the top right is the display for our wind generator, and the one on the bottom is the last Chinese controller we have aboard. Having this display is amazing as I can see the energy coming in from every source.

P.S. The top display says “INIT” because I’m still waiting for a connector. Since Amazon sent the wrong connectors, I have had to source them down here. I bought the first 2 connectors, but I have a line on a dead Bluetooth dongle so I don’t have to buy that final connector.


Here is a picture the updated version of the software. I have now added a letter to the top far right to show the status of the charger (B=Bulk, A=Absorb, F=Float, O=Off). I have also go the cable to get all three displays working.



VictronDisplay Source Code

LiquidCrystal_I2C Library

  11 comments for “Victron–Monitors (Technical)

Leave a Reply to travis Cancel reply

Your email address will not be published. Required fields are marked *