Qt6 Smart Home Light Controller Β· Yocto Kirkstone Β· Raspberry Pi Β· GPIO
A fullscreen Qt6 QML application cross-compiled with Yocto for Raspberry Pi 2, running on a Wayland/Weston compositor. Built and deployed inside a Docker container using kas for reproducible layer management.
Lumina.mp4
| Milestone | Status |
|---|---|
| Hello World Application | β Done |
| GPIO LED control button | β Done |
| App boots on Pi directly | β Done |
| Open lamp with voice | β Done |
| Better UI / Dashboard | π Coming |
| Support multiple devices in a room | π Coming |
| Layer | Technology |
|---|---|
| UI Framework | Qt-6.9.3 / QML |
| Voice Recognition | Python / Vosk model |
| Display Server | Wayland / Weston |
| Build System | Yocto Project (Kirkstone) |
| Layer Management | kas |
| Build Environment | Docker (Ubuntu 22.04) |
| Target Hardware | Raspberry Pi 2 |
- Docker Desktop installed
- At least 8GB RAM allocated to Docker
- At least 300GB disk space
- Install vosk model into
voice/modelto work on macos
Note
You dont need to download for a model for raspberrypi and if you need to run QtApp on macos you need to run voice.py on it own and install voice/requirement.txt
docker build -t yocto-builder ./dockerdocker volume create yocto-buildOn macOS:
docker run -it \
-v yocto-build:/yocto \
-v $(pwd):/source \
yocto-buildercp -r /source/app /yocto/
cp -r /source/meta-app /yocto/
cp -r /source/kas.yml /yocto/cd /yocto
kas build kas.ymlFirst build takes 2-4 hours. Subsequent builds use sstate cache and are much faster.
Open a new terminal on your host machine and run:
docker cp <container_id>:/yocto/build/tmp/deploy/images/raspberrypi2/core-image-weston-raspberrypi2-XXXXXX.rootfs.wic.bz2 ./Find your container ID with:
docker psReplace XXXXXX with your timestamp generated
Decompress the image:
bzip2 -d core-image-weston-raspberrypi2.rootfs.wic.bz2Find your SD card device:
# On macOS
diskutil listFlash the image:
# On macOS (replace /dev/diskN with your SD card)
sudo dd if=core-image-weston-raspberrypi2-XXXXXX.rootfs.wic of=/dev/rdiskN bs=4m status=progressInsert the SD card into your Raspberry Pi 2, connect a display, and power on. The application launches automatically on boot via systemd.
docker ps # get container ID
docker exec -it <container_id> bash