Programm funktioniert nicht mehr

Hallo,
Wie haben ja schon mehrfach Fragen zu unserem CO2-Ampel-Projekt gestellt. Zuletzt hatte der Code dann auch einwandfrei funktioniert. Als wir jedoch versucht haben das Programm wieder in Betrieb zunehmen bekamen wir eine ziemlich lange Fehlermeldung:

Arduino: 1.8.19 (Windows Store 1.8.57.0) (Windows 10), Board: "ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, Core 1, Core 1, None"





















c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o:(.literal._Z5setupv+0x1c): undefined reference to `SoftwareSerial::begin(unsigned int, SoftwareSerialConfig, signed char, signed char, bool, int, int)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o:(.literal._Z5setupv+0x20): undefined reference to `MHZ19::begin(Stream&)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o:(.literal._Z5setupv+0x24): undefined reference to `MHZ19::autoCalibration(bool, unsigned char)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o:(.literal._Z4loopv+0xc): undefined reference to `MHZ19::getCO2(bool, bool)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o:(.literal.startup._GLOBAL__sub_I_myMHZ19+0x8): undefined reference to `SoftwareSerial::SoftwareSerial(signed char, signed char, bool)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o:(.literal.exit._GLOBAL__sub_D_myMHZ19+0x0): undefined reference to `SoftwareSerial::~SoftwareSerial()'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o: in function `SoftwareSerial::begin(unsigned int, SoftwareSerialConfig)':

S:\Elektro\2.AJ (=3.LJ) 2021-22\Jonathan Haan\Co2-Messgerät\Programme\ohne_Wlan/SoftwareSerial.h:119: undefined reference to `SoftwareSerial::begin(unsigned int, SoftwareSerialConfig, signed char, signed char, bool, int, int)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o: in function `setup()':

S:\Elektro\2.AJ (=3.LJ) 2021-22\Jonathan Haan\Co2-Messgerät\Programme\ohne_Wlan/ohne_Wlan.ino:25: undefined reference to `MHZ19::begin(Stream&)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: S:\Elektro\2.AJ (=3.LJ) 2021-22\Jonathan Haan\Co2-Messgerät\Programme\ohne_Wlan/ohne_Wlan.ino:25: undefined reference to `MHZ19::autoCalibration(bool, unsigned char)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o: in function `loop()':

S:\Elektro\2.AJ (=3.LJ) 2021-22\Jonathan Haan\Co2-Messgerät\Programme\ohne_Wlan/ohne_Wlan.ino:44: undefined reference to `MHZ19::getCO2(bool, bool)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: S:\Elektro\2.AJ (=3.LJ) 2021-22\Jonathan Haan\Co2-Messgerät\Programme\ohne_Wlan/ohne_Wlan.ino:46: undefined reference to `MHZ19::getCO2(bool, bool)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: S:\Elektro\2.AJ (=3.LJ) 2021-22\Jonathan Haan\Co2-Messgerät\Programme\ohne_Wlan/ohne_Wlan.ino:53: undefined reference to `MHZ19::getCO2(bool, bool)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: S:\Elektro\2.AJ (=3.LJ) 2021-22\Jonathan Haan\Co2-Messgerät\Programme\ohne_Wlan/ohne_Wlan.ino:55: undefined reference to `MHZ19::getCO2(bool, bool)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: S:\Elektro\2.AJ (=3.LJ) 2021-22\Jonathan Haan\Co2-Messgerät\Programme\ohne_Wlan/ohne_Wlan.ino:79: undefined reference to `MHZ19::getCO2(bool, bool)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o:S:\Elektro\2.AJ (=3.LJ) 2021-22\Jonathan Haan\Co2-Messgerät\Programme\ohne_Wlan/ohne_Wlan.ino:84: more undefined references to `MHZ19::getCO2(bool, bool)' follow

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o: in function `_GLOBAL__sub_I_myMHZ19':

S:\Elektro\2.AJ (=3.LJ) 2021-22\Jonathan Haan\Co2-Messgerät\Programme\ohne_Wlan/ohne_Wlan.ino:15: undefined reference to `SoftwareSerial::SoftwareSerial(signed char, signed char, bool)'

c:/users/schueler/documents/arduinodata/packages/esp32/tools/xtensa-esp32-elf-gcc/gcc8_4_0-esp-2021r2/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: sketch\ohne_Wlan.ino.cpp.o: in function `_GLOBAL__sub_D_myMHZ19':

