Powrót do projektów

EH-Core Teensy

Zaawansowany translator magistrali CAN dla pojazdów PSA (Peugeot / Citroën / DS). Tłumaczy protokoły AEE2004 ↔ AEE2010/EV, umożliwiając montaż nowoczesnych jednostek multimedialnych (NAC) w starszych platformach.

Teensy 4.1 • ARM Cortex-M7 • 600 MHz • 3×CAN

Cel projektu

CAN Translator AEE2004 ↔ AEE2010/EV

Projekt EH-Core Teensy (Teensy PSA DeSilve CAN Translator) to zaawansowany gateway CAN, który umożliwia zamontowanie nowoczesnych jednostek multimedialnych NAC/SMEG (protokół CAN2010/EV) w starszych pojazdach PSA wyposażonych w magistralę CAN2004.

Translator pracuje jako most dwukierunkowy — tłumaczy ramki CAN w czasie rzeczywistym, zachowując pełną funkcjonalność: klimatyzację, ESP, cruise control, wyświetlacz klastra (Cirocco) oraz obsługę kierownicy wielofunkcyjnej COMEVO/COM2020.

Open Source MIT License v2.1.2 PSA Vehicles 2000-2016

Timeline — od Arduino do Teensy

Ewolucja projektu na przestrzeni lat

Etap 1 — Arduino Nano/Uno
MCP2515 (SPI) — 3× moduły CAN
Pierwsza wersja na Arduino z trzema modułami MCP2515 przez SPI. Działało, ale SPI bottleneck powodował opóźnienia i gubienie ramek. Brak mocy obliczeniowej na dodatkowe funkcje. Wersja: Arduino_PSA_DeSilve v.1.0.5.
Problem
SPI bottleneck — za wolno!
Arduino nie nadążało z obsługą 3 magistral CAN jednocześnie. MCP2515 przez SPI to max ~1000 ramek/s. Przy gęstym ruchu CAN (125 kbps) ramki były gubione. Brak możliwości dodania wyświetlacza, loggera, sniffera.
Etap 2 — Migracja na Teensy 4.1
FlexCAN — 3× natywne kontrolery CAN
Przeskok na Teensy 4.1 (ARM Cortex-M7, 600 MHz). 3 natywne kontrolery CAN (FlexCAN_T4) — bez SPI, bez bottlenecku. Ogromny zapas mocy na wyświetlacz, logger, sniffer, menu i ESP32. Wersja: Teensy_PSA_DeSilve v.2.x.
Etap 3 — Rozbudowa
LCD, Logger, Sniffer, ESP32
Dodanie wyświetlacza dotykowego ILI9488 (480×320), loggera na kartę SD, sniffera z differential rendering, menu konfiguracyjnego z zabezpieczeniem PIN, oraz modułu ESP32 (WiFi/BT). Wersja: v.2.1.2 LAB 01.
Przyszłość
Panel WWW, OTA, Cloud
Plany na panel webowy do przeglądania danych CAN w czasie rzeczywistym, zdalne aktualizacje firmware (OTA), integracja z Event Horizon (EH-Core) i cloud logging.

Funkcje systemu

Kompletny zestaw funkcji CAN gateway

3× magistrale CAN
CAN1 (BSI2004), CAN2 (NAC/2010), CAN3 (COM/COMEVO) — natywne FlexCAN
Wyświetlacz ILI9488
480×320 px, touchscreen XPT2046, dashboard, sniffer, menu, settings
Logger CAN (SD)
Logowanie ramek CAN na kartę SD, format CSV, FAT32, timestamp
Sniffer CAN
Differential rendering, hash map, auto-scroll, filtrowanie
Klimatyzacja (AC)
Temperatura, wentylacja, tryb AUTO, recycling, ogrzewanie tylnej szyby
ESP (stabilizacja)
Electronic Stability Program — translacja statusu, ostrzeżenia
Cruise Control
Tempomat, limiter — obsługa przycisków i statusu z BSI
Klaster (Cirocco)
Wyświetlacz klastra — komunikaty, ikony, popup messages
Menu konfiguracyjne
Parametry, ustawienia, tryby — edycja przez touchscreen
Zabezpieczenia PIN
Blokada menu, PIN w EEPROM, bezpieczeństwo konfiguracji
Popup Messages
Komunikaty na wyświetlaczu klastra — ostrzeżenia, informacje
Wiring Modes
MODE_CUT_WIRES (gateway liniowy) lub MODE_TAP_IN (na wcinkę, z anti-echo)

Sprzęt

Specyfikacja techniczna komponentów

Komponent Specyfikacja
Teensy 4.1 ARM Cortex-M7, 600 MHz, 1 MB RAM, 8 MB Flash, 3× natywne CAN (FlexCAN_T4)
ILI9488 480×320 px, SPI, 16-bit color, wyświetlacz dotykowy TFT
XPT2046 Touchscreen controller, SPI, kalibracja dotykowa
MCP2515 Opcjonalnie — CAN3 przez SPI (dla COM/COMEVO, jeśli brak natywnego)
ESP32-WROOM WiFi + Bluetooth, UART (Serial5: TX5=pin 20, RX5=pin 21)
ESP32-S3 WiFi + BT, UART (Serial7: TX7=pin 28, RX7=pin 29) — opcjonalny drugi moduł
SD Card FAT32, logger ramek CAN, format CSV
Transceivery CAN TJA1050 / MCP2551 — konwersja sygnałów CAN_H / CAN_L
Zasilanie 12V → 5V (buck converter), stabilne zasilanie z instalacji samochodu

Wyświetlacz — ewolucja UI

Od LCD 16×2 do ILI9488 480×320 z touchscreen

