Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Moin, ich brauch Mal wieder Hilfe. Und zwar habe ich einen UnoR3 mit Siemens BCU verbunden, Steckbrett mit LED's versehen dann einen Code zusammen gebastelt mit dem ich die LED's schalten kann was auch tadellos funktioniert. Jetzt wollte ich einen DHT11 oder DHT22 dazu stecken und mir aller 10min den Wert schicken lassen aber ich bekomme es einfach nicht auf die Reihe. Die ganzen Tut's im Netz habe ich alle durch probiert aber keins will funktionieren.

    Hat jemand einen Tempsensor am laufen und würde mir den Code zur Verfügung stellen?

    Danke

    Kommentar


      Hast Du denn mal einfach den DHT via Serieller Ausgabe, also ohne alles was mit KNX zu tun hat getestet? Funktioniert das? Zweiter Schritt wäre dann den Sketch der LEDs leuchten lässt mit dem DHT-Sketch zu verbinden. KNX für die LEDs, Serielle Ausgabe für den DHT.

      EDIT: Achso UNO, nur eine Serielle, die für KNX belegt ist. :-( Hast du auch einen Mega? Alternativ: Vergiss den zweiten Check und nimm direkt den von unten...

      Ich vermute dass der DHT Code delays beinhaltet, das funktioniert dann natürlich nicht. Ließe sich durch den zweiten Schritt einfach belegen.
      Such mal nach DHT non-blocking, das ist DHT Code der ohne delays läuft.

      Kommentar


        Also die beiden Sensoren funktionieren ohne KNX Zeugs am Arduino problemlos.

        Der Uno ist eigentlich nur zum testen da ich wollte später wenn alles passt einen Nano oder MiniPro kaufen. Wenn das wegen der einen seriellen Schnittstelle problematisch ist kaufe ich eben 2 oder 3 und noch weitere Siemens BCU's dazu.

        Kommentar


          Ich habe mir auf die schnelle einen Luftfeuchtesensor gebaut mit einem Uno und einem I2C-Display, der funktioniert auch problemlos und aktualisiert alle 2 sekunden das Display. Dennoch wird dieser Code mit KNX nicht funktionieren, da er eben die 2 Sekunden Wartezeit durch Schlafenlegen des Controllers erreicht. Die KNX Kommunikation wird dadurch getötet. Funktioniert perfekt in diesem Setup, aber eben nicht mit KNX oder anderer Kommunikation.

          Ein zweiter Arduino wird dir auch keine zweite Serielle Schnittstelle an dem einen Arduino verschaffen. Der Mega ist einer der Wenigen mit mehreren seriellen Schnittstellen. Der Zero wäre mit der SerialUSB auch noch passend.

          Du brauchst ja eine serielle für die Buskommunikation, und eine andere serielle für die Kommunikation mit der Arduino IDE. Softwareserial ist eine möglichkeit, aber das wird dann schon wieder eng mit Timings. Und alles nützt nichts, wenn dein Code (oder der der DHT-Bibliothek) delay()-Kommandos enthält.

          Kommentar


            Das mit den delays ist schon wichtig. Aber ich hatte mit einem UNO auch Probleme, vor allem bei read-requests die nicht beantwortet wurden.
            Mit ProMini ging alles was ich bisher getestet habe: DHT, 1wire, BMP bzw. BME
            Inzwischen nehme ich zum Testen einen Mega (zwei serielle Ports) und für den Einbau ProMini

            Kommentar


              Golfer

              Schon mal hier. Ich habe es genau so gemacht und es funktioniert problemlos.

              Kommentar


                Interressante Seite...aber Achtung:

                http://www.intranet-der-dinge.de/sma...ur/knx/arduino

                Wer lange Freude an den Basteleien haben will: bei Verwendung eines 3.3V-Arduinos sollte zumindest ein 1k-Widerstand zur Strombegrenzung zwischen TX des BCU zum RX des Arduino, damit nicht dauernd die internen Clamping-Dioden im µC in Höchstleistung aktiv werden müssen. Besser wäre ein Spannungsteiler 1k/2k, damit der µC innerhalb seiner zulässigen Pegelgrenzen betrieben wird.
                Viele Grüße,
                Stefan

                DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

                Kommentar


                  Zitat von Sisamiwe Beitrag anzeigen
                  Golfer

                  Schon mal hier. Ich habe es genau so gemacht und es funktioniert problemlos.
                  Schon versucht, die IDE 1.8.5 nimmt den Code nicht obwohl alle Libarys installiert sind.

                  Kommentar


                    Golfer

                    Der Sketch klappt bei mir mit Arduino 1.8.5 mit Arduino Pro Mini an Siemens BCU mit DHT22:
                    Code:
                    #include <ephemera_common.h>
                    #include <time.h>
                    
                    #include <Arduino.h>
                    
                    #include <avr/sleep.h>
                    #include <KnxTpUart.h>
                    #include "DHT.h"
                    
                    #define DHTPIN 4     
                    #define DHTTYPE DHT22 //DHT11, DHT21, DHT22
                    
                    // Room: Livingroom, KNX address: 1.1.49, GroupTemperature: 0/6/30, GroupHumidity: 0/6/31
                    const String deviceAddress           = "1.1.49";
                    const String groupTemperatureAddress = "0/6/30";
                    const String groupHumidityAddress    = "0/6/31";
                    
                    const int interval = 60;
                    const int ledpin = 13;
                    
                    DHT dht(DHTPIN, DHTTYPE);
                    
                    KnxTpUart knx(&Serial, deviceAddress);
                    
                    void setup()
                    {
                      Serial.begin(19200);
                      UCSR0C = UCSR0C | B00100000; // Even Parity
                    
                      knx.uartReset();
                    
                      dht.begin();
                    
                      watchdogOn(); // Enable watchdog timer.
                    
                      // The following saves some extra power by disabling some peripherals I am not using.
                      ADCSRA = ADCSRA & B01111111; // Disable ADC, ADEN bit7 to 0
                      ACSR = B10000000; // Disable analog comparator, ACD bit7 to 1
                      DIDR0 = DIDR0 | B00111111; // Disable digitale inputbuffer, set analoge input pins 0-5 to 1
                    }
                    
                    void loop()
                    {
                      float temperature = dht.readTemperature(); // Read temperature
                      knx.groupWrite2ByteFloat(groupTemperatureAddress, temperature);
                    
                      delay(5000);
                    
                      float humidity = dht.readHumidity(); // Read humidity
                      knx.groupWrite2ByteFloat(groupHumidityAddress, humidity);
                    
                      digitalWrite(ledpin, HIGH); // Set LED State to visualize progess  
                      delay(1000);
                      digitalWrite(ledpin, LOW);
                    
                      pwrDown(interval - 6); // Shutdown ATmega328 for "interval" seconds;
                    }
                    
                    void pwrDown(int seconds)
                    {
                      set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Set deepest sleep mode PWR_DOWN
                      for(int i=0; i < seconds; i++)
                      {
                        sleep_enable(); // Enable sleep mode
                        sleep_mode(); // Start sleep mode
                        sleep_disable(); // Disable sleep mode 
                      }
                    }
                    
                    void watchdogOn()
                    {
                      MCUSR = MCUSR & B11110111; // Disable reset flag, WDRF bit3 of MCUSR.
                      WDTCSR = WDTCSR | B00011000; // Set bit 3+4 to be able to set prescaler later
                      WDTCSR = B00000110; // Set watchdog prescaler to 128K > is round about 1 second
                      WDTCSR = WDTCSR | B01000000; // Enable watchdog interrupt
                      MCUSR = MCUSR & B11110111;
                    }
                    
                    ISR(WDT_vect)
                    {
                      //sleepcounter ++; // count sleepcycles
                    }

                    Kommentar


                      Funktioniert leider auxh nicht, klemmt an der gleichten stelle wie beim Tutorial auch:

                      Arduino: 1.8.5 (Linux), Board: "Arduino Mini, ATmega328P"

                      knx_temp_test.ino:23: error: no matching function for call to 'KnxTpUart::KnxTpUart(HardwareSerial*, const String&)'
                      KnxTpUart knx(&Serial, deviceAddress);
                      ^
                      /home/robbi/Arduino/knx_temp_test/knx_temp_test.ino/knx_temp_test.ino.ino:23:37: note: candidates are:
                      In file included from /home/robbi/Arduino/knx_temp_test/knx_temp_test.ino/knx_temp_test.ino.ino:7:0:
                      Mehrere Bibliotheken wurden für "DHT.h" gefunden
                      Benutzt: /home/robbi/Arduino/libraries/DHT_sensor_library-1.3.0
                      Nicht benutzt: /home/robbi/Arduino/libraries/DHT-sensor-library-master
                      /home/robbi/Arduino/libraries/KnxDevice-master/KnxTpUart.h:183:5: note: KnxTpUart::KnxTpUart(HardwareSerial&, word, type_KnxTpUartMode)
                      KnxTpUart(HardwareSerial& serial, word physicalAddr, type_KnxTpUartMode _mode);
                      ^
                      /home/robbi/Arduino/libraries/KnxDevice-master/KnxTpUart.h:183:5: note: candidate expects 3 arguments, 2 provided
                      /home/robbi/Arduino/libraries/KnxDevice-master/KnxTpUart.h:158:7: note: constexpr KnxTpUart::KnxTpUart(const KnxTpUart&)
                      class KnxTpUart {
                      ^
                      /home/robbi/Arduino/libraries/KnxDevice-master/KnxTpUart.h:158:7: note: candidate expects 1 argument, 2 provided
                      /home/robbi/Arduino/knx_temp_test/knx_temp_test.ino/knx_temp_test.ino.ino: In function 'void setup()':
                      knx_temp_test.ino:30: error: 'class KnxTpUart' has no member named 'uartReset'
                      knx.uartReset();
                      ^
                      /home/robbi/Arduino/knx_temp_test/knx_temp_test.ino/knx_temp_test.ino.ino: In function 'void loop()':
                      knx_temp_test.ino:45: error: 'class KnxTpUart' has no member named 'groupWrite2ByteFloat'
                      knx.groupWrite2ByteFloat(groupTemperatureAddress, temperature);
                      ^
                      knx_temp_test.ino:50: error: 'class KnxTpUart' has no member named 'groupWrite2ByteFloat'
                      knx.groupWrite2ByteFloat(groupHumidityAddress, humidity);
                      ^
                      exit status 1
                      no matching function for call to 'KnxTpUart::KnxTpUart(HardwareSerial*, const String&)'

                      Dieser Bericht wäre detaillierter, wenn die Option
                      "Ausführliche Ausgabe während der Kompilierung"
                      in Datei -> Voreinstellungen aktiviert wäre.

                      Kommentar


                        Zitat von Golfer Beitrag anzeigen
                        Funktioniert leider auxh nicht:

                        error: no matching function for call to 'KnxTpUart::KnxTpUart(HardwareSerial*, const String&)'
                        KnxTpUart knx(&Serial, deviceAddress);
                        Autsch. Falsche lib. Der Sketch ist für die String-basierte lib, deine lib ist eine optimierte, oder die original Dka. Schau mal auf den ersten Seiten dieses Threads, da waren mal die drei Alternativen dargestellt.

                        und: ein UNO ist kein Mini.

                        Kommentar


                          Top, Danke .... Läuft.
                          Kann man das irgendwie an die "Optimierte" anpassen?

                          Kommentar


                            Sagt mal, der Wert "delay" sind doch sicher Millisekunden oder?

                            Kommentar


                              Richtig Delay 1000 ist 1 sek.

                              Kommentar


                                Hallo zusammen,

                                Bin jetzt auch in Smelly One Besitzer. Vielen Dank für die tolle Arbeit und die schöne Dokumentation. Insbesondere das Löten hat damit prima geklappt. Werte werden angezeigt, Frau reißt bereits alle Fenster auf .

                                Bin gerade dabei ihn in meine Visu einzubinden. Allerdings bekomme ich über den Bus keinerlei Daten. Die PA kann ich nicht anpingen, und Daten bekomme ich auch keine (auch nicht wenn ich die Temperatur im Gruppenmonitor abfrage). Muss vielleicht der Busankoppler noch programmiert werden? Mit dem Programmiertaster habe ich bisher auch noch nichts gemacht... (wozu ist der denn gut?)

                                Ist es denn möglich, die Daten zyklisch auf den KNX Bus zu senden?

                                Viele Grüße
                                Simon

                                Kommentar

                                Lädt...
                                X