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); } }
"[ 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
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
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
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
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.
Ja, hatte ich auch schon probiert, ich weiß, dass die Schreibweise nicht egal ist. Hat aber trotzdem nichts genutzt Gruß Christian
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.