Anfänger - Probleme mit Arduino und KNX

Hallo zusammen,

ich komme gerade nicht mehr weiter, deshalb hoffe ich, dass ihr mir helfen könnt. Ziel ist es, mittels Arduino und Siemens BCU einfache Nachrichten auf den KNX-Bus zu setzen. Fernziel ist das Absetzen von Schalt- und Dimm-Befehlen über eine Folientastatur. Aber erstmal klein anfangen...

Der Schaltungsaufbau ist ganz einfach und der Arduino ist über USB mit dem Rechner verbunden:

Der Code ist wie folgt:

#include <KnxTpUart.h>

KnxTpUart knx(&Serial, "1.1.25");
int LEDboard=13;


void setup() {
  Serial.begin(9600);
  knx.uartReset();

  pinMode(LEDboard,OUTPUT);
}

void loop() {
  bool success = knx.groupWriteBool("31/1/1", true);
  delay(5000);

  digitalWrite(LEDboard,HIGH);
  delay(500);
  digitalWrite(LEDboard,LOW); 
}

Compilieren und hochladen ist kein Problem. Allerdings ist in den Code-Beispielen, die ich genutzt hatte, immer von &Serial1 die Rede, was sich aber nicht compilieren ließ und nur &Serial erwartet wurde. Nutze die Arduino IDE

Auf der seriellen Konsole kommt folgende Ausgabe:

Ӏ����������H

Im Busmonitor der ETS erscheint leider NIX. Könnt Ihr mir helfen, wie ich die ganze Nummer debuggen kann? Danke.

--
Gruß,
Christian

Kenne das Ding nicht, die GND Verbindung fehlt, und man sollte nicht D0 und D1 Verwenden, oder ein Kontroller nehmen was hat mehrere Serials, oder Software Serial nutzen.

Naja, so wie ich das sehe hast Du den KNX-Bus auf RX,TX gelegt, d.h. serielle Schnittstelle (zum PC) und Bus sind identisch.
Sollten aber zwei unterschiedliche "Richtungen" sein.

???
Welche, KNX sind IMHO zwei Adern.

cu

Hi,

Habe jetzt die Stromversorgung auf die BCU - 5V umgestellt und die USB-Verbindung zum Rechner getrennt. Aber es kommt auf dem KNX-Bus immer noch kein Signal an.

Kann das damit zu tun haben, dass es die Gruppenadresse 31/1/1 bei mir aktuell nicht gibt!?

Sorry für die vielleicht blöden Fragen, arbeite mich gerade ein.

Gruß,
Christian

Sind denn auch die Leitungen RX / TX überkreuz angeschlossen?
Du hast nur einen Nano mit einer seriellen, wenn du eine 2. serielle Schnittstelle haben möchtest solltest du einen Nano Every nehmen.

Ja, hab ich drauf geachtet:

  • TX am Arduino an Pin 2 BCU RxD
  • RX am Arduino an Pin 4 BCU TxD

Also da kann ich nicht weiterhelfen, mehr wie wissen was KNX ist nicht drin.

cu

KNX ist mir persönlich Neuland,.. aber aus reiner Neugier habe ich mich mal versucht, schlau zu machen und bin dabei über diesen Blog gestolpert, in dem am Ende die unterschiedlichen Erfolgserlebnisse mit verschiedenen Libraries erwähnt werden. Evtl. hilft das weiter.. :crossed_fingers:

Demnach ist Deine komplette Schaltung falsch, Deine zwei Drähte sind nicht der KNX-Bus, sondern die simple serielle Schnittstelle.
Hier kommt GND (@fony) ins Spiel und 5V benötigt die BCU auch.

https://www.konnekting.de/konnekting-lernen/l1-knx-mit-arduino/

cu

Hi,

ich hab die Schaltung inzwischen umgebaut. Versorgung erfolgt jetzt über die BCU und hab es auch wie im Link miteinander verschalten.

Eigentlich müsste es so klappen.

Als Libary verwende ich "KnxTpUart":

Gruß,
Christian

Moin!

Auch wenn die Adresse in vielen gegebenen Beispielen vorkommt ist 31 als Hauptgruppe ein bisschen verdächtig. Ich bin mir nicht sicher, ob die Siemens BCU das wirklich durchreicht. Schließlich ist der normal definierte Haupgruppen-Adressraum (4 bitig) bei 15 zu Ende. Es gibt zwar in einigen Zusammenhängen den erweiterten Hauptgruppen-Bereich (5 bitig), aber der ist nicht so recht im ursprünglichen Standard vorgesehen.
Es könnte funktionieren, ich habe schon mal mit dem erweiterten Adressbereich gearbeitet, aber ich erinnere mich dunkel, dass es da ein paar Stolperfallen gab.
Versuche es doch mal mit einer unverdächtigen Gruppenadresse, z.B. 15/1/1 .

Ich finde die folgenden Links recht informativ:

haus-automatisierung.com

KNX in Wikipedia

In dem Beispiel auf haus-automatisierung.com wird die serielle Kommunikation mit 19200 baud initialisiert. Ist es vielleicht das?

#include <Arduino.h>
#include <KnxTpUart.h>

KnxTpUart knx(&Serial, "1.1.25");

void setup() {
  Serial.begin(19200, SERIAL_8E1);
  knx.uartReset();
}

void loop() {
  bool success = knx.groupWriteBool("15/1/1", true);
  delay(5000);
}

Der KNX Bus läuft mit 9600, aber die Kommunikation mit der BCU wird mit gewisser Wahrscheinichkeit schneller verlaufen.