# Volvo Display App ## Setup 1. Install Python dependencies: ```bash pip install -r requirements.txt ``` Or if using system packages: ```bash sudo apt install python3-pyside6 ``` 2. **System Requirements (Linux/Raspberry Pi):** PySide6 (Qt 6.5+) requires `libxcb-cursor0` to be installed on Linux systems. ```bash sudo apt install libxcb-cursor0 ``` If you encounter other missing library errors, you may need additional Qt dependencies: ```bash sudo apt install libxcb-xinerama0 ``` ## Hardware Setup (Dallas DS18B20 Sensors) To use real temperature sensors, wire them to the Raspberry Pi as follows: | Sensor Wire | Raspberry Pi Pin | Note | | :--- | :--- | :--- | | **VCC (Red)** | **Pin 1 (3.3V)** | | | **GND (Black)** | **Pin 6 (GND)** | | | **DATA (Yellow)** | **Pin 7 (GPIO 4)** | **Requires 4.7kΩ Resistor between VCC and DATA** | **Enable 1-Wire**: 1. Run `sudo raspi-config` 2. Select **Interface Options** -> **1-Wire** -> **Yes**. 3. Reboot. ### Option B: Separate Pins (Advanced) If you prefer to connect sensors to separate pins (e.g., to distinguish them physically or avoid soldering), you can enable multiple 1-Wire buses. 1. Open configuration: ```bash sudo nano /boot/config.txt ``` 2. Add multiple overlay lines with defined pins (e.g., GPIO 4 and GPIO 17): ```ini dtoverlay=w1-gpio,gpiopin=4 dtoverlay=w1-gpio,gpiopin=17 ``` 3. Reboot. *Note: Sensors from all pins will still appear in the same list. Identification is done via their unique ID.* ## Running the App Run the application with: ```bash python3 main.py ``` ### Headless / Framebuffer If running on a Raspberry Pi without a desktop environment, you might need to specify the platform: ```bash python3 main.py -platform linuxfb ``` or ```bash python3 main.py -platform eglfs ``` ## Running on Headless Raspberry Pi If the application hangs or fails to open on the display, ensure you are using the correct platform plugin. Use the provided helper script: ```bash chmod +x run_pi.sh ./run_pi.sh ``` Or manually: ```bash export QT_QPA_PLATFORM=eglfs python3 main.py # or if using the compiled binary: ./dist/volvodisplay ``` ### Troubleshooting "failed to load egl device" This error means the application cannot access the Direct Rendering Manager (DRM) device required for hardware acceleration (`eglfs`). 1. **Check Permissions**: Ensure your user is part of the `render` and `video` groups. ```bash sudo usermod -aG render $USER sudo usermod -aG video $USER ``` **You must reboot** after running these commands. 2. **Use Software Rendering**: If you cannot get hardware acceleration working, use `linuxfb` (Linux Framebuffer). This uses the CPU. ./run_pi.sh linuxfb ``` 3. **Check Boot Configuration**: If you are running as root and still get EGL errors, ensure your Pi is using the KMS driver. Check `/boot/config.txt` (or `/boot/firmware/config.txt`) and ensure this line is active: ```ini dtoverlay=vc4-kms-v3d ``` (or `dtoverlay=vc4-fkms-v3d` for legacy fake-kms) 4. **Runtime Directory**: Qt requires `XDG_RUNTIME_DIR` to be set. The `run_pi.sh` script now handles this automatically for root users. ```bash export QT_QPA_PLATFORM=linuxfb python3 main.py ``` ## Compiling for Raspberry Pi ### System Requirements for Build PyInstaller needs to locate system libraries to bundle them. On a fresh Raspberry Pi OS (or Debian container), you likely need to install these: ```bash sudo apt update sudo apt install -y \ libxcb-cursor0 \ libxcb-icccm4 \ libxcb-keysyms1 \ libxcb-render-util0 \ libxcb-xkb1 \ libxcb-image0 \ libxkbcommon-x11-0 \ libxkbcommon0 ``` ### Build Instructions To create a single-file binary that runs on the Raspberry Pi: 1. Ensure you are **on the Raspberry Pi** (or a system with the same architecture, e.g., ARM64). 2. Make the build script executable: ```bash chmod +x build.sh ``` 3. Run the build script: ```bash ./build.sh ``` 4. The executable will be located in the `dist` folder: ```bash ./dist/volvodisplay ```