S:\Elektro\2.AJ (=3.LJ) 2021-22\Jonathan Haan\Co2-Messgerät\Programme\ohne_Wlan/ohne_Wlan.ino:15: undefined reference to `SoftwareSerial::~SoftwareSerial()'

collect2.exe: error: ld returned 1 exit status

exit status 1

Fehler beim Kompilieren für das Board ESP32 Dev Module.



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

Da scheint irgendwas mit den Header-Datein nicht zustimmen. Aber wir kommen leider nicht drauf, was kaputt ist...

Liebe Grüße und schonmal danke für die Hilfe!


#include "MHZ19.h"                                     
#include "SoftwareSerial.h"                                    


#define RX_PIN 33                                          // Rx pin which the MHZ19 Tx pin is attached tozh
#define TX_PIN 32                                          // Tx pin which the MHZ19 Rx pin is attached to
#define BAUDRATE 9600                                      // Device to MH-Z19 Serial baudrate (should not be changed)
#define LED_gruen 21
#define LED_gelb 19
#define LED_rot 18
#define dhtPin 4                                          // verbunden mit Data-Pin des DHT22

MHZ19 myMHZ19;                                             // Constructor for library
SoftwareSerial mySerial(RX_PIN, TX_PIN);                   // create device to MH-Z19 serialh



void setup()
{
   
 Serial.begin(115200);                                   // Datenrate serieller Monitor
   
 mySerial.begin(BAUDRATE);                               // (Uno example) device to MH-Z19 serial start   
 myMHZ19.begin(mySerial);                                // *Serial(Stream) refence must be passed to library begin(). 

 myMHZ19.autoCalibration(true);                              // Turn auto calibration ON (OFF autoCalibration(false))

           
//Ausgänge definieren

 pinMode(LED_gruen,OUTPUT );
 pinMode(LED_gelb,OUTPUT );
 pinMode(LED_rot,OUTPUT );  
 }

unsigned long getDataTimer = 0;
    
void loop()
{

  if (millis() - getDataTimer >= 1000)
    {
  int  CO2 = myMHZ19.getCO2();                             // Request CO2 (as ppm)
  Serial.print("CO2 (ppm): ");                      
  Serial.println(CO2);Serial.println("\t");                                                       
  getDataTimer = millis();
    }

  if (myMHZ19.getCO2() > 2000 )                            // unter 1000 ppm
    {
   digitalWrite(LED_rot, HIGH);
   delay(50);
   digitalWrite(LED_rot, LOW);  
   delay(500);
    }
  else if ( myMHZ19.getCO2() >= 1000 &&  myMHZ19.getCO2() < 2000)                              //über 1000 ppm
    {
   digitalWrite(LED_rot, HIGH);
    }
  else {
    digitalWrite(LED_rot, LOW);
    } 
 

  

    
 
  if (800 <= myMHZ19.getCO2() && 1000 > myMHZ19.getCO2() ) // über 800 ppm
    {
   digitalWrite(LED_gelb, HIGH);
    }
  else {
   digitalWrite(LED_gelb, LOW); 
    }
   

  if (myMHZ19.getCO2() < 800 )                            // unter 800 ppm
    {
   digitalWrite(LED_gruen, HIGH);
    }
  else {
   digitalWrite(LED_gruen, LOW);

    }
   












}

Soweit mir bekannt, ist SoftwareSerial für ESP32 Dev Module nicht verfügbar.

Deine Fehlermeldungen passen nicht zum Sketch

Beispiel: "...ohne_Wlan.ino:84: more undefined references to `MHZ19::getCO2(bool, bool)' follow"

In der Zeile 84 steht nichts drin, das ist die Zeile vor der vorletzten schließenden Klammer.
In Zeile 78 wird zum letzten Mal im Sketch "myMHZ19.getCO2()" aufgerufen.

Vlt wäre es mal günstiger die sinnlosen Leerzeilen zu entfernen. Hilft nicht gegen den Fehler, macht aber den Sketch lesbarer.

Kompilieren geht definitiv fehler- und warnungsfrei.
Allerdings fürn Arduino - Vielleicht geht ja irgendwas nicht mit:

Aber da sollen sich die Spezis mal einlesen....

Für den ESP32 gibt es eine eigene SoftwareSerial-Library.

Aber warum überhaupt SoftwareSerial ? Der ESP32 hat doch 2 freie HardwareSerial.
Warum verwendest du nicht die ?

Wir kennen uns eigentlich garnicht mit dem Thema aus und machen das nur im Rahmen unserer Elektriker-Ausbildung. Daher ist der Code auch größten Teils kopiert... wir verstehen gar nicht so richtig, wie das alles funktioniert :sweat_smile:

Was müsste ich den tun, um einen von den hardwareserials zu benutzen?

Eine Beschreibung findest du hier.

Dies ist ein Beispiel zum Einfügen in deinen Sketch:

// Definieren
#include <HardwareSerial.h>
HardwareSerial myHWSerial_1(1);

// UART1 HW-Pins
#define RX_HW_PIN    32                                // UART RX Serial1
#define TX_HW_PIN    33                                // UART TX Serial1



// Im Setup
myHWSerial_1.begin( 9600, SERIAL_8N1, RX_HW_PIN, TX_HW_PIN);  // speed, type, TX, RX 

In der Arduino-IDE sind Serial1 und Serial2 bekannt, in der Grafik mit U1RXD/U1TXD und U2RXD/U2TXD benannt.

  • Serial2 an G16/G17 wird wie Serial verwendet:
//  ESP32 UART2 RX = GPIO16
//  ESP32 UART2 TX = GPIO17
void setup()
{
  Serial2.begin(9600);
...
}
  • Serial1 ist mit Pins verbunden, an denen Flash-Speicher angeschlossen ist. Die Pins müssen daher an freie Pins verlegt werden:
//  ESP32 UART1 RX = GPIO12
//  ESP32 UART1 TX = GPIO13
void setup()
{
  Serial1.begin(9600,SERIAL_8N1,12,13);
...
}

Man hat also beim ESP32 zwei freie HardwareSerial zur Verfügung.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.