Problem mit esp32

Hallo,
ich habe mir aus zwei Scripten aus dem Internet einen zusammengestellt... Und kriege ständig Fehlermeldungen beim überprüfen... unter anderem: 'status' was not declared in this scope. Das ganze soll messen ob strom auf einem bestimmten port fließt und wenn ja dann eine email verschicken. Die beiden einzelnen teile des Codes haben funktioniert bis ich sie vermischt habe.
Fehlermeldung:
Arduino: 1.8.16 (Windows 10), Board: "ESP32 Dev Module, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 115200, None"

C:\Users----\Documents\Arduino\mixed\mixed.ino: In function 'void loop()':mixed:118:18: error: 'status' was not declared in this scope Serial.println(status.info()); ^Mehrere Bibliotheken wurden für "WiFi.h" gefunden Benutzt: C:\Users----\Documents\Arduino\libraries\WiFi Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\WiFi Nicht benutzt: C:\Users----\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFiMehrere Bibliotheken wurden für "ESP_Mail_Client.h" gefunden Benutzt: C:\Users----\Documents\Arduino\libraries\ESP_Mail_Client Nicht benutzt: C:\Users----\Documents\Arduino\libraries\ESP-Mail-Client-masterMehrere Bibliotheken wurden für "SD.h" gefunden Benutzt: C:\Users----\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\SD Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\SD Nicht benutzt: C:\Users----\Documents\Arduino\libraries\SDexit status 1'status' was not declared in this scope

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

das ist der code:

const int readpin = 4; 



int stromfluss = 0;



#include <ESP_Mail_Client.h>
#include <ESP_Mail_FS.h>
#include <SDK_Version_Common.h>
#include <WiFi.h>






//natürlich normalerweise richtig ausgefüllt :D
#define WIFI_SSID "wlannn"
#define WIFI_PASSWORD "super sicher "
//SMTP Serverdaten
#define SMTP_HOST "hmmmm"
#define SMTP_PORT esp_mail_smtp_port_587
//Logindaten
#define AUTHOR_EMAIL "hmmmm"
#define AUTHOR_PASSWORD "suuuper sicher "
SMTPSession smtp;
void smtpCallback(SMTP_Status status);





void setup() {
  Serial.begin(115200);  

  pinMode(readpin, INPUT);

}


void loop() {




  stromfluss = digitalRead(readpin);
  Serial.println(stromfluss);

  if (stromfluss == HIGH) {
  
    Serial.print("Succes") ;


  Serial.begin(115200);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED){
    Serial.print(".");
    delay(200);
  }

  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.println();
 
  smtp.debug(1);

  smtp.callback(smtpCallback);

  ESP_Mail_Session session;
  
  session.server.host_name = SMTP_HOST;
  session.server.port = SMTP_PORT;
  session.login.email = AUTHOR_EMAIL;
  session.login.password = AUTHOR_PASSWORD;
  session.login.user_domain = "smtp.gmail.com";
  
  if (!smtp.connect(&session)){
    return;
  }
  //Aufbau der E-Mail
  SMTP_Message message;

  message.sender.name = "Mhmmm"; 
  message.sender.email = "hmmm"; 
  message.subject = "hmmm"; 
  message.addRecipient("hmmm", "hmmm"); 
  //Aufbau des Contents der E-Mail
  String textMsg = "hmmm";
  message.text.content = textMsg.c_str();
  message.text.charSet = "utf-8";
  message.text.transfer_encoding = Content_Transfer_Encoding::enc_7bit;
  message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_low;

  message.addHeader("Message-ID: <abcde.fghij@gmail.com>");
 
  if (!MailClient.sendMail(&smtp, &message)){
   
    Serial.println("Error sending Email, " + smtp.errorReason());
  }
  ESP_MAIL_PRINTF("Free Heap: %d\n", MailClient.getFreeHeap());
} 
   else {
  
    Serial.print("hmmm");
   }

void smtpCallback(SMTP_Status status) ;
{
  Serial.println(status.info());
  if (status.success()){
    Serial.println("----------------");
    ESP_MAIL_PRINTF("Message sent success: %d\n", status.completedCount());
    ESP_MAIL_PRINTF("Message sent failled: %d\n", status.failedCount());
    Serial.println("----------------\n");
    struct tm dt;
    for (size_t i = 0; i < smtp.sendingResult.size(); i++) {
      /* Get the result item */
      SMTP_Result result = smtp.sendingResult.getItem(i);
      time_t ts = (time_t)result.timestamp;
      localtime_r(&ts, &dt);
      ESP_MAIL_PRINTF("Message No: %d\n", i + 1);
      ESP_MAIL_PRINTF("Status: %s\n", result.completed ? "success" : "failed");
      ESP_MAIL_PRINTF("Date/Time: %d/%d/%d %d:%d:%d\n", dt.tm_year + 1900, dt.tm_mon + 1, dt.tm_mday, dt.tm_hour, dt.tm_min, dt.tm_sec);
      ESP_MAIL_PRINTF("Recipient: %s\n", result.recipients);
      ESP_MAIL_PRINTF("Subject: %s\n", result.subject);
    }
    Serial.println("----------------\n");
    //smtp.sendingResult.clear();
  }
}
delay (9000) ;
}

