ich versuche aus zwei Sketchen eins zu machen und verstehe eine Fehlermeldung nicht:
exit status 1
call to 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, host, port, uri)
#define VZsenden // Die Daten werden an die Volkszähler Middleware gesendet (kann man auskommentieren zum offline testen)
#define MQTTsenden // Die Daten werden an den MQTT Broker gesendet (kann man auskommentieren zum offline testen)
//#define AUSGABE
#include <AsyncMqtt_Generic.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <INA226_WE.h>
#define I2C_ADDRESS 0x40
ESP8266WiFiMulti WiFiMulti;
INA226_WE ina226 = INA226_WE(I2C_ADDRESS);
String url_temp;
float shuntVoltage_mV = 0.0;
float loadVoltage_V = 0.0;
float busVoltage_V = 0.0;
float current_mA = 0.0;
float power_mW = 0.0;
byte maxwait = 120;
int8_t lastvalue;
int8_t actualvalue;
const String host = "xxx.xxx.xxx.xxx"; // Server IP Adresse
const unsigned int port = 80;
unsigned long Schleifen = 0; // wie viele Schleifen wurden durchlaufen?
unsigned long Startzeit = 0; // Merker für die Zeit in Millisekunden seit letzten Aufruf der Funktion. Millis zählt immer weiter hoch seit dem Einschalten des Controllers
int8_t leseINA226() {
int8_t returnWert = 127;
shuntVoltage_mV = 0.0;
loadVoltage_V = 0.0;
busVoltage_V = 0.0;
current_mA = 0.0;
power_mW = 0.0;
ina226.readAndClearFlags();
shuntVoltage_mV = ina226.getShuntVoltage_mV();
busVoltage_V = ina226.getBusVoltage_V();
current_mA = ina226.getCurrent_mA();
power_mW = ina226.getBusPower();
loadVoltage_V = busVoltage_V + (shuntVoltage_mV / 1000);
if (!ina226.overflow) {
//Serial.println("Werte OK - kein Überlauf");
}
else {
//Serial.println("Überlauf! Höheren Strombereich wählen!");
}
if (current_mA <= 0.1) { // Error low
//Serial.println("Fehler, Strom zu niedrig, eventuell Leitung unterbrochen");
returnWert = 2;
};
if (current_mA > 0.1 && current_mA < 1.2) { // Sensor hat Reflexion
//Serial.println("Reflexion");
returnWert = 1;
};
if (current_mA >= 1.2 && current_mA < 2.1) { // Sensor meldet Rückwärtslauf
//Serial.println("Rückwärtslauf");
returnWert = -1;
};
if (current_mA >= 2.1 && current_mA < 10) { // Sensor hat keine Reflexion
//Serial.println("keine Reflexion");
returnWert = 0;
};
if (current_mA >= 10 ) { // Error High
//Serial.println("Fehler, Strom zu hoch, eventuell Kurzschluss");
returnWert = 3;
}
return returnWert;
}
//********************************************************************************************************************************
bool waitWifi() {
while ((WiFiMulti.run() != WL_CONNECTED) && maxwait > 0) {
#ifdef AUSGABE
Serial.println("Wait Wifi");
#endif
delay(1000);
maxwait--;
}
if (WiFiMulti.run() == WL_CONNECTED) return true;
return false;
}
//********************************************************************************************************************************
void sendHttpData(String url) {
HTTPClient http;
if (waitWifi()) {
#ifdef AUSGABE
Serial.print("GET: "); Serial.println(url);
#endif
http.begin(host, port, url); //HTTP
int httpCode = http.GET();
#ifdef AUSGABE
if (httpCode) {
if (httpCode == 200) {
String payload = http.getString();
// Serial.println(payload); // Rückmeldung von der Middleware
} else {
Serial.print("HTTP "); Serial.println(httpCode);
}
} else {
Serial.print("[HTTP] GET... failed, no connection or no HTTP server\n");
}
#endif
} else {
#ifdef AUSGABE
Serial.print("No WiFi available\n");
#endif
}
}
//********************************************************************************************************************************
void setup() {
Serial.begin(9600);
delay(200);
Wire.begin();
ina226.init();
ina226.setAverage(AVERAGE_1); // 1(default),4,16,64,128,256,512,1024 choose mode and uncomment for change of default
ina226.setConversionTime(CONV_TIME_1100); //140,204,332,588,1100(default),2116,4156,8244 choose conversion time and uncomment for change of default
ina226.setMeasureMode(CONTINUOUS); // "POWER_DOWN" INA226 switched off, "TRIGGERED" measurement on demand, "CONTINUOUS" continuous measurements (default) choose mode and uncomment for change of default
ina226.setCurrentRange(MA_400); // 400,800(default) choose gain and uncomment for change of default
ina226.waitUntilConversionCompleted(); //if you comment this line the first data might be zero
lastvalue = leseINA226();
Startzeit = millis();
WiFi.hostname("ESP-Bootsschuppen");
}
void loop() {
//Serial.print(lastvalue);
//Serial.print(" ");
//Serial.println(leseINA226());
actualvalue = leseINA226();
if (actualvalue != lastvalue) { // Sensor hat keine Reflexion
Serial.print(actualvalue);
if (actualvalue == 1) {
#ifdef VZsenden
url_temp = "/middleware.php/data/f2fa0010-136d-11ed-a2b7-03ad1712faca.json?operation=add&value=";
url_temp += actualvalue;
sendHttpData(url_temp); // ------------------Daten senden-----------------
digitalWrite(2, LOW); // ESP12 onboard LED einschalten
delay(20);
digitalWrite(2, HIGH); // ESP12 onboard LED ausschalten
#endif
}
Serial.print(" Current[mA]: "); Serial.print(current_mA);
lastvalue = actualvalue;
Serial.print(" Schleifen durchlaufen: ");
Serial.print(Schleifen);
Serial.print(" Wechselzeit[ms]: ");
Serial.println(millis() - Startzeit);
Schleifen = 0;
Startzeit = millis();
}
Schleifen++;
/* Serial.print("Shunt Voltage[mV]: "); Serial.print(shuntVoltage_mV);
Serial.print(" Bus Voltage[V]: "); Serial.print(busVoltage_V);
Serial.print(" Load Voltage [V]: "); Serial.print(loadVoltage_V);
Serial.print(" Current[mA]: ");
Serial.print(current_mA);
Serial.print(" Bus Power [mW]: "); Serial.print(power_mW);
*/
}
Was sagt Google zu der Meldung?
"error: call to 'HTTPClient::begin' declared with attribute error: obsolete API, use ::begin(WiFiClient, host, port, uri)" Ungefähr 901 Ergebnisse (0,51 Sekunden)
Und da ist keine für dich passende Lösung/Erklärung bei?
Ich habe jetzt mal versucht ein Sketch zu kompilieren, dass ich vor 6 Wochen geschrieben hat, und welches funktioniert hat (läuft ja seit dem auf einem nodeMCU)
...geht auch nicht, gleiche Fehlermeldung.
Daher vermute ich ein Problem aufgrund eines Library Updates?!
jetzt schaust mal in deine Code, wie du den Aufruf machst.
und dann gib ihm jene Parameter die er haben will. Die Meldung macht dir sogar einen Vorschlag, als ersten der vier Parameter den Wifi Client zu übergeben.
Du kannst aber auch selber in der .h sehen, und dann siehst du du genau die gültigen Signaturen, und jene die als deprecated gekennzeichnet sind:
Mich hat total irritiert, das mein Sketch vor 6 Wochen noch ging...
Okay, nun habe ich es mir angeschaut, und bin einen Schritt weiter: Es kompiliert wieder
[code]
#define VZsenden // Die Daten werden an die Volkszähler Middleware gesendet (kann man auskommentieren zum offline testen)
#define MQTTsenden // Die Daten werden an den MQTT Broker gesendet (kann man auskommentieren zum offline testen)
#define AUSGABE
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <INA226_WE.h>
#define I2C_ADDRESS 0x40
WiFiClient wifiClient;
ESP8266WiFiMulti WiFiMulti;
INA226_WE ina226 = INA226_WE(I2C_ADDRESS);
String url_temp;
float shuntVoltage_mV = 0.0;
float loadVoltage_V = 0.0;
float busVoltage_V = 0.0;
float current_mA = 0.0;
float power_mW = 0.0;
byte maxwait = 120;
int8_t lastvalue;
int8_t actualvalue;
const String host = "xxx.xxx.xxx.xxx"; // Server IP Adresse
const unsigned int port = 80;
unsigned long Schleifen = 0; // wie viele Schleifen wurden durchlaufen?
unsigned long Startzeit = 0; // Merker für die Zeit in Millisekunden seit letzten Aufruf der Funktion. Millis zählt immer weiter hoch seit dem Einschalten des Controllers
int8_t leseINA226() {
int8_t returnWert = 127;
shuntVoltage_mV = 0.0;
loadVoltage_V = 0.0;
busVoltage_V = 0.0;
current_mA = 0.0;
power_mW = 0.0;
ina226.readAndClearFlags();
shuntVoltage_mV = ina226.getShuntVoltage_mV();
busVoltage_V = ina226.getBusVoltage_V();
current_mA = ina226.getCurrent_mA();
power_mW = ina226.getBusPower();
loadVoltage_V = busVoltage_V + (shuntVoltage_mV / 1000);
if (!ina226.overflow) {
//Serial.println("Werte OK - kein Überlauf");
}
else {
//Serial.println("Überlauf! Höheren Strombereich wählen!");
}
if (current_mA <= 0.1) { // Error low
//Serial.println("Fehler, Strom zu niedrig, eventuell Leitung unterbrochen");
returnWert = 2;
};
if (current_mA > 0.1 && current_mA < 1.2) { // Sensor hat Reflexion
//Serial.println("Reflexion");
returnWert = 1;
};
if (current_mA >= 1.2 && current_mA < 2.1) { // Sensor meldet Rückwärtslauf
//Serial.println("Rückwärtslauf");
returnWert = -1;
};
if (current_mA >= 2.1 && current_mA < 10) { // Sensor hat keine Reflexion
//Serial.println("keine Reflexion");
returnWert = 0;
};
if (current_mA >= 10 ) { // Error High
//Serial.println("Fehler, Strom zu hoch, eventuell Kurzschluss");
returnWert = 3;
}
return returnWert;
}
//********************************************************************************************************************************
bool waitWifi() {
while ((WiFiMulti.run() != WL_CONNECTED) && maxwait > 0) {
Serial.print(" Error Code: "); Serial.println(WiFiMulti.run());
#ifdef AUSGABE
Serial.println("Wait Wifi");
#endif
delay(1000);
maxwait--;
}
if (WiFiMulti.run() == WL_CONNECTED) return true;
return false;
}
//********************************************************************************************************************************
void sendHttpData(String url) {
HTTPClient http;
if (waitWifi()) {
#ifdef AUSGABE
Serial.print("GET: "); Serial.println(url);
#endif
http.begin(wifiClient, host, port, url); //HTTP
int httpCode = http.GET();
#ifdef AUSGABE
if (httpCode) {
if (httpCode == 200) {
String payload = http.getString();
// Serial.println(payload); // Rückmeldung von der Middleware
} else {
Serial.print("HTTP "); Serial.println(httpCode);
}
} else {
Serial.print("[HTTP] GET... failed, no connection or no HTTP server\n");
}
#endif
} else {
#ifdef AUSGABE
Serial.print("No WiFi available\n");
#endif
}
}
//********************************************************************************************************************************
void setup() {
Serial.begin(9600);
delay(200);
Wire.begin();
ina226.init();
ina226.setAverage(AVERAGE_1); // 1(default),4,16,64,128,256,512,1024 choose mode and uncomment for change of default
ina226.setConversionTime(CONV_TIME_1100); //140,204,332,588,1100(default),2116,4156,8244 choose conversion time and uncomment for change of default
ina226.setMeasureMode(CONTINUOUS); // "POWER_DOWN" INA226 switched off, "TRIGGERED" measurement on demand, "CONTINUOUS" continuous measurements (default) choose mode and uncomment for change of default
ina226.setCurrentRange(MA_400); // 400,800(default) choose gain and uncomment for change of default
ina226.waitUntilConversionCompleted(); //if you comment this line the first data might be zero
lastvalue = leseINA226();
Startzeit = millis();
WiFi.hostname("ESP-Bootsschuppen");
}
void loop() {
//Serial.print(lastvalue);
//Serial.print(" ");
//Serial.println(leseINA226());
actualvalue = leseINA226();
if (actualvalue != lastvalue) { // Sensor hat keine Reflexion
Serial.print(actualvalue);
if (actualvalue == 1) {
#ifdef VZsenden
url_temp = "/middleware.php/data/f2fa0010-136d-11ed-a2b7-03ad1712faca.json?operation=add&value=";
url_temp += actualvalue;
sendHttpData(url_temp); // ------------------Daten senden-----------------
digitalWrite(2, LOW); // ESP12 onboard LED einschalten
delay(20);
digitalWrite(2, HIGH); // ESP12 onboard LED ausschalten
#endif
}
Serial.print(" Current[mA]: "); Serial.print(current_mA);
lastvalue = actualvalue;
Serial.print(" Schleifen durchlaufen: ");
Serial.print(Schleifen);
Serial.print(" Wechselzeit[ms]: ");
Serial.println(millis() - Startzeit);
Schleifen = 0;
Startzeit = millis();
}
Schleifen++;
/* Serial.print("Shunt Voltage[mV]: "); Serial.print(shuntVoltage_mV);
Serial.print(" Bus Voltage[V]: "); Serial.print(busVoltage_V);
Serial.print(" Load Voltage [V]: "); Serial.print(loadVoltage_V);
Serial.print(" Current[mA]: ");
Serial.print(current_mA);
Serial.print(" Bus Power [mW]: "); Serial.print(power_mW);
*/
}
[/code]
...aber funktionieren tut es nicht so wie gewollt.
Im bool waitWifi() scheint jetzt auch irgendwas anders zu sein als vorher.
Die While Schleife erwartet nun wohl andere Argumente vermute ich.
Hallo,
dann ist er nicht mit Deinem WLAN verbunden,
ich kann auch nicht erkennen wo die Anmeldung sein soll. Ich denke da fehlt was. Der ESP kann sich zwar automatisch verbinden, aber dazu muss er bereits einmal verbunden gewesen sein.
WLAN Netz und Passwort muss ihm bekannt sein.
Heinz