DOCS/Kompendium Wiedzy
|

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 35 - 75 PLN ($9 - $18 USD)
Sterownik PCA9685 (16-ch PWM) Generator sygnałów PWM 50Hz dla serw i ESC (Adres I2C 0x40) 20 - 30 PLN ($5 - $8 USD)
Przetwornica UBEC 5V/3A Czyste zasilanie logiki ESP32 i serwomechanizmów 20 PLN ($5 USD)
SUMA: 75 - 125 PLN ($19 - $31 USD)

⚡ 3. Połączenia Elektryczne I2C, Zasilanie i Autokalibracja

  1. 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).
  2. 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.
  3. 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.

Widok kompletnego podwozia RC z montażem ESP32 Rysunek 2.9: Kompletny montaż podwozia RC Crawlera z modułem ESP32, sterownikiem PCA9685, regulatorem ESC i pakietem zasilającym LiPo.

Schemat wyprowadzeń ESP32-WROVER-DEV Rysunek 2.10: Schemat wyprowadzeń ESP32-WROVER-DEV z dedykowanymi pinami I2C (SDA: GPIO 13, SCL: GPIO 14) i pinem kalibracji (GPIO 12).

Szczegół połączenia I2C ze sterownikiem PCA9685 Rysunek 2.11: Bezpośrednie połączenie przewodów magistrali I2C (SDA/SCL) oraz zasilania logiki 3.3V ze sterownikiem PCA9685.

Zworka autokalibracji kwarcu PCA9685 Rysunek 2.12: Zworka sprzętowa łącząca wyjście PWM 15 z pinem GPIO 12 do automatycznej kalibracji częstotliwości zegara.

Montaż kamery FPV OV2640 na przodzie modelu Rysunek 2.13: Obiektyw szerokokątny kamery OV2640 zamontowany na przednim zderzaku podwozia RC.

Podłączenie przetwornicy UBEC 5V/3A 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

  1. W Arduino IDE otwórz Plik -> Preferencje (Ctrl + ,).
  2. 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
    
  3. 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, Wire są 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)

  1. Wejście w tryb programowania: Połącz zworką pin GPIO 0 (IO0) z masą GND i wciśnij przycisk RST na płytce.
  2. W Arduino IDE kliknij Wgraj (Upload).
  3. Uruchomienie programu: Po zakończeniu wgrywania (Done uploading) odłącz pin GPIO 0 od GND i ponownie wciśnij przycisk RST.
  4. 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).
  5. Po wgraniu kodu odczytaj przydzielony adres IP z Monitora Szeregowego (115200 baud) i wpisz go w zakładce Konfiguracja stacji RCSIM GCS.

Wybór definicji płytki w kodzie Rysunek 2.15: Wybór definicji płytki sprzętowej w środowisku Arduino IDE.

Włączenie pamięci bufora PSRAM Rysunek 2.16: Konfiguracja opcji PSRAM: Enabled w menu Narzędzia.

Konfiguracja adresu IP w RCSIM GCS 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
  1. 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.
  2. 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
      
  3. 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).
  4. 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.