2.2 Tier 2: Wi-Fi Control (ESP32 Racer & PCA9685 Hub)
Niniejszy rozdział zawiera pełny, zweryfikowany opis architektury bezprzewodowej Tier 2 w systemie RCSIM.
🎯 1. Cel i Architektura Tier 2
Tier 2 (Wi-Fi Control) to niezależny podsystem pokładowy sterowany przez sieć Wi-Fi. Wykorzystuje mikrokontrolery ESP32 (ESP32-CAM, ESP32-WROVER-DEV lub LilyGO T-SIMCAM S3) połączone z 16-kanałowym sterownikiem PWM PCA9685 (adres I2C 0x40).
ESP32 odbiera komendy sterowania po protokole UDP z GCS, przelicza impulsy PWM dla serwa i ESC oraz równolegle strumieniuje płynny obraz FPV MJPEG (http://<ESP32_IP>:81/stream).
[Stacja GCS na PC] ──(Komendy UDP Wi-Fi 50Hz)──► [ESP32 Pokład]
│ (Magistrala I2C Bez Rezystorów)
▼
[Sterownik PCA9685 (0x40)] ──► [ESC & Serwo]
🛠️ 2. Zestawienie Sprzętowe (BOM Tier 2)
| Element | Rola w systemie | Szacowany Koszt |
|---|---|---|
| ESP32-CAM / ESP32-WROVER / LilyGO T-SIMCAM S3 | Mikrokomputer pokładowy z modułem kamery FPV | |
| Sterownik PCA9685 (16-ch PWM) | Generator sygnałów PWM 50Hz dla serw i ESC (Adres I2C 0x40) | |
| Przetwornica UBEC 5V/3A | Czyste zasilanie logiki ESP32 i serwomechanizmów | |
| SUMA: |
⚡ 3. Połączenia Elektryczne I2C, Zasilanie i Autokalibracja
- Magistrala I2C (ESP32-WROVER-DEV): Płytka PCA9685 posiada fabryczne rezystory podciągające na szynie. Piny GPIO 13 (SDA) oraz GPIO 14 (SCL) mikrokontrolera łączymy bezpośrednio z pinami SDA i SCL sterownika PCA9685 (rozwiązuje to konflikt szyny I2C ze zintegrowaną kamerą OV2640).
- Auto-kalibracja Kwarcu (Jumper): Wewnętrzny generator 25 MHz w układach PCA9685 posiada rozrzut fabryczny do kilku procent. Połącz zworką wyjście PWM 15 sterownika PCA9685 z pinem GPIO 12 ESP32. Przy starcie oprogramowanie mierzy dokładną częstotliwość kwarcu i koryguje dzielnik timera, gwarantując idealny impuls środkowy 1500µs.
- Zasilanie UBEC 5V: Zasilanie serw podłączamy z przetwornicy UBEC 5V/3A do zielonego zacisku śrubowego
V+na PCA9685, a masęGNDłączymy wspólnie z ESP32.
Rysunek 2.9: Kompletny montaż podwozia RC Crawlera z modułem ESP32, sterownikiem PCA9685, regulatorem ESC i pakietem zasilającym LiPo.
Rysunek 2.10: Schemat wyprowadzeń ESP32-WROVER-DEV z dedykowanymi pinami I2C (SDA: GPIO 13, SCL: GPIO 14) i pinem kalibracji (GPIO 12).
Rysunek 2.11: Bezpośrednie połączenie przewodów magistrali I2C (SDA/SCL) oraz zasilania logiki 3.3V ze sterownikiem PCA9685.
Rysunek 2.12: Zworka sprzętowa łącząca wyjście PWM 15 z pinem GPIO 12 do automatycznej kalibracji częstotliwości zegara.
Rysunek 2.13: Obiektyw szerokokątny kamery OV2640 zamontowany na przednim zderzaku podwozia RC.
Rysunek 2.14: Zewnętrzna przetwornica UBEC 5V/3A zasilająca szynę mocy serwomechanizmów (V+).
💻 4. Konfiguracja Oprogramowania, Arduino IDE i Strumienia FPV w GCS
🔹 A. Dodanie Obsługi ESP32 w Arduino IDE
- W Arduino IDE otwórz Plik -> Preferencje (
Ctrl + ,). - W polu Dodatkowe adresy URL do menedżera płytek wklej oficjalny adres:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json - Przejdź do Menedżera Płytek (Narzędzia -> Płytka -> Menedżer płytek...), wyszukaj
esp32(Espressif Systems) i kliknij Zainstaluj (zalecana wersja 2.0.x / 3.x).
🔹 B. Wymagane Biblioteki (Menedżer Bibliotek - Ctrl + Shift + I)
- Adafruit PWM Servo Driver Library (Adafruit) — sterowanie I2C modułem PCA9685.
- Adafruit BusIO (Adafruit) — wymagana zależność szyny I2C/SPI dla bibliotek Adafruit.
- MPU6050_light (rfetick) — lekka obsługa żyroskopu i akcelerometru IMU.
- TinyGPSPlus (Mikal Hart) — parsowanie NMEA z GPS (dla wersji V3).
- Uwaga: Biblioteki
esp_camera,WiFi,WiFiUdp,Wiresą wbudowane w rdzeń ESP32.
🔹 C. Ustawienia Menu Narzędzia (Tools Menu Settings)
Przed kompilacją ustaw parametry w menu Narzędzia według poniższej tabeli:
| Parametr w menu Narzędzia | Wartość | Opis / Dlaczego tak |
|---|---|---|
| Board (Płytka) | "ESP32 Wrover Module" / "AI Thinker ESP32-CAM" |
Wybierz Wrover Module dla płytek z PSRAM (Freenove/WROVER) |
| Partition Scheme | "Huge APP (3MB No OTA/1MB SPIFFS)" |
KRYTYCZNE! Wymagane ze względu na rozmiar stosu Wi-Fi, MJPEG i kamery |
| PSRAM | "Enabled" |
Włącza buforowanie klatek w pamięci PSRAM dla płynnego FPV |
| Flash Frequency | 40MHz |
Stabilna praca pamięci SPI Flash |
| Flash Mode | DIO |
Bezpieczny tryb odczytu pamięci Flash |
| Core Debug Level | None |
Brak zbędnego narzutu diagnostycznego na UART |
| Erase All Flash Before Sketch Upload | Disabled |
Standardowe wgrywanie |
| Upload Speed | 115200 (lub 921600) |
115200 eliminuje błędy CRC/timeout na tanich programatorach UART |
🔹 D. Procedura Wgrywania (Tryb Bootloadera ESP32-CAM)
- Wejście w tryb programowania: Połącz zworką pin
GPIO 0(IO0) z masąGNDi wciśnij przyciskRSTna płytce. - W Arduino IDE kliknij Wgraj (Upload).
- Uruchomienie programu: Po zakończeniu wgrywania (Done uploading) odłącz pin
GPIO 0odGNDi ponownie wciśnij przyciskRST. - Zasilanie: Cały układ z kamerą i Wi-Fi wymaga stabilnego zasilania 5V z zewnętrznego BEC-a 5V/2A-3A (unikać zasilania z cienkich linii 3.3V programatora USB).
- Po wgraniu kodu odczytaj przydzielony adres IP z Monitora Szeregowego (115200 baud) i wpisz go w zakładce Konfiguracja stacji RCSIM GCS.
Rysunek 2.15: Wybór definicji płytki sprzętowej w środowisku Arduino IDE.
Rysunek 2.16: Konfiguracja opcji PSRAM: Enabled w menu Narzędzia.
Rysunek 2.17: Wpisanie adresu IP mikrokontrolera ESP32 w konfiguracji stacji naziemnej GCS.
🚀 5. Tier 2 Pro V4: CRSF Multi-Link Hub & MicroLink Tailscale VPN (Zdalna Jazda przez Internet / 4G LTE)
Najnowsze wydanie oprogramowania układowego ESP32V4_CRSF_MultiLink wynosi platformę Tier 2 na poziom profesjonalnego huba telemetryczno-sterującego. Łączy ono modelarski standard CRSF (Crossfire / ExpressLRS) z modułową warstwą transmisji danych oraz pełnym uplinkiem telemetrycznym.
[RCSIM GCS na PC / Kierownica FFB]
│
├── (1) ESP-NOW (1–2 ms latencji bez routera Wi-Fi) ──────────┐
├── (2) Wi-Fi UDP (Lokalna sieć WLAN) ─────────────────────────┼──► [ESP32 Core 0: CRSF Parser FSM]
├── (3) Hardware Serial (USB CDC / LoRa SX1262/1280) ──────────┤ │
└── (4) MicroLink Tailscale VPN (Internet / 4G LTE P2P) ──────┘ │ FreeRTOS Queue / Mutex
▼
[ESP32 Core 1: Hardware Loop 200 Hz]
├── PCA9685 (I2C 400kHz Fast Mode) ──► Serwa & ESC
├── MPU6050/9250 IMU (I2C 0x68) ─────► Kąty Attitude (0x1E)
├── Moduł GPS (UART RX1 GPIO 32) ────► Pozycja & Prędkość (0x02)
└── Pomiar Baterii (ADC1 GPIO 33) ───► Napięcie Pack (0x08)
🌐 A. Warstwy Łączności (Multi-Link Transports)
W pliku ESP32V4_CRSF_MultiLink.ino użytkownik wybiera aktywny interfejs transportowy za pomocą jednej dyrektywy:
// Dostępne opcje: TRANSPORT_ESP_NOW, TRANSPORT_SERIAL, TRANSPORT_UDP, TRANSPORT_MICROLINK_VPN
#define ACTIVE_TRANSPORT TRANSPORT_ESP_NOW
- ESP-NOW (Domyślny – Rekordowo Niska Latencja 1–2 ms):
- Połączenie bezstanowe na warstwie łącza danych (MAC layer) standardu 802.11.
- Całkowity brak potrzeby posiadania routera Wi-Fi, punktu dostępowego czy negocjacji IP.
- Natychmiastowe parowanie stacji nadawczej z pojazdem z odpornością na zakłócenia i zrywanie sesji TCP.
- MicroLink VPN (Zdalne Sterowanie przez Internet / 4G LTE bez Publicznego IP):
- Integracja z modułem CamM2325/microlink opartym o wirtualną sieć mesh Tailscale (protokół WireGuard).
- Umożliwia jazdę modelem znajdującym się na drugim końcu miasta lub na otwartym terenie za pośrednictwem modemu LTE/5G.
- Zero Port Forwardingu: Połączenie jest bezpośrednie (P2P NAT Traversal), nie wymaga stałego publicznego adresu IP ani zewnętrznych serwerów pośredniczących (relay).
- Wymaga jedynie podania jednorazowego klucza autoryzacyjnego w kodzie:
#define TAILSCALE_AUTH_KEY "tskey-auth-YOUR_AUTH_KEY_HERE" #define GCS_TAILSCALE_IP IPAddress(100, 64, 0, 1) // Adres stacji GCS w sieci Tailscale
- Hardware Serial (USB CDC lub Łącze LoRa):
- Bezpośrednia komunikacja przewodowa z komputerem PC lub integracja z zewnętrznymi modułami telemetrycznymi dalekiego zasięgu LoRa (np. Ebyte SX1262 / SX1280 SPI/UART).
- Wi-Fi UDP:
- Standardowa transmisja pakietów CRSF przez lokalną sieć Wi-Fi w trybie Access Point lub Station.
📊 B. Pełny Uplink Telemetryczny CRSF (Wskaźniki GCS & Force Feedback)
Mikrokontroler ESP32 w czasie rzeczywistym próbkuje czujniki pokładowe i odsyła do stacji RCSIM GCS standardowe modelarskie ramki telemetrii CRSF:
0x1E Attitude(Kąty IMU): Przesyła kąty pochylenia (Pitch), przechylenia (Roll) i odchylenia (Yaw) z czujnika MPU6050/MPU9250 z filtrem dolnoprzepustowym DLPF. Dane te natychmiast zasilają w stacji naziemnej silnik Force Feedback (FFB) na kierownicy sim-racingowej.0x02 GPS: Pozycja satelitarna (Lat/Lon), rzeczywista prędkość w km/h, kurs kompasowy, wysokość n.p.m. oraz liczba widocznych satelitów.0x08 Battery: Napięcie pakietu zasilającego mierzone dzielnikiem na dedykowanym przetworniku ADC1 (GPIO 33) z filtrem wykładniczym EMA eliminującym szum silnika.0x14 Link Statistics: Dokładna siła sygnału RSSI w dBm oraz procentowa jakość łącza (LQI 0–100%).
🔌 C. Tabela Połączeń Hardware ESP32 Tier 2 Pro
| Peryferium / Czujnik | Pin ESP32 | Typ Sygnału | Uwagi Montażowe |
|---|---|---|---|
| I2C SDA (Dane) | GPIO 13 |
Magistrala I2C (3.3V) | Połączone wspólnie z PCA9685 oraz czujnikiem IMU |
| I2C SCL (Zegar) | GPIO 14 |
Zegar I2C Fast Mode (400 kHz) | Szybka szyna odporna na zakłócenia |
| Autokalibracja Kwarcu | GPIO 12 |
Cyfrowe wejście pomiarowe | Opcjonalna zworka z wyjścia PWM 15 na PCA9685 |
| Moduł GPS (NMEA TX) | GPIO 32 (RX1) |
Sprzętowy UART RX1 | Wejście danych z pinu TX modułu GPS (9600–115200 bps) |
| Napięcie Baterii (VBAT) | GPIO 33 (ADC1) |
Wejście analogowe (0–3.3V) | Dzielnik napięcia R1=10k, R2=2.2k (współczynnik ~5.545) |
| Zasilanie Układu (VIN) | 5V / VIN |
Zasilanie Logiki 5V | Zasilane z przetwornicy UBEC 5V/2A (wspólne GND!) |
🛡️ D. Twardy Fail-Safe i FreeRTOS Dual-Core
- Izolacja Rdzeni: Rdzeń 0 (Core 0) dedykowany jest w 100% do obsługi stosu sieciowego i dekodera CRSF (CRC8 DVB-S2). Rdzeń 1 (Core 1) taktuje pętlę sprzętową ze stałą częstotliwością 200 Hz.
- Ochrona Przed Ucieczką Modelu (Runaway Protection): Zanik ramek na czas dłuższy niż 150 ms lub przestawienie wyłącznika bezpieczeństwa w stacji GCS / aparaturze (Standard ELRS Kanał 5 / AUX1 w stanie DISARM) natychmiast wymusza sygnał neutralny 1500 µs na kanale gazu i skrętu.
- Odporność I2C na Szum Silnika: Funkcja
checkAndRecoverI2C()monitoruje stan szyny i automatycznie odblokowuje linie SDA/SCL, zapobiegając zawieszeniu serwosterownika pod wpływem iskier szczotkowych lub impulsów ESC.