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.