329 lines
10 KiB
Markdown
329 lines
10 KiB
Markdown
# Pi Zero 2W + ReSpeaker - OPTIMIERT FÜR 3 KOMMANDOS
|
|
## Lightweight Keyword Spotting statt vollständiges Sprachmodell
|
|
|
|
---
|
|
|
|
## TEIL 1-3: Basis-Installation (wie vorher)
|
|
|
|
Die Schritte zur OS-Installation, SSH-Verbindung und ReSpeaker-Treiber bleiben identisch:
|
|
|
|
1. **Raspberry Pi OS (Bullseye 32-bit) installieren** (TEIL 1)
|
|
2. **SSH-Verbindung + raspi-config** (TEIL 2)
|
|
3. **seeed-voicecard Treiber installieren** (TEIL 3)
|
|
|
|
Folge dazu der ursprünglichen Anleitung bis einschließlich TEIL 3.
|
|
|
|
---
|
|
|
|
## TEIL 1: HARDWARE-VORBEREITUNG UND OS-INSTALLATION
|
|
|
|
### 1.1 Hardware-Anforderungen
|
|
|
|
Du benötigst folgende Komponenten:
|
|
|
|
- **Raspberry Pi Zero 2W** (nicht Zero oder Zero W!)
|
|
- **Seed Studio ReSpeaker Pi Hat v1.2** mit 2 Mikrofonen
|
|
- **microSD-Karte**: mindestens 16GB (Class 10 empfohlen)
|
|
- **USB-Stromversorgung**: 2A Netzteil mit Micro-USB
|
|
- **SD-Kartenleser** zum Flashen auf deinem PC
|
|
- **Computer mit Internetverbindung**
|
|
- *Optional*: HDMI-Monitor, USB-Tastatur/Maus zur Direktverbindung
|
|
|
|
### 1.2 Raspberry Pi OS Installation
|
|
|
|
#### Schritt 1: Raspberry Pi Imager herunterladen
|
|
|
|
1. Öffne [https://www.raspberrypi.com/software/](https://www.raspberrypi.com/software/)
|
|
2. Lade **Raspberry Pi Imager** für dein Betriebssystem herunter
|
|
3. Installiere die Anwendung
|
|
|
|
#### Schritt 2: SD-Karte flashen
|
|
|
|
1. Stecke die microSD-Karte in deinen Kartenleser und verbinde ihn mit dem PC
|
|
2. Öffne Raspberry Pi Imager
|
|
3. Klicke auf **"Gerät auswählen"** und wähle **"Raspberry Pi Zero 2"**
|
|
4. Klicke auf **"Betriebssystem auswählen"** und wähle:
|
|
- **Raspberry Pi OS (Legacy, 32-Bit) - Bullseye**
|
|
- *Hinweis: v1.2 des ReSpeaker-Hats ist am besten mit Bullseye kompatibel*
|
|
5. Klicke auf **"Speicher auswählen"** und wähle deine microSD-Karte
|
|
6. Klicke auf das **Zahnrad-Symbol (Erweiterte Optionen)** und konfiguriere:
|
|
- **Hostname**: `respeaker-pi` (oder ein beliebiger Name)
|
|
- **SSH aktivieren**: Ja (mit Passwort)
|
|
- **Benutzername**: `pi`
|
|
- **Passwort**: Ein sicheres Passwort deiner Wahl (aufschreiben!)
|
|
- **WLAN konfigurieren**:
|
|
- SSID: Dein WiFi-Netzwerk
|
|
- Passwort: Dein WiFi-Passwort
|
|
- Land: `DE` (Deutschland)
|
|
- **Zeitzone**: `Europe/Berlin`
|
|
7. Klicke **"Speichern"** und dann **"Schreiben"**
|
|
8. Warte bis zum Abschluss (5-10 Minuten)
|
|
9. Entnehme die SD-Karte
|
|
|
|
#### Schritt 3: Erster Start
|
|
|
|
1. Stecke die SD-Karte in den **Pi Zero 2W** ein
|
|
2. Verbinde den ReSpeaker Hat mit dem Pi:
|
|
- Ausrichten der GPIO-Pins (40-polige Reihe)
|
|
- ReSpeaker sollte fest aufgesetzt sein
|
|
3. Verbinde die USB-Stromversorgung
|
|
4. Warte 1-2 Minuten für den ersten Start
|
|
|
|
#### Schritt 4: IP-Adresse ermitteln
|
|
|
|
Methode A (über Router):
|
|
1. Öffne die Verwaltungsoberfläche deines WLAN-Routers
|
|
2. Suche nach verbundenen Geräten
|
|
3. Notiere die IP-Adresse von `respeaker-pi`
|
|
|
|
Methode B (mit arp-scan auf Linux/Mac):
|
|
```bash
|
|
sudo arp-scan -l | grep -i "raspberry\|b8:27"
|
|
```
|
|
|
|
Methode C (mit Advanced IP Scanner auf Windows):
|
|
1. Lade [Advanced IP Scanner](https://www.advanced-ip-scanner.com/) herunter
|
|
2. Scanne dein Netzwerk
|
|
3. Suche nach `respeaker-pi`
|
|
|
|
Beispiel-IP: `192.168.1.100`
|
|
|
|
---
|
|
|
|
## TEIL 2: RASPBERRY PI KONFIGURATION
|
|
|
|
### 2.1 SSH-Verbindung herstellen
|
|
|
|
Auf Linux/Mac (Terminal):
|
|
```bash
|
|
ssh pi@192.168.1.100
|
|
# Gib dein Passwort ein
|
|
```
|
|
|
|
Auf Windows: Nutze PuTTY
|
|
1. Lade [PuTTY](https://www.putty.org/) herunter
|
|
2. Öffne PuTTY
|
|
3. Host: `192.168.1.100`
|
|
4. Port: `22`
|
|
5. Klicke "Open"
|
|
6. Login: `pi`
|
|
7. Passwort: (dein gesetztes Passwort)
|
|
|
|
### 2.2 System aktualisieren
|
|
|
|
```bash
|
|
sudo apt update
|
|
sudo apt upgrade -y
|
|
sudo apt install -y git python3-pip python3-dev libatlas-base-dev
|
|
```
|
|
|
|
Dieser Prozess dauert 10-15 Minuten. Warte ab.
|
|
|
|
### 2.3 Audio- und I2C-Konfiguration
|
|
|
|
```bash
|
|
sudo raspi-config
|
|
```
|
|
|
|
Navigiere zu:
|
|
1. **Schnittstellen** → **I2C** → **Aktivieren**
|
|
2. **Schnittstellen** → **SPI** → **Aktivieren**
|
|
3. **Lokalisierungsoptionen** → **Zeitzone** → **Europa** → **Berlin**
|
|
4. **Lokalisierungsoptionen** → **Sprache** → **de_DE.UTF-8**
|
|
5. Bestätige alle Änderungen und **Starten Sie neu**.
|
|
|
|
Nach dem Reboot erneut verbinden:
|
|
```bash
|
|
ssh pi@192.168.1.100
|
|
```
|
|
|
|
---
|
|
|
|
## TEIL 3: RESPEAKER HAT INSTALLATION
|
|
|
|
### 3.1 seeed-voicecard Treiber installieren
|
|
|
|
Der ReSpeaker benötigt die speziellen Seeed-Treiber. Diese können aus dem Rhasspy-Repo gezogen werden oder als install-respeaker-drivers.sh dieses Verzeichnisses genutzt werden.
|
|
|
|
```bash
|
|
cd ~
|
|
wget 'https://raw.githubusercontent.com/rhasspy/wyoming-satellite/refs/heads/master/etc/install-respeaker-drivers.sh'
|
|
sudo chmod 755 install-respeaker-drivers.sh
|
|
sudo ./install-respeaker-drivers.sh
|
|
sudo apt-get install libportaudio2
|
|
pip3 install sounddevice --break-system-packages
|
|
```
|
|
|
|
Dies dauert 5-10 Minuten. Wenn es fertig ist:
|
|
|
|
```bash
|
|
sudo reboot now
|
|
```
|
|
|
|
Nach dem Reboot wieder verbinden:
|
|
```bash
|
|
ssh pi@192.168.1.100
|
|
```
|
|
|
|
### 3.2 ReSpeaker-Installation verifizieren
|
|
|
|
Überprüfe, ob die Sound-Karte erkannt wurde:
|
|
|
|
```bash
|
|
aplay -l
|
|
```
|
|
|
|
Du solltest eine ähnliche Ausgabe sehen:
|
|
```
|
|
**** PLAYBACK hardware devices ****
|
|
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
|
|
card 1: seeed2miccard [seeed-2mic-voicecard], device 0: ...
|
|
```
|
|
|
|
Überprüfe auch die Aufnahmegeräte:
|
|
```bash
|
|
arecord -l
|
|
```
|
|
|
|
Du solltest auch hier `seeed-2mic-voicecard` sehen.
|
|
|
|
### 3.3 Ton-Tests
|
|
|
|
**Lautsprecher testen:**
|
|
```bash
|
|
speaker-test -l 1 -c 2 -t sine -f 1000 -r 48000
|
|
```
|
|
Du solltest einen Ton hören (drücke Ctrl+C zum Beenden).
|
|
|
|
**Mikrofon testen:**
|
|
```bash
|
|
arecord -D hw:1,0 -f S16_LE -c 2 -r 48000 test_recording.wav
|
|
```
|
|
Hierbei sind hw:1,0 so zu wählen, dass 1 für die Karte steht - kann auch 3 o.Ä. sein und 0 der Device-Index der Karte.
|
|
|
|
---
|
|
|
|
# installieren mit lokalem Modell:
|
|
```bash
|
|
pip3 install vosk --break-system-packages
|
|
|
|
mkdir ~/vosk-models
|
|
cd ~/vosk-models
|
|
wget https://alphacephei.com/vosk/models/vosk-model-small-de-0.15.zip
|
|
unzip vosk-model-small-de-0.15.zip
|
|
mv vosk-model-small-de-0.15 model
|
|
```
|
|
|
|
# aufnehmen mit
|
|
arecord -D plughw:1,0 --format S16_LE --rate 16000 --channels 1 --duration 5 test_mono.wav
|
|
# ausfuehren mit
|
|
python3 test_simple.py test_mono.wav
|
|
|
|
# vorbereitungen
|
|
```
|
|
mkdir ~/vosk-models
|
|
```
|
|
Dort alle `*.py`-Dateien und die per `chmod 755` ausführbar gemachte `start_voice.sh` aus diesem Repo einfügen.
|
|
Damit ohne weitere Interaktion gestartet wird, muss außerdem per `sudo nano /etc/systemd/system/voicerec.service` ein Service angelegt und wie folgt befüllt werden:
|
|
```
|
|
[Unit]
|
|
Description=starten der services fuer die spracherkennung
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=pi
|
|
Restart=always
|
|
RestartSec=10
|
|
StartLimitBurst=10000
|
|
WorkingDirectory=/home/pi
|
|
ExecStart=/home/pi/vosk-models/start_voice.sh
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
Außerdem wird ein WIFI-Reconnect Service mit Timer eingerichtet, der jede Minute die WLAN Verbindung, prüft, neu aufbaut oder ggfs. den PI rebootet.
|
|
Der Service führt die ebenfalls in `~/vosk-models/` abgelegte `wifi-reconnect.sh` aus, die hier ebenfalls im Repository liegt und wiederum zunächst mit `chmod 755 wifi-reconnect.sh` ausführbar gemacht werden muss.
|
|
Für den Timer wird `sudo nano /etc/systemd/system/wifi-reconnect.timer` mit folgendem Inhalt befüllt:
|
|
```
|
|
[Unit]
|
|
Description=WiFi Reconnect Timer
|
|
|
|
[Timer]
|
|
OnBootSec=1min
|
|
OnUnitActiveSec=1min
|
|
|
|
[Install]
|
|
WantedBy=timers.target
|
|
```
|
|
Für den zugehörigen, zu startenden Service mittels `sudo nano /etc/systemd/system/wifi-reconnect.service`:
|
|
```
|
|
[Unit]
|
|
Description=WiFi Auto-Reconnect Service
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=/home/pi/vosk-models/wifi-reconnect.sh
|
|
```
|
|
Anschließend muss folgende Befehlskette ausgeführt werden:
|
|
```
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable wifi-reconnect.timer
|
|
sudo systemctl start wifi-reconnect.timer
|
|
sudo systemctl enable voicerec.service
|
|
sudo systemctl start voicerec.service
|
|
```
|
|
Prüfen lässt sich der aktuelle Zustand per: `sudo systemctl status wifi-reconnect.timer`
|
|
|
|
|
|
|
|
# oder installation mit Speach-To-Text auf Server (dort Docker:)
|
|
```
|
|
docker run -d -p 2700:2700 -v /opt/model:/opt/vosk-model-en/model alphacep/kaldi-de:latest
|
|
```
|
|
wenn der Server Beispielsweise die IP 192.168.213.45 hat, dann muss diese in der `server_microphone.py` eingetragen werden.
|
|
|
|
Je nachdem, ob `local_microphone.py` oder `server_microphone.py` genutzt werden soll, muss die `start_voice.sh`-Datei entsprechend angepasst werden.
|
|
|
|
# stop der Audio-Wiedergabe per Button
|
|
Falls Erwin nicht zuhören kann aufgrund der Radio-Erzählstimme, gibt es die Möglichkeit mittels des `reset_via_button.py` Skriptes die mpg123-Wiedergaben zu killen.
|
|
Damit dieses Skript ebenfalls andauernd läuft, wird auch hier ein `systemctl service` erstellt,
|
|
`sudo nano /etc/systemd/system/button-reset.service` - mit folgendem Inhalt:
|
|
```
|
|
[Unit]
|
|
Description=starten der services fuer die spracherkennung
|
|
Wants=network-online.target
|
|
After=network-online.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=pi
|
|
Restart=always
|
|
RestartSec=10
|
|
StartLimitBurst=10000
|
|
WorkingDirectory=/home/pi
|
|
ExecStart=/home/pi/button-reset/start_reset.sh
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
```
|
|
Die zugehörigen Skripte (python `reset_via_button.py` und shell `start_reset.sh`) liegen hier im Ordner `/home/pi/button-reset`.
|
|
|
|
|
|
# tagesschau news abspielen
|
|
Zunächst muss per `sudo apt install mpg123` der entsprechende Codec für MP3s installiert werden. Danach wird das Verzeichnis `~/tagesschau` angelegt, das für die tagesschau-100-sekunden MP3s als Speicherort dient.
|
|
in diesen ordner kommen entsprechend auch die `start_news.sh` und `end_news.sh`-Skripte, die vorher ausführbar gemacht werden müssen.
|
|
abgespielt werden die nachrichten mit "nachrichten hex hex".
|
|
# dlf & nova abspiele
|
|
anlegen eines verzeichnis `~/radio` und dort die `start_dlf/nova.sh` Skripte ablegen, welche dann mit "nova hex hex" oder "funk hex hex" abgespielt werden. zum beenden wieder "ruhe hex hex"
|
|
|
|
|
|
# oled-display anschließen
|
|
- Erweiterungsboard für 2x 40Pins besorgen
|
|
- folgende Treiber installieren: `sudo pip3 install Adafruit-SSD1306 --break-system-packages` & `sudo -H pip3 install --upgrade luma.oled --break-system-packages`
|
|
- um einen zusätzlichen i2c-Bus nutzen zu können, muss in `/boot/formware/config.txt` am ende z.B. unter [all] folgendes ergänzt werden: `dtoverlay=i2c-gpio,bus=5,i2c_gpio_sda=6,i2c_gpio_scl=12`, dann können diese beiden PINs für SCL und SCA genutzt werden, um einen [https://www.berrybase.de/seeed-grove-0.96-oled-display-ssd1315](OLED-Display) zu betreiben
|
|
- damit das Ganze dann auch schön läuft, wird als `server_microphone.py` der Inhalt der Datei `server_microphone_oled.py` aus diesem Repository genutzt.
|