Forum: Compiler & IDEs brauche mal eure Hilfe, bei kleinem ESP8366 Programm


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Petersen P. (dd7lp)


Lesenswert?

Guten Tag, ich mochte mit einem Esp01 mit einem angeschlossenen Taster 
einen Schaltbefehl an meinem Router senden zu einem _Tasmota Modul
Ich habe hier ein kleines Programm, welches einen Fehler produziert beim 
Kompilieren, scheinbar ist ein Befehl innerhalb einer API nicht mehr 
aktuell
Es wäre sehr freundlich, wenn sich das mal kurz einer, mit einem 
besseren Wissen in der Programmierung als ich, anschaut.
Ich bedanke mich schon mal für eure Hilfe Gruß aus NF Christian

#include <dummy.h>

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

// WLAN-Zugangsdaten
const char* ssid = "myssid";
const char* password = "12345";

// Tasmota-Geräte-IP-Adresse
const char* tasmota_ip = "192.168.1.100"; // Feste IP-Adresse deines 
Tasmota-Moduls
const int tasmota_port = 80; // Standard-Port für HTTP
const char* toggle_command = "/cm?cmnd=Power%20Toggle"; // 
Tasmota-Toggle-Befehl

// Pin-Belegung
const int buttonPin = 2; // GPIO2 (D4 auf vielen ESP-01-Boards)

