bridge mit ready und statemachine system

This commit is contained in:
2025-12-27 01:31:45 +01:00
parent ed2964bbbf
commit 90707055ce
36 changed files with 2791 additions and 355 deletions
+116
View File
@@ -0,0 +1,116 @@
# GPIO Mapping - Claude's Eyes
## Waveshare ESP32-S3-Touch-LCD-2
### On-Board Components (keine externe Verkabelung nötig)
| Funktion | GPIO | Notizen |
|----------|------|---------|
| **Display ST7789** | | |
| MOSI | GPIO 13 | SPI Data |
| SCLK | GPIO 14 | SPI Clock |
| CS | GPIO 10 | Chip Select |
| DC | GPIO 11 | Data/Command |
| RST | GPIO 12 | Reset |
| Backlight | GPIO 45 | PWM für Helligkeit |
| **Touch CST816S** | | |
| SDA | GPIO 48 | I2C Data (shared) |
| SCL | GPIO 8 | I2C Clock (shared) |
| INT | GPIO 3 | Interrupt |
| **IMU QMI8658** | | |
| SDA | GPIO 48 | I2C Data (shared mit Touch) |
| SCL | GPIO 8 | I2C Clock (shared mit Touch) |
### Kamera OV5640 (24-Pin Connector)
| Funktion | GPIO | Notizen |
|----------|------|---------|
| XCLK | GPIO 15 | External Clock |
| SIOD (SDA) | GPIO 4 | SCCB Data |
| SIOC (SCL) | GPIO 5 | SCCB Clock |
| D7 | GPIO 16 | Data Bit 7 |
| D6 | GPIO 17 | Data Bit 6 |
| D5 | GPIO 18 | Data Bit 5 |
| D4 | GPIO 12 | Data Bit 4 (⚠️ shared mit Display RST!) |
| D3 | GPIO 10 | Data Bit 3 (⚠️ shared mit Display CS!) |
| D2 | GPIO 8 | Data Bit 2 (⚠️ shared mit I2C SCL!) |
| D1 | GPIO 9 | Data Bit 1 |
| D0 | GPIO 11 | Data Bit 0 (⚠️ shared mit Display DC!) |
| VSYNC | GPIO 6 | Vertical Sync |
| HREF | GPIO 7 | Horizontal Reference |
| PCLK | GPIO 13 | Pixel Clock (⚠️ shared mit Display MOSI!) |
**⚠️ WICHTIG:** Die Kamera-Pins können mit Display-Pins kollidieren!
Dies muss beim finalen Hardware-Setup verifiziert werden. Möglicherweise muss
die Camera während Display-Updates deaktiviert werden oder umgekehrt.
### Externe Komponenten (Freenove Shield)
| Funktion | GPIO | Notizen |
|----------|------|---------|
| **Motoren** | | |
| Motor A IN1 | GPIO 39 | Richtung Links |
| Motor A IN2 | GPIO 40 | Richtung Links |
| Motor A PWM | GPIO 41 | Geschwindigkeit Links |
| Motor B IN1 | GPIO 42 | Richtung Rechts |
| Motor B IN2 | GPIO 2 | Richtung Rechts |
| Motor B PWM | GPIO 1 | Geschwindigkeit Rechts |
| **Servos** | | |
| Pan Servo | GPIO 38 | Horizontale Kamerabewegung |
| Tilt Servo | GPIO 37 | Vertikale Kamerabewegung |
| **Ultraschall HC-SR04** | | |
| Trigger | GPIO 21 | Ultraschall Trigger |
| Echo | GPIO 47 | Ultraschall Echo |
| **Optional** | | |
| LED Matrix DIN | GPIO 35 | WS2812 Data |
| LED Matrix CLK | GPIO 36 | Clock |
| LED Matrix CS | GPIO 0 | Chip Select |
| RGB LEDs | GPIO 48 | WS2812 (⚠️ shared mit I2C!) |
## Verkabelungsdiagramm
```
Waveshare ESP32-S3-Touch-LCD-2
┌─────────────────────────────┐
│ │
[OV5640 Cam] ───┤ 24-Pin Camera Connector │
│ │
│ ┌─────────────────────┐ │
│ │ 2" LCD Display │ │
│ │ (ST7789 + Touch) │ │
│ └─────────────────────┘ │
│ │
│ GPIO 39 ──────────┐ │
│ GPIO 40 ──────────┤ │
│ GPIO 41 ──────────┤ │
│ GPIO 42 ──────────┼───────────> Motor Driver
│ GPIO 2 ──────────┤ (TB6612/L298N)
│ GPIO 1 ──────────┘ │
│ │
│ GPIO 38 ───────────────────────> Pan Servo
│ GPIO 37 ───────────────────────> Tilt Servo
│ │
│ GPIO 21 ───────────────────────> HC-SR04 Trigger
│ GPIO 47 ───────────────────────> HC-SR04 Echo
│ │
│ 5V ───────────────────────────> Servos/Sensoren VCC
│ GND ───────────────────────────> Common Ground
│ │
└─────────────────────────────┘
```
## Spannungsversorgung
- **ESP32-S3:** 5V via USB-C oder LiPo Batterieanschluss
- **Motoren:** Separate Stromversorgung empfohlen (Powerbank)
- **Servos:** 5V (können am ESP32 5V Pin angeschlossen werden)
- **HC-SR04:** 5V
- **OV5640:** 3.3V (vom ESP32 Board)
## Wichtige Hinweise
1. **GPIO 0** ist auch für Boot-Mode! Beim Flashen nicht verbinden.
2. **I2C Bus** wird von Touch und IMU geteilt - beide haben unterschiedliche Adressen.
3. **Kamera-Pins** müssen mit der tatsächlichen Waveshare-Pinbelegung verifiziert werden.
4. **Motor PWM** verwendet LEDC Channels 0 und 1.
5. **Display Backlight** verwendet LEDC Channel 2.
+405
View File
@@ -0,0 +1,405 @@
# Setup Guide - Claude's Eyes
## Voraussetzungen
### Hardware
- Waveshare ESP32-S3-Touch-LCD-2
- OV5640 Kamera mit 120° Weitwinkelobjektiv
- Freenove 4WD Car Kit
- USB-C Kabel zum Flashen
- Powerbank (oder LiPo Akku)
### Software
- [PlatformIO](https://platformio.org/) (VS Code Extension oder CLI)
- Python 3.9+
- Git
---
## Teil 1: ESP32 Firmware
### 1.1 Repository klonen
```bash
cd ~/Dokumente/programmierung/esp32
# Das Projekt ist bereits in claudes_eyes/
```
### 1.2 WiFi konfigurieren
Öffne `esp32_firmware/src/config.h` und ändere:
```cpp
#define WIFI_SSID "DEIN_WLAN_NAME"
#define WIFI_PASSWORD "DEIN_WLAN_PASSWORT"
#define API_KEY "dein_geheimer_api_key"
```
### 1.3 Firmware kompilieren
```bash
cd claudes_eyes/esp32_firmware
# Mit PlatformIO CLI:
pio run
# Oder in VS Code:
# PlatformIO Icon -> Build
```
### 1.4 Firmware flashen
1. ESP32-S3 via USB-C anschließen
2. Boot-Modus aktivieren (falls nötig: BOOT-Taste halten beim Einstecken)
```bash
pio run --target upload
# Monitor öffnen:
pio device monitor
```
### 1.5 Erfolg prüfen
Im Serial Monitor solltest du sehen:
```
╔═══════════════════════════════════════╗
║ Claude's Eyes v1.0 ║
║ Autonomous Exploration Robot ║
╚═══════════════════════════════════════╝
[Main] Initializing display...
[Main] Initializing camera...
[Camera] PSRAM found, using double buffering
...
╔═══════════════════════════════════════╗
║ SYSTEM READY ║
║ IP: 192.168.178.xxx ║
║ Waiting for Claude... ║
╚═══════════════════════════════════════╝
```
---
## Teil 2: Python Bridge
### 2.1 System-Dependencies installieren (ZUERST!)
PyAudio und pyttsx3 benötigen System-Bibliotheken, die VOR pip install installiert werden müssen:
**Debian/Ubuntu:**
```bash
sudo apt install portaudio19-dev python3-pyaudio espeak-ng
```
**Arch Linux/Manjaro:**
```bash
sudo pacman -S portaudio espeak-ng
```
**Fedora:**
```bash
sudo dnf install portaudio-devel espeak-ng
```
**Mac:**
```bash
brew install portaudio espeak
```
**Windows:**
```bash
pip install pipwin
pipwin install pyaudio
# espeak nicht nötig - pyttsx3 nutzt SAPI5
```
### 2.2 Python Environment einrichten
**Einfachste Methode (empfohlen):**
```bash
cd python_bridge
# Automatisches Setup - erstellt venv und installiert alles
./start_venv.sh --reset
# Bridge starten
./start_venv.sh --run
```
Das `start_venv.sh` Script:
- Erstellt eine neue virtuelle Umgebung
- Installiert alle Dependencies aus `requirements.txt`
- Versucht PyAudio zu installieren (optional, für STT)
- Aktiviert die venv automatisch
**Manuelle Installation (falls nötig):**
```bash
cd python_bridge
# Virtuelle Umgebung erstellen
python3 -m venv venv
# Aktivieren
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# Dependencies installieren
pip install -r requirements.txt
# PyAudio separat (optional, für STT)
pip install pyaudio
```
**Falls PyAudio fehlschlägt (Debian/Ubuntu):**
```bash
# System-PyAudio nutzen
sudo apt install python3-pyaudio
# Dann venv mit System-Paketen neu erstellen
rm -rf venv
python3 -m venv venv --system-site-packages
source venv/bin/activate
pip install -r requirements.txt
```
**Flatpak/VS Code Problem:**
Wenn du VS Code als Flatpak nutzt, laufen Befehle im Container und sehen die System-Pakete nicht. Lösung: Terminal AUSSERHALB von VS Code nutzen, oder:
```bash
flatpak-spawn --host python3 chat_audio_bridge.py
```
### 2.3 Konfiguration anpassen
Kopiere die Konfiguration:
```bash
cp config.yaml config.local.yaml
```
Bearbeite `config.local.yaml`:
```yaml
esp32:
host: "192.168.178.XXX" # IP des Roboters
api_key: "dein_api_key" # Muss mit config.h übereinstimmen!
claude:
api_key: "" # Oder setze ANTHROPIC_API_KEY Environment Variable
```
### 2.4 Anthropic API Key
Erstelle einen API Key auf https://console.anthropic.com/
```bash
# Linux/Mac:
export ANTHROPIC_API_KEY="sk-ant-..."
# Windows (PowerShell):
$env:ANTHROPIC_API_KEY="sk-ant-..."
```
### 2.5 Bridge starten
**Mit start_venv.sh (empfohlen):**
```bash
# Normale Ausführung
./start_venv.sh --run
# Mit Debug-Logging
./start_venv.sh --run -d
# Nach Python-Update oder bei Problemen
./start_venv.sh --reset
```
**Manuell:**
```bash
source venv/bin/activate
python chat_audio_bridge.py
# Mit Debug-Logging:
python chat_audio_bridge.py -d
# Mit eigener Config:
python chat_audio_bridge.py -c config.local.yaml
```
---
## Teil 3: Hardware zusammenbauen
### 3.1 Freenove Kit
1. Folge der Freenove Anleitung für den mechanischen Aufbau
2. **NICHT** den mitgelieferten ESP32 einbauen!
3. Motorverkabelung zum Shield notieren
### 3.2 Waveshare Board einbauen
1. Montiere das Waveshare Board anstelle des Freenove ESP32
2. Verbinde die Kabel gemäß `docs/gpio_mapping.md`
3. Kamera an den 24-Pin Connector anschließen
### 3.3 Verkabelung
```
Freenove Shield Waveshare Board
─────────────────────────────────────────
Motor A IN1 <---> GPIO 39
Motor A IN2 <---> GPIO 40
Motor A PWM <---> GPIO 41
Motor B IN1 <---> GPIO 42
Motor B IN2 <---> GPIO 2
Motor B PWM <---> GPIO 1
Servo 1 (Pan) <---> GPIO 38
Servo 2 (Tilt) <---> GPIO 37
US Trigger <---> GPIO 21
US Echo <---> GPIO 47
5V <---> 5V
GND <---> GND
```
### 3.4 Stromversorgung
- Option A: USB-C Powerbank am ESP32
- Option B: LiPo Akku am Waveshare Batterieanschluss
- Motoren können separate Stromversorgung brauchen
---
## Teil 4: Testen
### 4.1 Mock-Server (ohne Hardware!)
Du kannst die Bridge testen BEVOR die Hardware ankommt:
**Schritt 1: Testbilder vorbereiten**
Mach 10-20 Fotos aus deiner Wohnung und leg sie in `python_bridge/test_images/`:
```bash
cd python_bridge
mkdir -p test_images
# Kopiere JPG/PNG Dateien hierher
# z.B. 01_flur.jpg, 02_wohnzimmer.jpg, 03_kueche.jpg ...
```
**Schritt 2: Mock-Server starten**
```bash
cd python_bridge
./start_venv.sh # Aktiviert venv
python mock_esp32.py
```
Der Server läuft auf `http://localhost:5000`
**Schritt 3: Config anpassen**
In `config.yaml`:
```yaml
esp32:
host: "localhost"
port: 5000
api_key: "claudes_eyes_secret_2025"
```
**Schritt 4: Bridge starten (in neuem Terminal)**
```bash
cd python_bridge
./start_venv.sh --run
```
Claude "fährt" jetzt durch deine Testbilder! Bei jedem `forward` Befehl
wird das nächste Bild geladen.
---
### 4.2 API testen (echte Hardware)
```bash
# Im Browser:
http://192.168.178.XXX/
# Kamera testen:
http://192.168.178.XXX/api/capture?key=dein_api_key
# Status abrufen:
curl "http://192.168.178.XXX/api/status?key=dein_api_key"
# Motor testen:
curl -X POST "http://192.168.178.XXX/api/command?key=dein_api_key" \
-H "Content-Type: application/json" \
-d '{"action":"forward","speed":30,"duration_ms":500}'
```
### 4.3 TTS/STT testen
```bash
python tts_engine.py
python stt_engine.py
```
---
## Troubleshooting
### ESP32 bootet nicht
- USB-Kabel prüfen (manche sind nur zum Laden)
- Boot-Taste beim Einstecken halten
- COM-Port in PlatformIO prüfen
### Kamera funktioniert nicht
- Flexkabel prüfen (richtig eingesteckt?)
- PSRAM aktiviert? (sollte automatisch sein)
- Pin-Konflikte mit Display prüfen
### WiFi verbindet nicht
- SSID und Passwort prüfen
- 2.4 GHz Netzwerk? (5 GHz wird nicht unterstützt)
- Router in Reichweite?
### Motoren drehen nicht
- Stromversorgung prüfen
- GPIO-Pins korrekt verbunden?
- `ENABLE_MOTORS` in config.h auf `true`?
### TTS/STT funktioniert nicht
- PyAudio korrekt installiert?
- Mikrofon-Berechtigung erteilt?
- Audio-Ausgabegerät prüfen
- Bei "eSpeak not found": `sudo apt install espeak-ng`
- gTTS als Alternative (braucht Internet): In `config.yaml` setze `tts.engine: "gtts"`
### venv kaputt / "cannot execute: required file not found"
Das passiert wenn die venv mit einer anderen Python-Version erstellt wurde:
```bash
cd python_bridge
./start_venv.sh --reset # Erstellt venv komplett neu
```
### VS Code Flatpak sieht System-Pakete nicht
VS Code als Flatpak läuft in einem Container. Lösung:
- Normales Terminal nutzen (nicht VS Code Terminal)
- Oder: `flatpak-spawn --host ./start_venv.sh --run`
---
## Nächste Schritte
1. Hardware zusammenbauen
2. GPIO-Pins verifizieren und ggf. in `config.h` anpassen
3. Firmware flashen
4. Python Bridge einrichten
5. Ersten Testlauf machen
6. Claude die Wohnung erkunden lassen!
---
*Viel Spaß beim Erkunden! 🤖*