Hallo zusammen,
ich hoffe ihr könnt mir weiterhelfen.
Ich schaffe es nicht KNX Telegramme mit dem Arduino zu empfangen und dort weiterzuverarbeiten.
Verwendet wird ein Arduino Mega, ein Siemesn 5WG1117 Busankoppler und die Bibliothek von Thorsten Gehrig (https://github.com/thorsten-gehrig/a...knx-user-forum)
Grundsätzlich funktioniert die Verbindung in eine Richtung. Ich kann aktuell ohne Probleme Daten auf den Bus schreiben/senden. Hierfür nutze ich folgenden Beispiel-Code (ebenfalls von Thorsten seinen Beispiel-Codes, etwas vereinfacht).
Genutzt wird Serial 1 am Arduino Mega, Gruppenadresse 1/4/8 (ebenfalls in der ETS6 angelegt), und die Physikalische Adresse 1.0.31 - arduino
Was ich jedoch nicht schaffe, ist die Verbindung in die andere Richtung aufzubauen. Ich habe hier - ebenfalls - ein Beispiel von Thorsten auf meine Bedürfnisse umgeschrieben. Reagieren soll der Arduino auf die Gruppenadresse 1/4/8, Datentyp bool (die gruppenadresse habe ich ebenfalls in der ETS6 auf diesen Datentyp eingestellt)
https://github.com/thorsten-gehrig/a...XTelegrams.ino
Ausgabe des Arduino IDE Terminals:
In der Ausgabe wird im Sekundentakt das "Event UNKNOWN" ausgegeben. Auch wenn ich mittels der ETS die Gruppenadresse 1/4/8 nicht schreibe und lese.
Anbei auch mal Eigenschaften des Telegrams welches ich mittels dem Diagnosetools der ETS auf den BUS schreibe. Ich schreibe hier ein False auf die 1/4/8. Ich gehe docht richtig in der Annahme, dass ich somit eigentlich den arduino "auslösen" müsste und er diesen Befehl erkennt, oder?
grafik.png
grafik.png
Wisst ihr warum der Arduino kein KNX_Telegramm erkennt?
Danke und schönen Samstag,
Sven
ich hoffe ihr könnt mir weiterhelfen.
Ich schaffe es nicht KNX Telegramme mit dem Arduino zu empfangen und dort weiterzuverarbeiten.
Verwendet wird ein Arduino Mega, ein Siemesn 5WG1117 Busankoppler und die Bibliothek von Thorsten Gehrig (https://github.com/thorsten-gehrig/a...knx-user-forum)
Grundsätzlich funktioniert die Verbindung in eine Richtung. Ich kann aktuell ohne Probleme Daten auf den Bus schreiben/senden. Hierfür nutze ich folgenden Beispiel-Code (ebenfalls von Thorsten seinen Beispiel-Codes, etwas vereinfacht).
Genutzt wird Serial 1 am Arduino Mega, Gruppenadresse 1/4/8 (ebenfalls in der ETS6 angelegt), und die Physikalische Adresse 1.0.31 - arduino
Code:
// Test constellation = ARDUINO MEGA <-> 5WG1 117-2AB12 #include <KnxTpUart.h> // Initialize the KNX TP-UART library on the Serial1 port of ARDUINO MEGA KnxTpUart knx(&Serial1, "1.0.31"); void setup() { Serial.begin(9600); Serial.println("TP-UART Test"); Serial1.begin(19200, SERIAL_8E1); Serial.print("UCSR1A: "); Serial.println(UCSR1A, BIN); Serial.print("UCSR1B: "); Serial.println(UCSR1B, BIN); Serial.print("UCSR1C: "); Serial.println(UCSR1C, BIN); knx.uartReset(); } void loop() { // Send the opposite of what we have sent last bool success = knx.groupWriteBool("1/4/8", false); delay(6000); Serial.print("Successfully sent"); }
https://github.com/thorsten-gehrig/a...XTelegrams.ino
Code:
#include <KnxTpUart.h> // Initialize the KNX TP-UART library on the Serial1 port of ARDUINO MEGA // and with KNX physical address 1.0.31 KnxTpUart knx(&Serial1, "1.0.31"); void setup() { Serial.begin(9600); Serial.println("TP-UART Test"); Serial1.begin(19200, SERIAL_8E1); Serial.print("UCSR1A: "); Serial.println(UCSR1A, BIN); Serial.print("UCSR1B: "); Serial.println(UCSR1B, BIN); Serial.print("UCSR1C: "); Serial.println(UCSR1C, BIN); knx.uartReset(); knx.addListenGroupAddress("1/4/8"); } void loop() { // nothing in the loop. This example is only to receive telegrams } void serialEvent1() { KnxTpUartSerialEventType eType = knx.serialEvent(); if (eType == TPUART_RESET_INDICATION) { Serial.println("Event TPUART_RESET_INDICATION"); } else if (eType == UNKNOWN) { Serial.println("Event UNKNOWN"); } else if (eType == KNX_TELEGRAM) { Serial.println("Event KNX_TELEGRAM"); KnxTelegram* telegram = knx.getReceivedTelegram(); // Telegrammauswertung auf KNX (bei Empfang immer notwendig) String target = String(0 + telegram->getTargetMainGroup()) + "/" + String(0 + telegram->getTargetMiddleGroup()) + "/" + String(0 + telegram->getTargetSubGroup()); // Here you have the telegram and can do whatever you want if (telegram->getCommand() == KNX_COMMAND_WRITE) { // Auswertung des empfangenen KNX-Telegrammes mit Schreibbefehl (Flag) -> Aktion if (target == "1/4/8") { int received_1_4_8 = telegram->getBool(); Serial.print("Empfangener wert"); Serial.println(received_1_4_8); } } } }
Code:
TP-UART Test UCSR1A: 100010 UCSR1B: 10011000 UCSR1C: 100110 Event UNKNOWN
Anbei auch mal Eigenschaften des Telegrams welches ich mittels dem Diagnosetools der ETS auf den BUS schreibe. Ich schreibe hier ein False auf die 1/4/8. Ich gehe docht richtig in der Annahme, dass ich somit eigentlich den arduino "auslösen" müsste und er diesen Befehl erkennt, oder?
grafik.png
grafik.png
Wisst ihr warum der Arduino kein KNX_Telegramm erkennt?
Danke und schönen Samstag,
Sven
Kommentar