brauche mal eure Hilfe, bei kleinem ESP8366 Programm

#7816249
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...");

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

6
  http.begin(url);
7
  int httpCode = http.GET();
8

9
  if (httpCode > 0) {
10
    Serial.printf("HTTP-Antwort: %d\n", httpCode);
11
    String payload = http.getString();
12
    Serial.println("Antwort:");
13
    Serial.println(payload);
14
  } else {
15
    Serial.printf("Fehler bei HTTP-Anfrage: %s\n", http.errorToString(httpCode).c_str());
16
  }
17

18
  http.end();
19
} else {
20
  Serial.println("Nicht mit WLAN verbunden!");
21
}
22

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

} }

#7816262
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.

#7816275
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...");

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

5
  http.begin(url);
6
  int httpCode = http.GET();
7

8
  if (httpCode > 0) {
9
    Serial.printf("HTTP-Antwort: %d\n", httpCode);
10
    String payload = http.getString();
11
    Serial.println("Antwort:");
12
    Serial.println(payload);
13
  } else {
14
    Serial.printf("Fehler bei HTTP-Anfrage: %s\n", http.errorToString(httpCode).c_str());
15
  }
16

17
  http.end();
18
} else {
19
  Serial.println("Nicht mit WLAN verbunden!");
20
}
21

22
// Kurze Verzögerung, um mehrere Auslösungen zu vermeiden
23
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_jan23a.ino: In function 'void loop()': C:\Users\dd7lp\Documents\Arduino\esp01_schalter_jan23a\esp01_schalter_jan23a.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

#7816278
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;
#7816301
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_jan23a.ino: In function 'void loop()': C:\Users\dd7lp\Documents\Arduino\esp01_schalter_jan23a\esp01_schalter_jan23a.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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren