Raspberry Pi 5 Setup Guide
This page walks through setting up the Raspberry Pi 5 as the main compute node for the demo.
Prerequisites
- Raspberry Pi 5 with Waveshare RS485 CAN Hat mounted
- MicroSD card (32 GB+ recommended)
- 10″ HDMI display (optional but helpful)
- Internet-connected Wi-Fi network shared with all ECU devices
1. Flash the SD Card
Flash Ubuntu 24.04 Desktop using the Raspberry Pi Imager. After flashing, open config.txt on the boot partition and add:
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=2000000
Insert the SD card and boot the Pi. Complete the setup wizard and connect to your Wi-Fi network.
Ensure all demo devices (Arduinos, AZ3166 boards, Raspberry Pi) are on the same Wi-Fi network with a strong signal. MQTT connection loss can occur with weak signal or congested routers.
2. Clone the Repository
sudo apt update
sudo apt install -y git
git clone https://github.com/chheis/eclipse-sdv-e2e-demo-blueprint --recurse-submodules
cd eclipse-sdv-e2e-demo-blueprint/devices/raspberry-pi5/
chmod +x setup.sh
If you forgot --recurse-submodules:
git submodule init
git pull --recurse-submodules
3. Run the Automated Setup Script
The setup script installs all required packages, configures SocketCAN, installs Docker and Ankaios, and deploys CAN provider assets:
export ANKAIOS_INSTALL_URL="https://github.com/eclipse-ankaios/ankaios/releases/latest/download/install.sh"
sudo -E ./setup.sh
The script performs the following steps automatically:
- Installs
can-utils,net-tools,curl,vim,podman - Installs Docker Engine and Docker Compose plugin
- Disables Wi-Fi power saving (sets
wifi.powersave = 2) - Installs Eclipse Ankaios via the official install script
- Configures SocketCAN via
systemd-networkd(80-can.network) - Copies CAN provider configuration files to
/opt/kuksa/can-provider/
4. Manual Setup (Alternative)
If you prefer to set up manually instead of using the script:
4.1 Install Packages
sudo apt-get install -y can-utils net-tools curl vim podman
sudo apt-get install -y docker.io docker-compose-v2
sudo systemctl enable --now docker
4.2 Disable Wi-Fi Power Saving
Edit /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf:
[connection]
wifi.powersave = 2
Restart NetworkManager:
sudo systemctl restart NetworkManager
4.3 Configure SocketCAN
Create /etc/systemd/network/80-can.network and enable:
sudo systemctl enable systemd-networkd
sudo systemctl restart systemd-networkd
4.4 Install Eclipse Ankaios
curl -sfL https://github.com/eclipse-ankaios/ankaios/releases/latest/download/install.sh | bash -
4.5 Deploy CAN Provider Assets
Copy the following files to /opt/kuksa/can-provider/:
can-provider-config.inimotorbike-blinker-vss.jsonmotorbike-blinker-command.dbcmotorbike-blinker-defaults.json
5. Build the MQTT-to-gRPC Bridge Image
Build locally on the Raspberry Pi 5:
# Using Podman
podman build -t grpc-mqtt-bridge:latest devices/raspberry-pi5/grpc-mqtt-bridge
# Or using Docker
docker build -t grpc-mqtt-bridge:latest devices/raspberry-pi5/grpc-mqtt-bridge
The Ankaios manifest (vehicle-signals.yaml) references the GHCR image ghcr.io/chheis/eclipse-sdv-e2e-demo-blueprint/grpc-mqtt-bridge:main. If you build locally with tag :latest, either re-tag the image:
podman tag grpc-mqtt-bridge:latest ghcr.io/chheis/eclipse-sdv-e2e-demo-blueprint/grpc-mqtt-bridge:main
or edit the manifest to use your local tag.
The GitHub Actions workflow also publishes this image to ghcr.io on pushes to main.
6. Start Everything
From the repository root:
sudo ./start-fleet-and-ankaios.sh
This startup script:
- Starts the Fleet Management Docker Compose stack (Zenoh variant)
- Applies the Ankaios workload manifest (
vehicle-signals.yaml) - Starts Dozzle at
http://<pi-ip>:8080for container log monitoring - Builds and starts the demo website at
http://<pi-ip>:8090
The startup script injects devices/raspberry-pi5/website/site-config.json into the Ankaios website workload before applying the manifest. Edit this file to customize the dashboard.
The website container runs privileged so it can probe SocketCAN activity (candump on can0). An optional legacy host-process mode can be enabled with WEBSITE_ENABLED=true.
The first run takes a long time because all container images must be pulled or built locally.
7. Verify the Setup
Check Ankaios Workloads
ank get workloads
Or use the CLI helper script:
python3 devices/raspberry-pi5/ank-workloads-cli.py
Check CAN Bus
candump can0
You should see CAN frames when the joystick ECU is active.
Test MQTT Manually
mosquitto_pub -h localhost -p 1883 -t InVehicleTopics -q 0 \
-m '{"Vehicle.Body.Lights.DirectionIndicator.Left.IsSignaling":true,"Vehicle.Body.Lights.DirectionIndicator.Right.IsSignaling":false,"Vehicle.Body.Lights.Brake.IsActive":"INACTIVE"}'
Access the Services
| Service | URL |
|---|---|
| Demo website | http://<pi-ip>:8090 |
| Dozzle (container logs) | http://<pi-ip>:8080 |
| Grafana | http://<pi-ip>:3000 |
| rFMS API | http://<pi-ip>:8081 |
| Fleet Analysis API | http://<pi-ip>:8082/fleet-analysis/api |
Arduino ECU Configuration
Point the Arduino MQTT broker IP addresses to the Raspberry Pi 5. The default in the sketches is 192.168.88.100. Update the arduino_secrets.h files for your network:
devices/driver-input-ecu-arduino/mcu2-joystick-input/arduino_secrets.hdevices/driver-input-ecu-door/arduino_secrets.h
For detailed device-specific setup, wiring and firmware instructions, see:
- Joystick Input ECU — Joystick wiring, MQTT config and sketch upload
- LED Control ECU — MCP2515 wiring, CAN protocol and LED allocation
- RFID Door ECU — RC522 RFID reader setup
- ThreadX SOME/IP ECU — MXChip AZ3166 build, flash and SOME/IP configuration
Shutdown
sudo ./shutdown-fleet-and-ankaios.sh