Use events and commands to control custom onboard leds and buttons. Can be used to communicate with an external Python script via a WebSocket API running in a container alongside LVA.
65 lines
2.6 KiB
Docker
65 lines
2.6 KiB
Docker
FROM python:3.13-slim-trixie
|
||
|
||
ENV LANG=C.UTF-8
|
||
ENV DEBIAN_FRONTEND=noninteractive
|
||
ENV PYTHONUNBUFFERED=1
|
||
|
||
LABEL \
|
||
org.opencontainers.image.title="ReSpeaker 2-Mic Pi HAT Peripheral Controller" \
|
||
org.opencontainers.image.description="LED and button controller for ReSpeaker 2-Mic Pi HAT, communicating with Linux Voice Assistant" \
|
||
org.opencontainers.image.source="https://github.com/OHF-Voice/linux-voice-assistant"
|
||
|
||
# ----------------------------------------------------------------------------
|
||
# System packages
|
||
#
|
||
# The lgpio Python package wraps the system liblgpio C library, which is
|
||
# not in Debian's repos (Raspberry Pi OS ships it, upstream Debian does
|
||
# not). On aarch64 with no prebuilt wheel we compile the C library from
|
||
# source and then build the Python bindings against it.
|
||
#
|
||
# build-essential compiles the lgpio C library, spidev, and the
|
||
# Python lgpio extension
|
||
# python3-dev Python C headers for the Python lgpio extension
|
||
# swig generates the Python lgpio bindings at build time
|
||
# git clones the lgpio C library source
|
||
# ----------------------------------------------------------------------------
|
||
RUN apt-get update && \
|
||
apt-get install --yes --no-install-recommends \
|
||
build-essential \
|
||
python3-dev \
|
||
swig \
|
||
git \
|
||
ca-certificates && \
|
||
apt-get clean && \
|
||
rm -rf /var/lib/apt/lists/*
|
||
|
||
# Build and install the lgpio C library so the lgpio Python package can
|
||
# link against it. Pinned to a tagged release (v0.2.2) for reproducibility.
|
||
RUN git clone --depth 1 --branch v0.2.2 https://github.com/joan2937/lg.git /tmp/lg && \
|
||
cd /tmp/lg && make && make install && ldconfig && \
|
||
rm -rf /tmp/lg
|
||
|
||
WORKDIR /app
|
||
|
||
# ----------------------------------------------------------------------------
|
||
# Python dependencies
|
||
#
|
||
# websockets – WebSocket client for LVA peripheral API
|
||
# spidev – low-level SPI access for APA102 LEDs
|
||
# gpiozero – GPIO button input (Pi 3/4/5 compatible)
|
||
# lgpio – gpiozero backend; works on Pi 3/4/5 including Pi 5
|
||
# ----------------------------------------------------------------------------
|
||
COPY requirements.txt ./
|
||
RUN pip install --no-cache-dir -r requirements.txt
|
||
|
||
COPY respeaker_2mic_hat.py ./
|
||
|
||
# Make /app writable by the runtime user. lgpio creates notification
|
||
# files (.lgd-nfy-N) in the process working directory at startup, and
|
||
# compose runs this container as a non root user for device access.
|
||
# The default root owned /app blocks lgpio from initialising, which
|
||
# makes gpiozero fall through every pin factory.
|
||
RUN chmod a+w /app
|
||
|
||
ENTRYPOINT ["python3", "respeaker_2mic_hat.py"]
|
||
CMD [] |