bridge mit ready und statemachine system
This commit is contained in:
@@ -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.
|
||||
@@ -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! 🤖*
|
||||
Reference in New Issue
Block a user