Compiling the software

Tools

I use the following tools in order to build and manage the software:

  • Visual Studio Code

  • PlatformIO

  • Git for Windows

  • Python3 (for building docs)

Note

From v2 the User Interface is built in VueJS and stored in a separate project (mp-se/gravitymon-ui). The github build scripts will automatically fetch the latest version from that repository.

Code Formatting

I use pre-commit and their cpp style checks to validate the code. Plugin defintions are found in .pre-commit-config.yaml

Pre-Commit

Note

There is not yet any automatic checks since this does not work on Windows. It works if running under WSL2 with Ubuntu or on MacOS.

Targets

In the platformio config there are 3 targets defined

  • gravity-debug; Maximum logging for trouble shooting, deep sleep is disabled.

  • gravity-release; Standard release

  • gravity32-release: Version for ESP32 mini.

  • gravity32c3-release: Version for ESP32 C3 mini v2.1+.

  • gravity32c3v1-release: Version for ESP32 C3 mini v1.0.

  • gravity32s2-release: Version for ESP32 S2 mini.

  • gravity32s3-release: Version for ESP32 S3 mini.

  • gravity32lite-release: Version for ESP32 lite (Floaty hardware).

Warning

The debug target can be unstable and crash the device under certain circumstanses. Excessive logging to the serial port can cause corruption and crashes. So only enable enough debugging to troubleshoot your changes.

Serial debugging on battery

Serial output

On the ESP32 builds the serial output can be written to UART0 which is connected to the RX/TX pins on the chip. This way the serial output can be viewed without a connection to the USB port, convinient when running the device on battery power. In order to get this to work you need to compile the sofware with the option DUSE_SERIAL_PINS and attach as USB to TTL cable to the correct pins.

You connect the USB to TTL cable that you connect the TX, RX and GND pins. Dont connect the power pin if you are powering the device from USB or Battery.

USB to TTL cable Serial output ESP32c3

Source structure

Directory structure

path

content

/.github

Automated github action workflows

/bin

Contains compiled binaries

/data

Directory for flashing device filesystem

/doc

Various external documents used as input

/html

Copy of gravitymon-ui (User Interface) build

/lib

External libraries used when compiling

/script

Scripts used in build process

/src

Source code for software

/src_docs

Source code for documentation

/test

Test data for developing html files

Options

This is a list of C++ defines that is used to enable/disable functions in the code.

Defines

define

description

USER_SSID

If defined the device will always use this SSID

USER_SSID_PWD

Password to the SSID

LOG_LEVEL

Defines the logging level used 4=INFO, 5=DEBUG, 6=VERBOSE

CFG_APPVER

Defines the version of the compiled software

CFG_GITREV

Contains the last 6 digits of the git revision

USE_SERIAL_PINS

Will send the serial console to the TX/RX pins on an ESP32 target so that debugging can be done when on battery

FLOATY

Build for the ESP32lite FLOATY hardware option (no DS18B20 and no battery monitor)

ENABLE_REMOTE_UI_DEVELOPMENT

When enabled this will enable the UI project to interact with a device without any security issues, should not be enabled for production builds

SKIP_SLEEPMODE

The device never goes into sleep mode, useful when developing

COLLECT_PERFDATA

Used to send performance data to an influx database for analysis (development)