Eigentlich wollte ich über den Karosserie CAN Bus des Fiat Ducato die Zentralverriegelung steuern. Leider musste ich feststellen, dass das über den CAN Bus nicht möglich ist. Trotzdem findet man auf dem CAN einige spannende Signale, die man für mein Smart-Camper-Projekt gebrauchen kann. In diesem Beispiel integriere ich den Status der Fahrzeugtüren in mein Smart Camper System.
Komfort CAN Bus Grundlagen
Der Komfort CAN Bus des Fiat Ducato ist ein Low-Speed-CAN mit 50kBit/s . Das ist auch schon die erste Schwierigkeit. Während es online unterschiedliche CAN Module (mit CAN Controller und Transceiver) für High-Speed-CAN gibt, findet man keine fertigen Module für Low-Speed-CAN. Der Unterschied liegt in den Pegeln der CAN-H und CAN-L Leitung. Für das reine Testen kann man einen High-Speed-CAN Modul verwenden und nur die CAN-H Leitung verbinden. Die Pegel der CAN-H Leitung von High- und Low-Speed-CAN sind sich ähnlich und so sollte es möglich sein auch mit einem High-Speed-CAN Modul den Low-Speed-CAN des Ducato auszulesen. Folgende Grafik zeigt die Pegel von CAN-H und CAN-L von Low- und High-Speed-CAN.
Low-Speed-CAN mit dem ESP32
Der ESP32 hat einen CAN-Controller integriert. Was jetzt noch fehlt ist ein Low-Speed-CAN Transceiver. Hierfür habe ich einen TJA1055t/3 (da der ESP32 3,3V bevorzugt) bestellt. Außerdem benötigt man noch ein paar Widerstände und optional eine LED, die anzeigt, ob auf dem CAN gerade etwas passiert.
Beschreibung | Bezeichnung | Anzahl |
Microcontroller | ESP32 | 1 |
CAN-Tansceiver | TJA1055T/3 | 1 |
Widerstand | 4,7kOhm | 3 |
Widerstand | 3,3kOhm | 2 |
Widerstand | 2,2kOhm | 1 |
LED | LED | 1 |
Jumper | Jumper | x |
Steckbrett | Steckbrett | 1 |
Die Schaltung ist gemäß dem Datenblatt des TJA1055T/3 aufgebaut. Die beiden Widerstände an CAN-H und CAN-L habe ich maximal gewählt, damit sie im Ducato CAN Bus nicht ins Gewicht fallen. Zusätzlich habe ich den Pin 1 (INH = Wake-Up-Signal) über einen Spannungsteiler mit einem Wakeup-Pin des ESP32 verbunden. Sobald eine Kommunikation auf dem CAN Bus startet, geht der Pin auf „High“ und weckt so den ESP32 auf. D.h. solange auf dem CAN Bus keine Kommunikation stattfindet, braucht das System nur einen ganz kleinen Ruhestrom. Die LED zeigt an, ob gerade über den CAN Bus kommuniziert wird (ON) oder sich das System im Ruhezustand befindet (OFF).
Signale auf dem Fiat Ducato Karosserie CAN
Sobald man eine Tür öffnet, das Fahrzeug verriegelt bzw. entriegelt oder den Motor startet, werden diverse Daten mit unterschiedlichen IDs über den CAN-Bus gesendet. Da ich von Fiat leider keine Information zu diesen Daten bekommen habe, habe ich einfach alle Daten aufgezeichnet und unterschiedliche Aktionen ausgeführt. Anschließend habe ich daraus eine Pivot Tabelle gemacht um zu sehen, welche Signale durch welche Aktionen ausgelöst werden. Damit konnte ich herausfinden, dass es kein Signal zum Verriegeln oder Entriegeln der Zentralverriegelung gibt. Außerdem sind die Türen im ersten Byte der ID 0x06214000 zu finden. Wer sich für die unterschiedlichen Signale interessiert, dem habe ich hier die Pivot Tabelle angehängt. Das Event „Zündung“ habe ich ausgeklammert, da damit viele neue Signale auf dem CAN liegen, die mir die Übersichtlichkeit stark verschlechtern.
Einbindung in mein Smart-Camper-System
Der Code ist so geschrieben, dass sich das System eigentlich immer im Deep-Sleep-Modus befindet und nur ganz wenig Strom benötigt. Sobald etwas auf dem CAN Bus passiert, wacht das System auf und liest fleißig mit. Änderungen an den Türen (öffnen schließen) führen zu entsprechenden Signalen auf dem CAN Bus. Der Microcontroller wertet diese aus und gibt den Status der Türen über den Pegelzustand von 4 GPIOs aus. Ist eine Tür offen, ist der entsprechende Pin „High“ und umgekehrt. Dieser Pegelzustand wird über eine HomeMatic IP 8 Kanal Modulplatine (HmIP MOD-RC8) an das Homematic System weitergegeben und kann zum Auslösen von Ereignissen verwendet werden.
Folgende Abbildung zeigt das fertige System. Da es auch noch verwendet wird um die Alarmanlage und die Daten des Batteriecomputers ins System zu übertragen ist in diesem Gehäuse auch noch die Hardware aus den beiden letzten Artikeln zusammengefasst.
Anzeige in der Cloudmatic App
Den Status der 4 Tür Kanäle zeige ich auch in meiner App an. So weiß ich von überall in der Welt ob eine Tür von meinem Camper gerade offen bzw. nicht richtig verschlossen ist. Gerade ist zum Beispiel die Schiebetür offen.
Übersicht der gebrauchten Komponenten
#include <Arduino.h> #include <ESP32CAN.h> #include <CAN_config.h> #include <driver/rtc_io.h> //CAN Low Speed Variablen CAN_device_t CAN_cfg; RTC_DATA_ATTR CAN_frame_t rx_frame; gpio_num_t GPIO_ESP_CANWake = GPIO_NUM_35; //CAN Modul Weckt den ESP #define BUTTON_PIN_BITMASK 0x800000000 // 2^35 in hex gpio_num_t GPIO_CAN_Wake = GPIO_NUM_21; //ESP aktiviert CAN Modul gpio_num_t GPIO_CAN_TX = GPIO_NUM_23; //GPIO_NUM_5 gpio_num_t GPIO_CAN_RX = GPIO_NUM_22; //GPIO_NUM_4 RTC_DATA_ATTR byte ZV_Byte_1, Status_FT, Status_BFT, Status_HT, Status_ST; #define IS_SET(byte,bit) (((byte) & (1UL << (bit))) >> (bit)) //Setup RTC_DATA_ATTR unsigned long currentMillis, previousMillis; /////////////////////////////////////////////////////////////////////////////////// ///////////////////////// SETUP /////////////////////////////// /////////////////////////////////////////////////////////////////////////////////// //GPIOs konfigurieren void Setup_GPIO(){ // Pins sind mit dem Homematic 8-Kanal-Empfangsmodul verbunden pinMode(GPIO_NUM_33, INPUT_PULLUP); pinMode(GPIO_NUM_25, INPUT_PULLUP); pinMode(GPIO_NUM_26, INPUT_PULLUP); pinMode(GPIO_NUM_27, INPUT_PULLUP); pinMode(GPIO_NUM_14, INPUT_PULLUP); pinMode(GPIO_NUM_12, INPUT_PULLUP); pinMode(GPIO_NUM_13, INPUT_PULLUP); //STB_N vom TJA1055T (GPIO_NUM_21) pinMode(GPIO_CAN_Wake, OUTPUT); // Pins sind mit dem Homematic IP 8-Kanal-Sendemodul verbunden pinMode(GPIO_NUM_15, OUTPUT); pinMode(GPIO_NUM_2, OUTPUT); pinMode(GPIO_NUM_0, OUTPUT); pinMode(GPIO_NUM_4, OUTPUT); pinMode(GPIO_NUM_16, OUTPUT); pinMode(GPIO_NUM_17, OUTPUT); pinMode(GPIO_NUM_5, OUTPUT); pinMode(GPIO_NUM_18, OUTPUT); //WakeupPin TJA1055T pinMode(GPIO_ESP_CANWake, INPUT_PULLDOWN); digitalWrite(GPIO_CAN_Wake, HIGH); //esp_sleep_enable_ext0_wakeup(GPIO_ESP_CANWake, HIGH); esp_sleep_enable_ext1_wakeup(BUTTON_PIN_BITMASK,ESP_EXT1_WAKEUP_ANY_HIGH); //WakeupPin Homematic pinMode(GPIO_NUM_32, INPUT_PULLUP); esp_sleep_enable_ext0_wakeup(GPIO_NUM_32, LOW); rtc_gpio_pullup_en(GPIO_NUM_32); } void Setup_CAN_LS(){ Serial.println("Setup_CAN_LS"); CAN_cfg.speed=CAN_SPEED_50KBPS; CAN_cfg.tx_pin_id = GPIO_CAN_TX; CAN_cfg.rx_pin_id = GPIO_CAN_RX; CAN_cfg.rx_queue = xQueueCreate(100,sizeof(CAN_frame_t)); ESP32Can.CANInit(); delay(100); } void setup() { Serial.begin(115200); Setup_GPIO(); Setup_CAN_LS(); previousMillis = millis(); } void loop() { if(digitalRead(GPIO_NUM_32)==0){ Serial.println("HomeMatic Weckruf"); //Votronic auslesen if(digitalRead(GPIO_NUM_33)==0){ } //Unlock Zentralverriegelung if(digitalRead(GPIO_NUM_25)==0){ } //Lock Zentralverriegelung if(digitalRead(GPIO_NUM_26)==0){ } //Status der Thitronik auf PIN darstellen if(digitalRead(GPIO_NUM_27)==0){ } //Aktuell Unbenutzt if(digitalRead(GPIO_NUM_14)==0){Serial.println("GPIO_NUM_14");} if(digitalRead(GPIO_NUM_12)==0){Serial.println("GPIO_NUM_12");} if(digitalRead(GPIO_NUM_13)==0){Serial.println("GPIO_NUM_13");} } //Solange der CAN-Transceiver nicht schläft, werden Nachrichten gelesen CAN_Nachricht_empfangen(); if (digitalRead(GPIO_ESP_CANWake)!= HIGH){ //Schlafenszeit bis GPIO32 == LOW (Homematic) oder GPIO_35 == HIGH (CAN transceiver) Serial.println("ich gehen schlafen!!"); ESP32Can.CANStop(); gpio_deep_sleep_hold_en(); //Hold GPIO Status esp_deep_sleep_start(); } } /////////////////////////////////////////////////////////////////////////////////// ///////////////////////// CAN /////////////////////////////// /////////////////////////////////////////////////////////////////////////////////// void CAN_Nachricht_empfangen() { //receive next CAN frame from queue if(xQueueReceive(CAN_cfg.rx_queue,&rx_frame, 3*portTICK_PERIOD_MS)==pdTRUE){ digitalWrite(GPIO_CAN_Wake, HIGH); if(rx_frame.MsgID==0x06214000){ if( ZV_Byte_1 != rx_frame.data.u8[1]){ ZV_Byte_1 = rx_frame.data.u8[1]; Status_FT = IS_SET(ZV_Byte_1,2); Status_BFT = IS_SET(ZV_Byte_1,3); Status_ST = IS_SET(ZV_Byte_1,4)|IS_SET(ZV_Byte_1,5); Status_HT = IS_SET(ZV_Byte_1,6); printf("FT: %d, BFT: %d, HT: %d, ST: %d, \n",Status_FT, Status_BFT , Status_HT, Status_ST); Set_And_Hold_GPIO(GPIO_NUM_15, Status_FT);//MH-IP_1 Set_And_Hold_GPIO(GPIO_NUM_2, Status_BFT);//MH-IP_2 Set_And_Hold_GPIO(GPIO_NUM_0, Status_ST);//MH-IP_3 Set_And_Hold_GPIO(GPIO_NUM_4, Status_HT);//MH-IP_4 //Noch nicht belegt //Set_And_Hold_GPIO(GPIO_NUM_16, 1);//MH-IP_5 (Nur Taster/ immer Low im Schlaf) //Set_And_Hold_GPIO(GPIO_NUM_17, 1);//MH-IP_6 (Nur Taster/ immer Low im Schlaf) //Set_And_Hold_GPIO(GPIO_NUM_18, 0);//MH-IP_8 } } previousMillis = millis(); } else{ currentMillis = millis(); //erst nach 1s Funkstille den Transceiver deaktivieren if((currentMillis - previousMillis) > 1000) { digitalWrite(GPIO_CAN_Wake, LOW); } } } void Set_And_Hold_GPIO(gpio_num_t gpio_num,byte GPIO_status){ gpio_hold_dis(gpio_num); digitalWrite(gpio_num, GPIO_status); gpio_hold_en(gpio_num); printf("GPIO: %d set to %d \n", gpio_num , GPIO_status); }
Danke, dass ihr unseren Blogartikel gelesen habt! Wir freuen uns auf eure Kommentare und euer Feedback.
Unten geht es weiter mit ähnlichen Blogartikeln, außerdem findet ihr die Möglichkeit, euch zu unserem Newsletter anzumelden sowie den Verweis zu unseren Produkten in unserem Webshop.
Dankeschön und Happy Camping,
Sonja & Matthias
Hier könnt ihr euch zu unserem Newsletter anmelden.
Wir schreiben unser Community in unregelmäßigen Abständen, sobald wir neue, spannende Blogartikel posten.
Außerdem schicken wir euch exklusive Rabatte für unseren Webshop. Wir freuen uns, mit euch in Kontakt zu bleiben!
Besucht unseren Webshop
Gadgets von Campern für Camper. Unsere eigenen Produkte!
-
Ausführung wählen Dieses Produkt weist mehrere Varianten auf. Die Optionen können auf der Produktseite gewählt werden Quick View
Camperflower All-in-One Vanlife Becher
14,90 € – 15,90 €inkl. MwSt.
zzgl. Versandkosten
-
Camperflower Cockpit Gadget
15,90 €inkl. 19 % MwSt.
zzgl. Versandkosten
Hi,
An welcher Stelle greifst du den Komfort CAN bus ab?
Hallo Fabian,
an der stelle wo der Sicherungskasten ist, kannst du diesen abschrauben. Am besten geht das, wenn du vorher die Plastikverkleidung mit 3 Schrauben entfernst. Auf der Rückseite befinden sich 2 Stecker. Am linken Stecker auf PIN 26 (Farbe schwarz/orange) und auf PIN 11 (Weiß/Orange) sind CAN-H und CAN-L.
Anscheinend gibt es aber auch in der B-Säule auf der Beifahrerseite einen Stecker, auf dem dem CAN-H und CAN-L ist. Das habe ich aber noch nicht geprüft )Eventuell PIN 9 und 10 in diesem Stecker.
Grüße,
Matthias
Hi,
Woher hast du den TJA1055t/3 auf einem breakout board? Ich finde den Chip nur einzeln und dann zumeist mit hohen Versandkosten (wenn man nur den einen Chip benötigt)
Grüße Fabian
Hallo Fabian,
Ich habe ihn bei ebay gekauft…war echt nicht leicht zu finden. Eventuell habe ich sogar noch einen übrig.
Grüße,
Matthias
Hallo Matthias,
erstmal vielen Dank für Deine Beschreibungen. Das ist eigentlich genau das, was ich schon länger suche.
Ich möchte eine einfache „Alarm“ Anlage für die Vordertüren an meinem Camper haben. Alles kommerzielle ist sauteuer für das, was sie bieten.
Also habe ich mir die o.g. Komponenten bestellt und hänge nun beim Kompilieren im Arduino IDE fest. Denn ich bekomme eine Fehlermeldung, dass die Konstante „CAN_SPEED_50KBPS“ im Scope nicht definiert wurde.
Wie gross ist der Wert und wo muss ich ihn definieren?
Danke für eine kurze Info und mach weiter so.
Grüße
Gundolf
Hi Gundolf,
Das muss alles in der CAN_config.h stehen. Schau nochmal nach ob der Wert bei dir fehlt. Kann leider gerade nicht nachschauen. Wenn du das Problem nächste Woche noch hast, schreib mir eine E-Mail.
Grüße,
Matthias
Hallo,
bin zufällig auf deinen Beitrag aufmerksam geworden. Finde es ein interessantes Projekt. Ich habe schon mehrfach mit einem ESP experimentiert, jedoch nicht am Fahrzeug.
Wie ist das mit dem CAN Bus genau? Hat man dann einen High Speed und Low Speed CAN Bus im Ducato? Mein Ziel ist es eine Wegfahrsperre nachzurüsten. Aber ich möchte dies nicht in der Nähe des Sicherungsverteilers tun. Damit man diese nicht so leicht findet.
Wie kann ich rausfinden, wo ich den CAN-Bus noch abgreifen kann? Du schreibst B-Säule. Woher weiß man, welcher CAN Bus das ist und ob es er ist?
Danke!
Tobias
Hallo Tobias,
leider kenne ich den genauen Aufbau der unterschiedlichen Bussysteme im Ducato auch nicht. Welche Information suchst du denn für deine Wegfahrsperre und wie soll die funktionieren? Ich würde mit einem Oszilloskop bei der Beifahrerseite an der B-Säule Mal nach dem CAN suchen. Ein gutes Indiz ist auch immer ein verdrehtes Adernpaar.
Grüße,
Matthias
Hallo Matthias,
es hat mich immer schon interessiert, welche Tür mich gerade daran hindert den Ducato abzuschliessen.
Deine Lösung gefällt mir gut. Ich habe aber keine Homematic um den Zustand darzustellen.
Rein HW technisch könnte ich mir eine Lösung mit LEDs an den GPIOs vorstellen.
SW technisch wäre es super wenn man den Status per MQTT an einen Broker senden könnte.
Schon mal über so etwas nach gedacht ? Ich bin kein Programmierer und kenne mich mit Arduino
auch nicht aus. Wie siehst du das, kann man das als Laie mit etwas Internet Recherche umsetzen
oder ist das komplexer oder hat due eine einfache Lösung ?
Viele Grüße Thomas
Sowohl led alsauch mqtt ist möglich letzteres habe ich auch schonmal mit einem Beispiel aus dem Internet umgesetzt. Mit etwas rumprobieren wird dir das schon gelingen 🙂
Grüße,
Matthias
Hallo,
sehr Interessant!
Ich versuche gerade mit einem Pi und einem „WaveShare RS485 CAN HAT for Raspberry Pi“ den Canbus meines Ducato(BJ2019) auszulesen.
Ist das sicher mit der Bus-Geschwindigkeit von 50000 ?
Im Netz gibt es leider sehr viele wiedersprüchliche Informationen.
Grüße
Wolfgang
Hallo Wolfgang,
ich bin ein blutiger CAN Bus Anfänger, aber die 50.000 kann ich dir, zumindest für den CAN Bus der am Radio-Stecker vorhanden ist, bestätigen.
lG Gerhard
Ok, ich versuche mal mein Glück am Radiostecker, beim ODB2 kommt ohne Zündung gar nichts raus.
Hast du evtl. eine Pinbelegung vom Radio, ich habe das originale UConnect 5 Zoll….
Hi Wolfgang,
Sorry die Frage ist mir durchgerutscht! Ja, dir 50000 stimmen, ich hoffe, du konntest es mittlerweile selbst herausfinden.
Grüße,
Matthias
Bei meinem Ducato L4H3(2019) und dem „RS485 CAN HAT, MCP2515“ auf dem Raspberry kommt nur was bei 500000.
Ist das richtig, dass bei „Zündung aus“ gar nichts auf dem CanBus kommt?
Grüße
Wolfgang
Hi, Sie sind da ja schon etwas weiter als ich aktuell, gibt es dazu noch interessante andere links?
Leider nicht, ich kenne auch nur die Tabelle weiter oben.
Hallo zusammen,
wir haben uns auch gerade ein Fiat Ducato Womo gekauft, Bj. 2019, gibts zu dem Modell schon nähere Informationen den Can Bus betreffend?
Fange auch gerade erst an mich mit dem Thema Can Bus zu beschäftigen, aber eine Integration des Fahrzeugzustandes ins Smart Home würde ich sehr interessieren
Danke für Infos und Tip’s
Hi Sven,
BJ 2019 müsste ja noch der alte Ducato sein, also der, den ich hier beschreibe. oder ist es schon das neue Modell?
Grüße,
Matthias
Ich denke es ist der alte, wir haben den jetzt seit ca 1,5 Wochen zuhause, ist unser erster Camper (also alles neu und frisch)
haben den gebraucht gekauft, waren begeistert von dem 🙂
Ich finde es schwierig genaue Modell Informationen zu bekommen 🙂
Welche Daten bräuchte man genau um das herauszufinden? mit den Angaben aus dem Fahrzeigschein war ich nicht sehr erfolgreich,
kann es schwer sagen, aber ich glaube Typ 3 / Facelift 3? exaktes Baujahr war 18.04.2019
Fiat Ducato Malibu Van 600 LE
Nur mal als info 🙂
Ich bin Technik Geek,0 Plan von Autos, fahre selber kein Auto oder so. das Womo rüste ich aber nun sehr gerne weiter aus 🙂
Zurück zum Thema, ich habe aktuell an Hardware einen Pi Zero 2 WH mit Waveshare RS485 CAN HAT hier, die ganze drumherum Hardware natürlich auch (ESP’s usw), aber ich wollte jetzt mal anfangen mit dem Auswerten des Can-Bus (ebenfalls blutiger Anfänger in Sachen Can-Bus, bin auch hier für anfängliche Tips usw offen (Smart Home, Home Assistant, Homematic ist alles vorhanden, Wlan im Womo ist da, nur noch nicht aktiv) 🙂
Zurück zum Thema, ich habe aktuell an Hardware einen Pi Zero 2 WH mit Waveshare RS485 CAN HAT hier, die ganze drumherum Hardware natürlich auch (ESP’s usw), aber ich wollte jetzt mal anfangen mit dem Auswerten des Can-Bus (ebenfalls blutiger Anfänger in Sachen Can-Bus, bin auch hier für anfängliche Tips usw offen (Smart Home, Ho