Wyświetlacz przeszedł ogromną ewolucję: od prostego LCD 16×2, przez ILI9341 (320×240), aż do obecnego ILI9488 (480×320) z touchscreenem XPT2046. Interfejs wykorzystuje differential rendering — odświeżane są tylko zmienione piksele, co zapewnia płynność bez migotania.

🏠
Home (Dashboard)
Główny ekran — status CAN, temperatura, tryb pracy
🔍
Sniffer
Podgląd ramek CAN — diff rendering, hash map, auto-scroll
📋
Menu
Lista parametrów — nawigacja dotykiem, scrolling
✏️
Edit
Edycja wartości — klawiatura numeryczna, potwierdzenie
⚙️
Settings
Ustawienia systemowe — jasność, tryb, język
ℹ️
Info
Informacje o wersji, autorze, statystyki runtime
📡
ESP32
Konfiguracja WiFi/BT — SSID, hasło, status połączenia
C++ — differential rendering // Optymalizacja: rysuj tylko zmienione piksele
if (newValue != oldValue) {
  tft.fillRect(x, y, w, h, ILI9488_BLACK);
  tft.setCursor(x, y);
  tft.print(newValue);
  oldValue = newValue;
}

Modułowość — Refactoring

Od monolitu 2400 linii do 7 modułów

Plik display.cpp rozrósł się do ~2400 linii — nawigacja i maintenance stały się koszmarem. Rozwiązanie: podział na 7 specjalizowanych modułów , z których każdy odpowiada za jeden ekran. Główny plik display.cpp został sprowadzony do roli routera — inicjalizuje wyświetlacz i deleguje rysowanie do odpowiedniego modułu.

display.cpp / .h
display_home.cpp / .h
display_sniffer.cpp / .h
display_menu.cpp / .h
display_info.cpp / .h
display_settings.cpp / .h
display_wifi_bt.cpp / .h
sd_logger.cpp / .h
esp32_manager.cpp / .h
C++ — struktura projektu // Główny plik .ino
#include <FlexCAN_T4.h>
#include <EEPROM.h>
#include "display.h"
#include "sd_logger.h"
#include "esp32_manager.h"

// Teensy PSA DeSilve CAN Translator v.2.1.2
// Professional CAN Gateway for PSA Vehicles

ESP32 — WiFi, Bluetooth, CAN4

ESP32-WROOM / ESP32-S3 — komunikacja UART z Teensy

Moduł esp32_manager obsługuje do 2 modułów ESP32 podłączonych przez UART. Każdy ESP32 może pracować w trybie Bluetooth lub WiFi (nie można mieć 2× BT lub 2× WiFi jednocześnie). ESP32 dodaje również CAN4 — czwartą magistralę CAN dla dodatkowej komunikacji.

WiFi Access Point
Serwer WWW na ESP32, dostęp do danych CAN przez przeglądarkę
Bluetooth
Komunikacja BT z aplikacją mobilną, diagnostyka bezprzewodowa
CAN4 (via ESP32)
Dodatkowa magistrala CAN — rozszerzenie możliwości systemu
Protokół UART
CONFIG, STATUS, CAN — komendy tekstowe zakończone \n
ESP32 Połączenie
ESP32 #1 (WROOM) Serial5 — TX5=pin 20, RX5=pin 21, 115200 baud
ESP32 #2 (S3) Serial7 — TX7=pin 28, RX7=pin 29, 115200 baud
EEPROM storage Adresy 200-332 (133 bajtów) — konfiguracja, tryb, SSID, hasło

Plany przyszłości

Co jeszcze nadchodzi w EH-Core Teensy

  • 3× natywne CAN (FlexCAN_T4) — migracja z Arduino/MCP2515
  • Wyświetlacz ILI9488 z touchscreen (differential rendering)
  • Logger CAN na kartę SD (CSV, FAT32)
  • Sniffer CAN (hash map, auto-scroll, filtrowanie)
  • Menu konfiguracyjne z zabezpieczeniem PIN
  • Modułowy refactoring — display.cpp → 7 modułów
  • ESP32 — WiFi + Bluetooth + CAN4 (w trakcie)
  • Anti-Echo Cache (MODE_TAP_IN — deduplikacja ramek)
  • Panel WWW — przeglądanie danych CAN w przeglądarce
  • Zdalna konfiguracja przez WiFi
  • OTA updates — aktualizacja firmware przez WiFi
  • Zaawansowana diagnostyka — kody błędów, odczyt ECU
  • Integracja z Event Horizon (EH-Core)
  • Cloud logging — zdalne przechowywanie logów

Projekt w liczbach

Fakty i statystyki EH-Core Teensy

3
Magistrale CAN
600
MHz (Cortex-M7)
480×320
px (ILI9488)
7+
Modułów kodu
2
Sloty ESP32
v.2.1.2
Aktualna wersja
125
kbps CAN Bus
MIT
Licencja

Galeria projektu

Zdjęcia, screenshoty i schematy

Galeria zostanie uzupełniona o zdjęcia i screenshoty z rzeczywistego montażu.

Download

Firmware, dokumentacja i źródła

Firmware Teensy (.hex)
v2.1.2 LAB 08 • 256 KB
Źródła — GitHub Release
.zip • Pełny kod C/C++
Dokumentacja techniczna
PDF • Schematy, pinout, CAN IDs
Przykładowy log CAN (CSV)
log_1.csv • Format loggera SD
ESP32 Firmware
WiFi/BT moduł • .bin
Wiring Diagram
Schemat połączeń • PNG/PDF

Projekt i realizacja: Sylwester Lewandowski

@desilve_rcz

© 2026 DeSilve.com — Wszystkie prawa zastrzeżone.

An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please reload the page.