My van's embedded monitoring platform, using Modbus over RS-485 and RS-232 on the Raspberry Pi Pico microcontroller.
This is a DIY open source project of my own creation, and as such take no responsibility for this code...
- Interface with a range of Renogy Products a) Renogy Rover 40A (RVR40) over Modbus RTU 232 b) Renogy Smart Lithium Battery (LFP100S) over Modbus RTU 485 c) Renogy DC-DC Battery Charger (DCC50S) over Modbus RTU 485
- Display information from each of these products on a WaveShare 2.9" E-Ink display
- Display statistics over time (Rolling average for the hour, and after 48 hours, 7 days).
device-lfp10s.h
: Register mappings for the LFP100S batterydevice-dcc50s.h
: Register mappings for the DCC50S unitdevice-rvr40.h
: Register mappings for the RVR40 controller
devices-modbus.h
contains the various pinouts for the Raspberry Pi Pico UART pins. It makes use of both UARTs (one for modbus 485, and one for 232).
#define UART_RX_TIMEOUT 1000000
#define RS485_PORT uart0
#define RS485_BR 9600
#define RS485_DBITS 8
#define RS485_SBITS 1
#define RS485_PIN_TX 0
#define RS485_PIN_RX 1
#define RS485_PIN_RTS 22
#define RS232_PORT uart1
#define RS232_BR 9600
#define RS232_DBITS 8
#define RS232_SBITS 1
#define RS232_PIN_TX 4
#define RS232_PIN_RX 5
vanny-hub.h
contains the modbus node configuration, as well as refresh rates and statistic storing rates, as well as the GPIO pin used for changing the screen view.
#define _VERBOSE
#define LED_PIN 25
#define BTN_PIN 21
//#define EPD_UPDATE_PARTIAL
#define EPD_FULL_REFRESH_AFTER 3
#define EPD_REFRESH_RATE_MS 60000
#define RS485_DCC50S_ADDRESS 0x01
#define RS485_LFP100S_ADDRESS 0xf7
#define RS232_RVR40_ADDRESS 0x01
#define STATS_MAX_HISTORY 168
#define STATS_UPDATE_ROLLING_MS 10000 // (secondly)
#define STATS_UPDATE_HISTORIC_MS 3600000 // (hourly)
And finally, the display SPI pinout configuration is defined in display/display-ws-eink.h
#define SPI_PORT spi1
#define SPI_BD 4000000
#define SPI_PIN_DC 8
#define SPI_PIN_CS 9
#define SPI_PIN_CLK 10
#define SPI_PIN_DIN 11 // Aka. MOSI
#define SPI_PIN_RST 12
#define SPI_PIN_BSY 13
This project uses the Raspberry Pi Pico, and as such uses it's C API as well as a modbus library (stored as git submodules). This requires the use of:
$ git submodule sync
$ git submodule update
Currently I have only written bash scripts for building and deploying the binaries (Ubuntu / Debian or Arch with minor adjustments of paths). But to use them, simply:
$ ./build.sh
$ ./deploy.sh