Files
volvodisplay/README.md

155 lines
4.1 KiB
Markdown
Raw Permalink Normal View History

# 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
```