Releases: openppg/eppg-controller
V7.1
[v6.6] Voltage Stability Improvement
Release Summary for OpenPPG Controller
Patch to improve voltage stability on RP2040 hardware. Buzzer caused excessive power draw and has been disabled on certain hardware to minimize brownouts.
What's Changed
Full Changelog: v6.5...v6.6
Note: With focus being shifted to v7.0 please use the version/6 branch for changes to the M0 and RP2040 platform
[v7.0] Support new controller, battery and ESC hardware
Release Summary for OpenPPG Controller
This introduces comprehensive updates to the ePPG controller firmware, primarily focused on supporting the V2.5 paramotor hardware by migrating to the ESP32-S3 platform and integrating CAN bus communication for enhanced ESC and BMS interaction. The changes also include a significant display system overhaul using LVGL and various improvements to code organization and functionality.
What's Changed
Core Platform & Architecture
- ESP32-S3 Migration: The primary focus of this update is the shift from RP2040/SAMD to the ESP32-S3. This provides more processing power, additional hardware peripherals, and leverages the FreeRTOS capabilities inherent to the ESP-IDF framework.
- CAN Bus Integration:
- ESC Communication: Transitioned from UART-based ESC communication to CAN bus, utilizing our
SineEsc
library. This allows for more robust and detailed telemetry from the ESC, including multiple temperature readings (MOS, MCU, Capacitor, Motor), voltage, current, and RPM. - BMS Communication: Integrated CAN bus communication with ANT BMS systems using our
BMS_CAN
library. This provides comprehensive battery telemetry such as State of Charge (SoC), individual cell voltages, overall battery voltage/current/power, temperatures, and cycle counts.
- ESC Communication: Transitioned from UART-based ESC communication to CAN bus, utilizing our
- Build System:
- Updated
platformio.ini
to target theespressif32
platform for the new board. (no longer building older SAMD based boards. - Added a new Python script (
merge-esp.py
) to merge ESP32 flash images into a single binary for deployment/updating.
- Updated
Display System Overhaul with LVGL
- LVGL Introduction: The display system has been completely revamped using LVGL (Light and Versatile Graphics Library). LVGL is a powerful, open-source embedded graphics library that allows for the creation of modern, visually appealing, and responsive user interfaces on resource-constrained devices.
- New UI Structure:
- Implemented a new main screen (
lvgl_display.cpp
) with distinct sections for battery status, power information, flight data (altitude, armed time), and temperature readings. - Utilizes various LVGL widgets like bars, labels, and lines for a structured layout.
- Introduced icons for cruise control, charging status, and arm failure warnings.
- Implemented a new main screen (
- Dynamic Updates: The UI is designed to dynamically update based on telemetry data from the ESC, BMS, and altimeter.
- Theming: Supports light and dark themes, configured through device settings.
- Splash Screen: A new splash screen is displayed on boot-up.
Code Organization & Refactoring
- Modularization: Code has been further modularized with new header and source files for distinct functionalities:
ble.h/.cpp
: Bluetooth Low Energy communication.bms.h/.cpp
: BMS CAN communication logic.buzzer.h/.cpp
: Buzzer control and melody playback.debug.h/.cpp
: Debugging utilities and fake telemetry generation.device_state.h
: Enum for device states (Disarmed, Armed, Armed_Cruising).esp32s3-config.h/.cpp
: Hardware configuration specific to the ESP32-S3.led.h/.cpp
: LED control (including NeoPixel).mode.h/.cpp
: Performance mode switching.throttle.h/.cpp
: Throttle processing logic.vibration_pwm.h/.cpp
: PWM-based vibration motor control.
- Globals & Structs:
- Updated
globals.h
andstructs.h
to reflect new telemetry data (e.g., detailed ESC temperatures, BMS data, unified battery data structure). - Introduced
TelemetryState
enum (Not Connected, Connected, Stale) for BMS and ESC. - Introduced
TempComponent
andTempState
enums for temperature monitoring.
- Updated
- Deleted Files: Removed legacy files related to the previous display system (
display.h/.cpp
), M0/RP2040 configurations, old CRC implementation, and the previous vibration system. - Configuration Management:
- Adapted
extra-data.ino
to use ESP32Preferences
for storing device settings instead of EEPROM. - BLE characteristics added for reading and writing various device settings (e.g., screen rotation, metric units, performance mode, theme, time, timezone).
- Adapted
Functionality Enhancements
- BLE Introduction:
- Expanded BLE services and characteristics to expose more device settings and telemetry data.
- Added characteristics for BMS telemetry, ESC telemetry (voltage, current, RPM, temperatures), and device state.
- Implemented callbacks for BLE characteristics to update device settings dynamically.
- Altimeter & Vario:
- Altimeter logic now includes a circular buffer for altitude readings to calculate vertical speed (work in progress).
- Added functions to get vertical speed and barometric temperature.
- Buzzer & Vibration:
- Buzzer now uses a FreeRTOS queue (
melodyQueue
) for non-blocking melody playback. - Vibration motor control updated to use PWM for more nuanced patterns (
vibration_pwm.cpp
).
- Buzzer now uses a FreeRTOS queue (
- Error Handling & Status:
- Introduced flashing icons for arm failure and cruise control activation failure (e.g., throttle too high).
- Temperature monitoring now includes distinct warning and critical states for BMS, ESC, and motor components, visually indicated on the display.
- Versioning: Updated firmware version to 7.0.
Notes
This release represents a significant foundational step in leveraging the ESP32-S3's capabilities for the ePPG controller. While this initial build focuses on core functionality, CAN bus integration, and the new LVGL-based display system, we are actively working to rapidly expand features. Future updates will further harness the enhanced processing power and connectivity of the ESP32-S3 to deliver an even more robust and feature-rich experience for paramotor control and telemetry.
[v6.5] Stability and Refinement
Release Summary for OpenPPG Controller
This release sharpens performance, boosts reliability, and refines the user experience for a better experience in the air and on the ground.
What's Changed
Configurable Controller Information Requests
PR #58
The config client now explicitly requests controller information instead of sending it automatically upon connection.
- Improves stability by allowing recovery commands (e.g., reboot to bootloader) to be sent even if an error occurs during initial config transfer.
Display and Vibration Motor Enhancements
Display Improvements:
- Added an animated “OpenPPG” text to the splash screen for a more polished user experience.
Vibration Motor Refactoring:
- Tuned vibration strength for stronger, more precise feedback.
- Introduced new vibration sequences.
- Cleaned up the vibration motor code in preparation for supporting different vibration drivers.
ESC Integration and Build Updates
- Refactored ESC-related functionality into dedicated
ESC.h
andESC.cpp
files, improving clarity and maintainability. - Streamlined telemetry handling, preparing for support of different ESCs.
State Management Overhaul
- Introduced a
DeviceState
enum to replace the previousarmed
andcruising
flags, enabling better state management. - Updated task stack sizes and priorities for improved stability and performance.
- Added a mutex to ensure thread safety during state changes.
Full Changelog: v6.4...v6.5
[6.4] Arming value check
What's Changed
- Small change to arming checks to read raw potentiometer value vs using smoothed value, which in rare cases would allow arming at higher than expected values.
Full Changelog: v6.3...v6.4
[v6.3] New Font + Core Stability
What's Changed
- New font! by @zjwhitehead in #48
- Single core operations, debugging by @zjwhitehead in #49
Other Changes
- Bump GH actions by @zjwhitehead in #47
- Update pr-labeler.yml by @zjwhitehead in #51
Full Changelog: v6.2...v6.3
v6.3-rc1
What's Changed
- New font! by @zjwhitehead in #48
- Single core operations, debugging by @zjwhitehead in #49
Full Changelog: v6.2...v6.3-rc1
[6.2] Runtime hardware configuration
What's Changed
- Support multiple RP2040 boards by @zjwhitehead in #46
v6.1 was only for 2040 hardware. 6.2 is the combined release for both
Full Changelog: v6.0...v6.2
v6.1-b1
RP2040 module support
Full Changelog: v6.0...v6.1-b1
[6.0] FreeRTOS, screen rewrite
What's Changed
- Introduce FreeRTOS for true multithreading on both cores on RP2040
- Rewrite screen logic to use frame buffering for a cleaner, more reliable info display (inspired by @thandal efforts)
- Dark mode is now an option - pick your theme in the config tool
- Show ESC temperature on the screen
- Allow viewing of version and run time without rebooting (hold down button while disarmed)
Code improvements
- Break out code for altimeter into CPP files
- More reliable EEPROM writes
Note: SAMD21/M0 controllers are not yet compatible with v6.0