Guten Abend,
das ist mein erster Post in diesem Forum. Ich bin weder Elektrotechniker noch Programmierer, habe aber vor einigen Jahren angefangen, mir ein paar Homebrew-Komponenten für die Hausautomatisierung zusammenzubauen und auf meine Bedürfnisse anzupassen. Ich kann einigermaßen mit dem Lötkolben umgehen, habe Multimeter und Labornetzteil, kann Code, den andere geschrieben haben, meist erfolgreich modifizieren bzw. anpassen, und auch das Kompilieren, Flashen usw. klappt normalerweise leidlich.
Allerdings habe ich als Nicht-Programmierer klare Limits, wenn es um Grundsätzliches, From-the-Scratch-Programmierung und das Zusammenspiel zwischen Hardware und Software geht… Und an einem solchen toten Punkt bin ich nun mit meinem aktuellen Projekt angelangt.
Ich möchte einen AUX-Eingang für das Originalradio meines Youngtimers (1995er Jaguar XJS) kreieren. Es handelts sich um eine Alpine HU mit 6fach-CD-Wechsler im Kofferraum. Und der so genannte M-Bus von Alpine, der für die Kommunikation zwischen HU und Wechsler zuständig ist, ist der Schlüssel für den Aux-Eingang.
Die HU schaltet das über den CD-Eingang kommende Audiosignal nur dann live, wenn sie mit dem Wechsler über den M-Bus kommunizieren kann. Daher braucht es eine Art M-Bus-Emulator, der die HU glauben lässt, die würde mit dem Wechsler „sprechen“, wodurch man sein externes Audiosignal auf die Leitung des CD-Eingangs legen kann.
Glücklicherweise musste ich das Rad nicht neu erfinden, da sich schon einige, die sich besser mit Hardware und Programmierung auskennen, mit diesem Thema befasst haben. Die „Mutter aller M-Bus-Emulatoren“ dürfte die Seite von Jörh Hohensohn sein. Da ist der Bus beschrieben, ebenso das Prinzip, wie man ihn emuliert. Leider darf ich als Neuling ich nur zwei Links im Beitrag untebringen.
Ich setze erfolgreiche Olystyles M-Bus library für Arduino mit einem Pro Mini ein (GitHub - Olstyle/MBus: Alpine MBus for Arduino); Picoharis ähnlicher Ansatz mit einem AT128 läuft bei mir ebenfalls (GitHub - picohari/atmega128_alpine-mbus-emulator: Alpine M-Bus CD Changer Emulator with ATmega128 and LCD). Für beide nutze ich die von Picohari vorgeschlagene Schaltung, um das Bussignal mit ein paar Transistoren und Widerständen in Eingang und Ausgang zu splitten. Interessanterweise funktioniert das bei mir sogar ohne dass ich die 5 Volt (bzw. 12 Volt bei Jörg Hohensohn) draufgebe.
Nun würde ich gern den nächsten Schritt gehen und A2DP Bluetooth in den M-Bus-Dongle integrieren. So könnte man z.B, die Originalknöpfe der HU – etwa die zur Auswahl der CDs 1 bis 6 – nutzen, um Befehle wie Play, Stop, Pause usw. an das verbundene Smartphone zu senden
Daher habe ich mir nun mal einen Esp32 besorgt, da er mit integriertem Bluetooth kommt und es nette Libraries für Amateure wie mich dafür gibt. Ich habe den „ESP32 NodeMCU Dev Kit C with CP2102“. Ich hoffte, dass ich Olstyle’s library (s. Link w.o.) und den Beispielcode auf dem Esp32 nutzen könnte (via Arduino IDE). Der Beispielcode, der wie gesagt auf dem Pro Mini prima läuft, ist ebenfalls dort: "independentGButtons.ino", unter "examples"
Kompilieren und Flashen klappt, aber beim Anschluss an die HU erkennt diese keinen CD-Wechsler.
Ich habe die Pin-Definitionen für IN und Out von 10 und 12 (Olstyles Pro Mini Beispiescript) zu Pins 4 und 5 für den Esp32 geändert. Nicht geändert habe ich
MBus::MBus(uint8_t in, uint8_t out)
{
_in=in;
_out=out;
pinMode(_in, INPUT);
pinMode(_out,OUTPUT);
}
in Mbus.cpp, da ich dachte, dass das auch für den Esp32 passen würde.
Aber ich fürchte, dass es da doch mehr zu ändern gibt, damit der Sketch auch auf dem Esp32 läuft.
Daher wäre ich sehr dankbar, wenn mal jemand, der etwas davon versteht, über den Code schauen und mir einen Tipp geben könnte…
Martin