void setup() {
  // Serieller Monitor zur Debugging-Ausgabe
  Serial.begin(115200);

  // Taster-Pin als Eingang mit Pullup-Widerstand konfigurieren
  pinMode(buttonPin, INPUT_PULLUP);

  // Verbindung mit dem WLAN herstellen
  Serial.print("Verbinde mit WLAN...");
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWLAN verbunden!");
  Serial.print("IP-Adresse: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  // Prüfen, ob der Taster gedrückt wurde
  if (digitalRead(buttonPin) == LOW) {
    // Taster wurde gedrückt
    Serial.println("Taster gedrückt! Sende Toggle-Befehl...");

    // HTTP-Anfrage an das Tasmota-Gerät senden
    if (WiFi.status() == WL_CONNECTED) {
      HTTPClient http;
      String url = String("http://";) + tasmota_ip + toggle_command;

      http.begin(url);
      int httpCode = http.GET();

      if (httpCode > 0) {
        Serial.printf("HTTP-Antwort: %d\n", httpCode);
        String payload = http.getString();
        Serial.println("Antwort:");
        Serial.println(payload);
      } else {
        Serial.printf("Fehler bei HTTP-Anfrage: %s\n", 
http.errorToString(httpCode).c_str());
      }

      http.end();
    } else {
      Serial.println("Nicht mit WLAN verbunden!");
    }

    // Kurze Verzögerung, um mehrere Auslösungen zu vermeiden
    delay(500);
  }
}

von Εrnst B. (ernst)


Lesenswert?

"[ c ]" -Tags machen den Quelltext besser lesbar, und verhindern 
ungewollte Änderungen/Formatierungen daran.

Petersen P. schrieb:

> String url = String("http://";;) + tasmota_ip + toggle_command;

Der Strichpunkt im String()-Konstruktor ist falsch.
Hat evtl. die Forensoftware eingebaut? Ansonsten hätte dein Compiler 
gemeckert.


Ansonsten: Verrate die Fehlermeldung, und welche Versionen du einsetzt.
Sonst müssen wir jede Methode aus deinem Code mit jeder Dokumentation 
aus jeder Framework-Version der letzten Jahre vergleichen, und sind 
nächstes Jahr noch nicht fertig.

: Bearbeitet durch User
von Petersen P. (dd7lp)


Lesenswert?

Danke für die schnelle Rückantwort.
hier noch einmal der Code
*********************************************************************
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

// WLAN-Zugangsdaten
const char* ssid = "MEIN_WLAN_SSID";
const char* password = "DEIN_WLAN_PASSWORT";

// Tasmota-Geräte-IP-Adresse
const char* tasmota_ip = "192.168.1.100"; // Feste IP-Adresse deines 
Tasmota-Moduls
const int tasmota_port = 80; // Standard-Port für HTTP
const char* toggle_command = "/cm?cmnd=Power%20Toggle"; // 
Tasmota-Toggle-Befehl

// Pin-Belegung
const int buttonPin = 2; // GPIO2 (D4 auf vielen ESP-01-Boards)

// HTTPClient-Objekt global deklarieren
HTTPClient http;

void setup() {
  // Serieller Monitor zur Debugging-Ausgabe
  Serial.begin(115200);

  // Taster-Pin als Eingang mit Pullup-Widerstand konfigurieren
  pinMode(buttonPin, INPUT_PULLUP);

  // Verbindung mit dem WLAN herstellen
  Serial.print("Verbinde mit WLAN...");
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWLAN verbunden!");
  Serial.print("IP-Adresse: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  // Prüfen, ob der Taster gedrückt wurde
  if (digitalRead(buttonPin) == LOW) {
    // Taster wurde gedrückt
    Serial.println("Taster gedrückt! Sende Toggle-Befehl...");

    // HTTP-Anfrage an das Tasmota-Gerät senden
    if (WiFi.status() == WL_CONNECTED) {
      String url = String("http://";) + tasmota_ip + toggle_command;

      http.begin(url);
      int httpCode = http.GET();

      if (httpCode > 0) {
        Serial.printf("HTTP-Antwort: %d\n", httpCode);
        String payload = http.getString();
        Serial.println("Antwort:");
        Serial.println(payload);
      } else {
        Serial.printf("Fehler bei HTTP-Anfrage: %s\n", 
http.errorToString(httpCode).c_str());
      }

      http.end();
    } else {
      Serial.println("Nicht mit WLAN verbunden!");
    }

    // Kurze Verzögerung, um mehrere Auslösungen zu vermeiden
    delay(500);
  }
}
********************************************************************
Der Fehler liegt scheinbar in der Zeile mit dem Befehl
 http.begin(url);
Dort meckert der Compiler von Arduino
Ich verwende dort die Version IDE 2.3.1
Scheinbar gibt es dort einen neuen Befehl in einer Library
siehe Fehlercode
******************************************************************
C:\Users\dd7lp\Documents\Arduino\esp01_schalter_jan23a\esp01_schalter_ja 
n23a.ino:  In function 'void loop()':
C:\Users\dd7lp\Documents\Arduino\esp01_schalter_jan23a\esp01_schalter_ja 
n23a.ino:49:17:  error: call to 'HTTPClient::begin' declared with 
attribute error: obsolete API, use ::begin(WiFiClient, url)
   49 |       http.begin(url);
      |       ~~~~~~~~~~^~~~~

exit status 1

Compilation error: call to 'HTTPClient::begin' declared with attribute 
error: obsolete API, use ::begin(WiFiClient, url)
************************************************************************ 
*
Ich bin nicht so bewandert und komme meist so gerade durch mit dem 
bedienen vom Compiler.

Ich wollte mit einen ESP01 mit angeschlossenem Taster einen Schaltbefehl 
an ein Tasmota Modul ausführen, das damit die Außenbeleuchtung bei mir 
ein und ausschaltet- Alo das kleine Ding wie eine Fernbedienung 
benutzen.
Gruß Christian
Dankeschön aber für deine Hilfe
Gruß Christian

von Εrnst B. (ernst)


Lesenswert?

Bitte vor die erste Zeile vom Code ein '[ c]'
und nach die letzte Zeile vom Code ein '[ /c]' (jeweils ohne 
Leerzeichen).
1
#include <ESP8266WiFi.h>
2
#include <ESP8266HTTPClient.h>
3
4
// WLAN-Zugangsdaten
5
const char* ssid = "MEIN_WLAN_SSID";
6
const char* password = "DEIN_WLAN_PASSWORT";
7
8
// Tasmota-Geräte-IP-Adresse
9
const char* tasmota_ip = "192.168.1.100"; // Feste IP-Adresse deines
...

Schaut doch gleich viel schöner aus, oder?

Wenn das zu kompliziert ist, das File als Dateianhang.


Ansonsten, genau das Ändern, was in der Fehlermeldung steht, "use 
::begin(WiFiClient, url)"
1
 http.begin(url);
2
// Ändern zu
3
 http.begin(wifiClient, url);
und oben ergänzen:
1
// HTTPClient-Objekt global deklarieren
2
HTTPClient http;
3
// Neu: Gobaler WiFiClient...
4
WiFiClient wifiClient;

: Bearbeitet durch User
von Petersen P. (dd7lp)


Lesenswert?

Danke für den Hinweis, den Befehl hatte ich auch schon geändert, 
trotzdem meckert der Compiler.
**********************************************************************
C:\Users\dd7lp\Documents\Arduino\esp01_schalter_jan23a\esp01_schalter_ja 
n23a.ino:  In function 'void loop()':
C:\Users\dd7lp\Documents\Arduino\esp01_schalter_jan23a\esp01_schalter_ja 
n23a.ino:49:28:  error: expected primary-expression before ',' token
   49 |       http.begin(WiFiClient,url);
      |                            ^

exit status 1

Compilation error: expected primary-expression before ',' token
**********************************************************************
kann das seîn, das meine Library für den ESP8266 nicht auf dem Stand ist 
`??
mh , irgendwie geht das nicht rund
Gruß Christian und danke für deine Mühe

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Petersen P. schrieb:
> http.begin(WiFiClient,url);

Schau dir nochmal den Vorschlag von Ernst an. WiFiClient ist nicht 
wifiClient. Die Groß/Klein-Schreibung ist nicht egal.

von Petersen P. (dd7lp)


Lesenswert?

Ja, hatte ich auch schon probiert, ich weiß, dass die Schreibweise nicht 
egal ist.
Hat aber trotzdem nichts genutzt
Gruß Christian

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Petersen P. schrieb:
> Hat aber trotzdem nichts genutzt

Zeige den Quelltext und die Fehlermeldung.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.