Ihr Beitrag wurde an seinen aktuellen Speicherort verschoben, da er besser geeignet ist.

Da Du ihn aus 2 anderen zusammengesetzt hast, ist es Dein Code. :wink:
Wenn Du uns noch die komplette Fehlermeldung gibst, sparen wir uns das Suchen nach der Zeile.

Gruß Tommy

ja und in welcher Zeile hast du den so etwas wie

status

deklariert?
das gibts sicher in einem deiner anderen funktionierenden Sketche oder?

Das ist ja gerade der punkt das hier: https://draeger-it.blog/senden-von-e-mails-mit-dem-esp32-via-arduino-ide/ ist ja der email versendende teil des sketches... ich habe genau das genommen was dort war und es versucht mit dem port auslesen zu verbinden.... einzeln geht es aber zusammen nicht...

a) formatiere mal mit STRG-T in deiner IDE den Sketch.

jetzt sollen dir schon ein paar Sachen auffallen.

b) du hast ein

void smtpCallback(SMTP_Status status) ;
  {

"eingerückt" im loop. Das ist vermutlich nicht so wie es sein soll.
In einer funktion (du bist da im loop()) kannst du nicht eine neue Funktion anlegen.
Das gehört raus auf höchste Ebene.
Der Strichpunkt dahinter ist auch verdächtig - so definiert man keine Funktionen.

Weiter habe ich mir das nicht angesehen, aber deine Zusammenkopiererei passt halt nicht.

Da ist leider einiges "im Argen" :wink:

  1. Am besten erst einmal alles, was nur einmal im Programmablauf durchzuführen ist, in setup() verschieben.
  2. Danach die einzelnen Aktivitäten möglichst in einzelne Funktionen auslagern: Das verbessert die Übersicht, wann was passiert/passieren soll.
  3. Callback-Funktionen werden i.d.R. eingerichtet, um nach dem erfolgreichen (oder auch nicht) Durchlauf einer externen Funktion (hier das Versenden einer Email per smtp-Protokoll) eine Rückmeldung im eigenen Sketch erhalten zu können (vereinfacht ausgedrückt wie ein "Rückruf" = Callback auf der eigenen Telefonnummer). Sie gehören daher auf keinen Fall in die loop(), die ja vom eigenen Sketch regelmäßig durchlaufen wird.

Als Grundgerüst für eine übersichtliche Struktur hier ein (nicht lauffähiger!) Vorschlag, es fehlen die defines, includes, Deklarationen und wesentliche Teile des Codes. Es geht nur um die Strukturierung.


...

void setup(){
 // Hier alles hinein, was nur einmal definiert oder durchlaufen werden muss
Serial.begin(115200);
smtp.callback(smtpCallback);
// usw. ..
}

void EnterWifi(){
  // Hier das Einloggen ins lokale WLAN
  WiFi.begin(...)
  while (...
  // Der Sketch bleibt hier hängen, wenn das nicht klappt!
}

void LeaveWifi(){
  // Ggf. noch Serial-Ausgabe oder was sonst nach dem Mail-Senden noch durchgeführt werden soll hinzufügen ...
 Wifi.disconnect();
}

void SendMail(){
  // Hier alles, was zum Vorbereiten und Versenden der Mail benötigt wird
}

void loop(){
  stromfluss = digitalRead(readpin);
  Serial.println(stromfluss);
  if (stromfluss == HIGH) {
     Serial.print("Success") ;
     EnterWifi();
     SendMail();
     LeaveWiFi();
  }
}

void smtpCallback(SMTP_Status status) ;{
// Hier die Callback-Funktion
}

"stromfluss" ist eigentlich nicht der richtige Begriff; digitalRead() liest aus, ob eine Spannung am Pin anliegt, der "stromfluss" ist dabei eher eine kleine ohmsche Notwendigkeit. Aber ich kenne ja die genaue Anwendung dahinter auch nicht ... :wink:

Falls die Anteile vorher funktioniert haben, sollte es nach dem "Sortieren" funktionieren; auf jeden Fall sollten sich dann eventuelle Fehlerursachen zielgerichtet finden und beseitigen lassen. Ich hoffe mal, auf die Schnelle nichts Wesentliches übersehen zu haben ...

Nachtrag: Wenn der Zustand des Pins auf HIGH bleibt, sendet der ESP32 ca. 4 bis 5 Mails pro Minute (240 bis 300 pro Stunde). Ist das a) gewollt oder b) aufgrund der physikalischen Anwendung ausgeschlossen?

Viel Erfolg!

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