Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit neuen thelsing / knx Stack Versionen und ESP32 / ESP8266

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

    #46
    Danke für eure Antworten 😉schön das es so ein Forum gibt 🙂

    Das ist dein Problem. Der Fehler sagt, dass entweder der UART zwischen ESP32 und BCU "nicht tut" oder die BCU sich nicht meldet -> "kaputt"

    zu 1.) UART
    • hast du auch Rx auf Tx verbunden? // Ja habe es mehrfach geprüft
    • Hast du bedacht, dass der ESP32 mit 3.3V läuft und die BCU mit 5V? Du benötigst dafür definitiv einen Levelschifter. Wenn keiner drin ist, dann überfährst du den ESP32 RX bin. Der möchte normalerweise maximal 3.3V + 0.3V sehen, du gibst ihm aber die vollen 5V. Ob er gleich kaputt geht, kommt immer darauf an wie "robust" sein Eingang ist und wie Start die BCU die 5V treiben kann. Im schlimmsten Fall hast du den ESP32 RX Pin "zerstört".
    • // Pegelwandler ist vorhanden von 5V auf 3,3 und umgekehrt.
    zu 2.) "kaputt" // Alle komponeten schon mal durch ersatz getauscht leider kein Erfolg
    • Da kann man nicht viel machen, außer alles mal tauschen und schauen ob es sich ändert. Aber dann bitte wenn nicht schon vorhanden mit Levelshifter :-)

    Kommentar


      #47
      UART zwischen MCU und BCU ? // ja genau
      Mein Programmcode und ich arbeite mit VSCode :

      Code:
      [HASHTAG="t3042"]include[/HASHTAG] <Arduino.h>
      [HASHTAG="t3042"]include[/HASHTAG] <knx.h>
      [HASHTAG="t3042"]include[/HASHTAG] <knx/bau07B0.h>
      [HASHTAG="t3042"]include[/HASHTAG] <SPI.h>
      [HASHTAG="t3042"]include[/HASHTAG] "cactus_io_BME280_SPI.h"
      
      #define BME_SCK 21 // Serial Clock
      #define BME_MISO 23 // Serial Data Out
      #define BME_MOSI 22 // Serial Data In
      #define BME_CS 19 // Chip Select
      // #define ARDUINO_ARCH_ESP32
      #ifdef ARDUINO_ARCH_ESP8266
      [HASHTAG="t3042"]include[/HASHTAG] <WiFiManager.h>
      #endif
      
      #define LED_RED 3
      #define LED_GREEN 4
      #define LED_BLUE 5
      #define KNX_RX2 22
      #define KNX_TX2 23
      // #define KNX_RX1 6
      // #define KNX_TX1 7
      #define myButton 15
      
      // create named references for easy access to group objects
      #define goCurrent knx.getGroupObject(1)
      #define goMax knx.getGroupObject(2)
      #define goMin knx.getGroupObject(3)
      #define goReset knx.getGroupObject(4)
      
      // If you don't want a global knx object, for example because you want
      // to more finely control it's construction, this is an example
      // of how to do so. Define KNX_NO_AUTOMATIC_GLOBAL_INSTANCE
      // and then you can DIY a knx object as shown below. In this case we use
      // the ESP32's secondary UART and late-bind the ISR function in setup().
      
      Esp32Platform knxPlatform(&Serial2);
      Bau07B0 knxBau(knxPlatform);
      KnxFacade<Esp32Platform, Bau07B0> knx(knxBau);
      
      // Create the BME280 object
      // BME280_SPI bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
      
      const unsigned long cycleTime = 5000; // millisekunden!
      volatile bool pressed = false;
      
      ICACHE_RAM_ATTR void myButtonPressed()
      {
      // Debounce
      static unsigned long lastpressed = 0;
      if (millis() - lastpressed > 200)
      {
      knx.toggleProgMode();
      pressed = true;
      lastpressed = millis();
      digitalWrite(LED_RED, HIGH);
      }
      }
      
      float currentValue = 0;
      float maxValue = 0;
      float minValue = RAND_MAX;
      long lastsend = 0;
      
      void measureTemp()
      {
      int r = rand();
      currentValue = (r * 1.0) / (RAND_MAX * 1.0);
      currentValue *= 100 * 100;
      Serial.println("Temp is: " + String(currentValue));
      
      goCurrent.value(currentValue);
      
      if (currentValue > maxValue)
      {
      maxValue = currentValue;
      goMax.value(maxValue);
      }
      
      if (currentValue < minValue)
      {
      minValue = currentValue;
      goMin.value(minValue);
      }
      }
      
      // callback from reset-GO
      void resetCallback(GroupObject &go)
      {
      if (go.value())
      {
      maxValue = 0;
      minValue = 10000;
      }
      }
      
      void setup()
      { // pin or GPIO programming button is connected to. Default is 0
      knx.buttonPin(myButton);
      
      pinMode(myButton, INPUT_PULLUP);
      pinMode(LED_RED, OUTPUT);
      knx.setButtonISRFunction(myButtonPressed);
      attachInterrupt(myButton, myButtonPressed, FALLING);
      Serial.begin(115200);
      
      ArduinoPlatform::SerialDebug = &Serial;
      
      Serial2.begin(19200, SERIAL_8E1, KNX_RX2, KNX_TX2); // KNX, pin 14,13 on EPS32_PICO
      Serial.println("\nSerial2 initialized!\n");
      // while (true)
      // {
      // Serial2.write(0x55);
      // delay(25);
      // if (Serial2.available())
      // {
      // Serial.print(Serial2.read(), HEX);
      // }
      // }
      
      // pin or GPIO programming button is connected to. Default is 0
      
      randomSeed(millis());
      
      #ifdef ARDUINO_ARCH_ESP8266
      WiFiManager wifiManager;
      wifiManager.autoConnect("knx-demo");
      #endif
      Serial.println("knx.readMemory()");
      // read adress table, association table, groupobject table and parameters from eeprom
      knx.readMemory();
      // while (1)
      // ;
      // print values of parameters if device is already configured
      if (knx.configured())
      {
      // register callback for reset GO
      goReset.callback(resetCallback);
      goReset.dataPointType(DPT_Trigger);
      goCurrent.dataPointType(DPT_Value_Temp);
      goMin.dataPointType(DPT_Value_Temp);
      goMax.dataPointType(DPT_Value_Temp);
      
      Serial.print("Timeout: ");
      Serial.println(knx.paramByte(0));
      Serial.print("Zykl. senden: ");
      Serial.println(knx.paramByte(1));
      Serial.print("Min/Max senden: ");
      Serial.println(knx.paramByte(2));
      Serial.print("Aenderung senden: ");
      Serial.println(knx.paramByte(3));
      Serial.print("Abgleich: ");
      Serial.println(knx.paramByte(4));
      }
      
      // pin or GPIO the programming led is connected to. Default is LED_BUILTIN
      knx.ledPin(LED_GREEN);
      // is the led active on HIGH or low? Default is LOW
      knx.ledPinActiveOn(HIGH);
      
      // start the framework.
      knx.start();
      }
      
      void loop()
      {
      static unsigned long lastTime;
      // don't delay here to much. Otherwise you might lose packages or mess up the timing with ETS
      knx.loop();
      
      if (pressed)
      {
      Serial.println("Button = " + String(pressed));
      pressed = false;
      digitalWrite(LED_RED, LOW);
      }
      // only run the application code if the device was configured with ETS
      if (!knx.configured())
      return;
      if (millis() - lastTime > cycleTime)
      {
      measureTemp();
      lastTime = millis();
      }
      }
      Zuletzt geändert von Ing-Dom; 14.06.2022, 17:57. Grund: code tags added

      Kommentar


        #48
        Hi,

        habe es gerad emal mit dem knx-demo-diy.ino getestet was ja deinem Code in etwa entspricht und an den ESP32 per Serial2 die microbcu angeschlossen, bei mir geht es auch nicht, glaube es liegt nicht an deinem code. RX und TX habe ich natürlich gedreht. Getestet ohne isolierung.

        Gruß
        RObert

        Auf der Seriellen console sieht das so aus:

        clk_drv:0x0readMemory
        RESTORED FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
        DataObject api changed, any data stored in flash is invalid.
        expexted DataObject api version: 1, stored api version: FFFF
        ETS has to reprogram PA and application!
        ownaddr FFFF
        progmode on
        input buffer overrun: 11
        input buffer overrun: 11
        input buffer overrun: 9
        input buffer overrun: 11
        input buffer overrun: 9
        input buffer overrun: 9
        progmode off
        progmode on
        input buffer overrun: 9
        Zuletzt geändert von jeff25; 14.06.2022, 19:20.

        Kommentar


          #49
          wie wärs mal mit einem Test mit der Default-Serial mit den Default-Pins ?
          OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

          Kommentar


            #50
            Hallo jeff25 danke dann kann ich ja die Hardware eigentlich ausschließen. Habe schon zahlreiche Controller getestet 😅 ja genau die knx-demo-diy.ino war es und dann auf den serial 2 umgeschrieben.
            Ing-Dom bevor wir es auf serial 2 umgestellt haben haben wir auch den serial 1 getestet ohne Erfolg.
            Mit dem Atmega pro nano 5 Volt und der anderen Lib habe ich schon senden und empfangen können.​
            Jeff programmierst du auch mit VSCode und platformIO ? und welcher code aus den Beispielen läuft bei dir ?
            Danke euch nochmals ☺
            Ich werde Luftsprünge machen bekomme ich das mit der PA hin 😂
            Zuletzt geändert von Kingside; 15.06.2022, 09:51.

            Kommentar


              #51
              Ja ich nutze auch VSC. Ich habe mal zum test den Wert von tpuart_data_link_layer.cpp

              #define OVERRUN_COUNT 7 //bytes; max. allowed bytes in receive buffer (on start) to see it as overrun
              höher gesetzt dann ging es zumindest das das Modul in der ETS auftaucht aber ich weis was eine Lösung wäre.

              Gruß
              Robert

              Kommentar


                #52
                Zitat von SirSydom Beitrag anzeigen
                wie wärs mal mit einem Test mit der Default-Serial mit den Default-Pins ?
                ich nutze Serial2 da es keinen Serial1 bei meinem ESP32 dev Modul gibt.

                Kommentar


                  #53
                  jeff25 aber ich weis was eine Lösung wäre ? // das bekomme ich jetzt schonmal im Monitor nachdem ich den buffer auf 32 gestellt habe.

                  knx.readMemory()
                  readMemory
                  RESTORED FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
                  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
                  DataObject api changed, any data stored in flash is invalid.
                  expexted DataObject api version: 1, stored api version: FFFF
                  ETS has to reprogram PA and application!
                  ERROR, TPUART not responding
                  ets Jun 8 2016 00:22:57

                  rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
                  configsip: 0, SPIWP:0xee
                  clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd _drv:0x00,wp_drv:0x00
                  modeIO, clock div:2
                  load:0x3fff0018,len:4
                  load:0x3fff001c,len:1044
                  load:0x40078000,len:8896
                  load:0x40080400,len:5828
                  entry 0x400806ac

                  Serial2 initialized!

                  knx.readMemory()
                  readMemory
                  RESTORED FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
                  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
                  DataObject api changed, any data stored in flash is invalid.
                  expexted DataObject api version: 1, stored api version: FFFF
                  ETS has to reprogram PA and application!
                  ERROR, TPUART not responding
                  Button = 1
                  progmode on
                  Button = 1
                  progmode off
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got UNEXPECTED: 0xFE
                  got U_RESET_IND
                  got UNEXPECTED: 0xFE
                  got UNEXPECTED: 0x2
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got U_CONFIGURE_IND: 0x1
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  unexpected L_DATA_CON
                  got U_CONFIGURE_IND: 0xD
                  got UNEXPECTED: 0xFE
                  got U_CONFIGURE_IND: 0x9
                  got UNEXPECTED: 0xFE
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got U_CONFIGURE_IND: 0x1
                  got L_ACKN_IND
                  got U_CONFIGURE_IND: 0x1
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got U_CONFIGURE_IND: 0x1
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got L_ACKN_IND
                  got UNEXPECTED: 0xFE
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got L_ACKN_IND
                  got L_ACKN_IND
                  got UNEXPECTED: 0xFE
                  got U_RESET_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got U_RESET_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got U_STATE_IND:
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got U_CONFIGURE_IND: 0x1
                  got U_STATE_IND: SC RE TE PE TW
                  got U_RESET_IND
                  got U_CONFIGURE_IND: 0xD
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got UNEXPECTED: 0xFE
                  got UNEXPECTED: 0x2
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got U_RESET_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got UNEXPECTED: 0x2
                  got U_STATE_IND: SC RE TE PE TW
                  got U_STATE_IND:
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got U_CONFIGURE_IND: 0x1
                  got UNEXPECTED: 0xFE
                  got L_ACKN_IND
                  got UNEXPECTED: 0xFE
                  got L_ACKN_IND
                  got UNEXPECTED: 0xFE
                  got L_ACKN_IND
                  got U_CONFIGURE_IND: 0x1
                  got UNEXPECTED: 0xFE
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got UNEXPECTED: 0xFE
                  got L_ACKN_IND
                  got UNEXPECTED: 0xFE
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got L_ACKN_IND
                  got U_STATE_IND: SC RE TE PE TW
                  got U_CONFIGURE_IND: 0x1
                  got U_STATE_IND: SC RE TE PE TW
                  got U_CONFIGURE_IND: 0x1
                  got U_STATE_IND: SC RE TE PE TW
                  got U_CONFIGURE_IND: 0x1
                  Zuletzt geändert von Kingside; 15.06.2022, 16:16.

                  Kommentar


                    #54
                    Zitat von Kingside Beitrag anzeigen
                    ERROR, TPUART not responding
                    Hi,

                    diese Meldung sagt, dass der TPUART nicht vom KNX-Stack erkannt wird. Dann kann er auch nicht mit dem KNX kommunizieren. Ich kann Dir aber nicht sagen, was man da beim ESP32 machen muss. Beim RP2040 kann man die Pins setzen
                    Code:
                    #ifdef ARDUINO_ARCH_RP2040
                        Serial1.setRX(KNX_UART_RX_PIN);
                        Serial1.setTX(KNX_UART_TX_PIN);
                    #endif
                    Aber das wird beim ESP32 sicher so nicht funktionieren. jeff25 Bei Dir war die UART-Medung nicht da, ihr solltet nochmal vergleichen, warum nicht.

                    Gruß, Waldemar

                    P.S.: Sorry, bin im Urlaub, kann hier nur selten reinschauen.
                    OpenKNX www.openknx.de

                    Kommentar


                      #55
                      Danke Mumpf,

                      also bei ESP32 scheint das so definiert zu werden:


                      #define RXD2 16
                      #define TXD2 17
                      void setup() {
                      // Note the format for setting a serial port is as follows:
                      Serial2.begin(baud-rate, protocol, RX pin, TX pin);

                      Kommentar


                        #56
                        Danke Robert ,danke Waldemar , danke SirSydom
                        so mit Serial 2 auf pin 16 und 17 hat es endlich geklappt die PA zu übertragen 😁 (WEMOS32Bat)
                        ESP32 Pico würde nicht gehen da Pin 16 und 17 am externen Flash angeschlossen ist.
                        Zuletzt geändert von Kingside; 15.06.2022, 17:56.

                        Kommentar


                          #57
                          hast du den buffer wieder normal zurückgestellt?

                          was hast du als Protokoll verwendet?

                          Serial2.begin(19200, protocol, 16, 17);

                          Kommentar


                            #58
                            Zitat von Kingside Beitrag anzeigen
                            so mit Serial 2 auf pin 16 und 17 hat es endlich geklappt
                            hast du mehr geändert als diese beiden Zeilen?

                            Code:
                            #define KNX_RX2 22 #define KNX_TX2 23
                            OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

                            Kommentar


                              #59
                              Benötige ich das serian2.beginn garnicht und muss nur die Ports angeben?

                              Reicht das?


                              Define KNX_RX2 16
                              Define KNX2_TX2 17
                              Viele Grüße Robert

                              Kommentar


                                #60
                                Leute, schaut doch mal in den Code!

                                Die Esp32Plattform erbt die Serial Methoden von der Arduino-Platform.
                                Man übergibt einfach einen Zeiger auf die Serial (in diesem Fall Serial2).
                                Den rest macht die Plattform.
                                Wie dann bei der Serial die Pins definiert werden, ist dann Sache des entsprechenden Arduino-Cores.

                                Bei RP2040 würde man das mit setRx und setTx machen.

                                Ich könnte mir vorstellen das

                                Code:
                                #define KNX_RX2 22 #define KNX_TX2 23
                                keine Wirkung hat, da defines auf den sketch begrenzt sind und nicht in die serial-Lib hineinreichen.

                                ich hab grad mal nachgesehen (esp32 ist nicht meine Plattform! nie benutzt) - man muss serial.begin mit den entsprechenden pins aufrufen, also z.B. so:

                                Code:
                                #define RXD2 16
                                #define TXD2 17
                                Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);

                                das macht aber die esp32plattform nicht: https://github.com/thelsing/knx/blob...rm.cpp#L49-L54

                                => man muss die ESP32Plattform so anpassen, dass man die Pins im Konstruktor der Plattform festlegen kann.
                                OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

                                Kommentar

                                Lädt...
                                X