Skip to content

Repository files navigation

ev-26-raspi

CAN bridge + web GUI for the DFR EV-26 FSAE car. Runs on a Raspberry Pi connected to the vehicle CAN bus.

  • can-bridge — Rust backend that reads/writes CAN FD frames and exposes a WebSocket API (port 9002)
  • gui — React frontend served by Caddy, reverse proxies /ws to the backend

Prerequisites

  • Podman (or Docker)
  • just command runner
  • GHCR login: podman login ghcr.io

Just Commands

CommandDescription
just buildCross-build both container images for arm64
just pushPush images to ghcr.io/schommie/
just deployBuild + push, then run podman auto-update on the Pi
just devStart dev environment with hot reload
just upStart production stack on the Pi
just downStop all services
just checkRun cargo check for can-bridge (cross-compile)

CI/CD Workflow

Deploy from dev machine

just deploy

This builds arm64 images, pushes them to GHCR, and prints a reminder to update the Pi.

On the Raspberry Pi

Pull and restart with the latest images:

sudo podman auto-update

Or manually:

podman-compose pull && podman-compose up -d

Auto-start on boot

Place Quadlet .container files in /etc/containers/systemd/ on the Pi:

/etc/containers/systemd/can-bridge.container

[Container]Image=ghcr.io/schommie/ev-can-bridge:latest
Network=host
AutoUpdate=registry
[Service]Restart=always
[Install]WantedBy=default.target

/etc/containers/systemd/gui.container

[Container]Image=ghcr.io/schommie/ev-gui:latest
Network=host
AutoUpdate=registry
[Service]Restart=always
[Install]WantedBy=default.target

Then reload and start:

sudo systemctl daemon-reload
sudo systemctl start can-bridge gui

Local Development

just dev

Starts both services with volume mounts for hot reload — can-bridge uses cargo-watch, gui uses Vite dev server on port 5173.

About

tools and scripts for the raspi on the 2026 ev

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages