Hallo,
ich bin neu hier Im Forum. Ich beschäftige mich allerdings schon seit einiger Zeit mit dem Arduino und aufgrund der vorhanden InfluxDB nun auch vermehrt mit dem ESP8266 bzw. ESP32.
Nun habe ich den folgenden Sketch beispielhaft geschrieben:
#include <WiFiManager.h>
#include <InfluxDbClient.h>
#include <Preferences.h>
//SSID and Password of your WiFi router
const char* ssid = "Test";
const char* wpakey = "1234567890";
String tname, tnr;
#define dname "http://arduino-influx-test.de:9999"
#define idbtoken "sadsaffie4r40fg9vpjvrf0f89fj0fj0j40rrfj0g4t4jg8jije490tg54rj"
#define idborg "Test-Org"
#define idbbucket "Test-Bucket"
//Influx client instance mit #define Variablen
InfluxDBClient client(dname, idbtoken, idborg, idbbucket);
//Influx setze Point
Point sensor("Test-Name");
//Flashspeicher initialisieren
Preferences preferences;
//==============================================================
// SETUP
//==============================================================
void setup() {
Serial.begin(115200);
preferences.begin("Test-Settings", false);
WiFi.begin(ssid, wpakey);
//Warte bis WLAN-Verbindung aufgebaut
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
//Holen der Daten aus dem Speicher
tname = preferences.getString("tname", "");
tnr = tname;
tnr.replace("Test_", "");
//Verbindungseinstellungen fuer Influx laden *WUNSCH!*
dname = preferences.getString("dname", "");
idbtoken = preferences.getString("idbtoken", "");
idborg = preferences.getString("idborg", "");
idbbucket = preferences.getString("idbbucket", "");
//Influx Tag hinzufuegen
sensor.addTag("Serialnumber", tnr);
delay(50);
}
//==============================================================
// LOOP
//==============================================================
void loop() {
float temp = 4.2;
sensor.clearFields();
if (client.validateConnection()) {
//Messdaten hinzufuegen
sensor.addField("C°", temp);
//Messdaten in Influx schreiben
client.writePoint(sensor);
}
else {
delay(10000);
}
delay(600000);
}
Hier habe ich gleich mehrere Probleme, aber eins nach dem anderen
-
Ich möchte gern aus dem Speicher des ESP32 mit Hilfe von <Preferences.h> die darin zuvor (anderer Sketch) gespeicherten "Zugangsdaten" für den InfluxDB client auslesen und hiermit die Verbind aufbauen. Wie ist es also möglich in dem allgemeinem Sketch die Variablen zumindest beim Start zu überschreiben? InfluxDB erwartet hier #define ...., wenn ich das richtig verstanden habe ist dies gleich zu setzen mit const .... und diese können ja im weiteren Verlauf nicht geändert werden!?
-
Welchen Rückgabe-Typ erhalte ich mit preferences.getString()? wenn ich z.B.
String test = preferences.getString("test", "")
aufrufe, dann bekomme ich beim compilieren den Fehler:
error: incompatible types in assignment of 'String' to 'const char [12]
Warum char? ich hole dies doch mit getString()? (srry, preferences ist ein neues Thema für mich)
Wäre super es könnte mir jemand bei diesen beiden Dingen Hilfestellung leisten.
Grundidee (für diejenigen die es interessiert):
Ich möchte ein Sketch schreiben welcher einen Webserver beinhaltet. Hier kann ich Grundeinstellungen setzen (in den Speicher des ESP schreiben).
Anschließend kommt eine Update-Seite über die ich z.B. den oben vorgestellten Sketch (als .bin) hochlade. Dieser soll dann die Grundeinstellungen auslesen und seinen Dienst tun.
Es soll zukünftig viele ESP's geben die alle auf die gleiche Art mit Influx kommunizieren und ich habe keine Lust immer im (ich sage mal) Hauptprogramm alle Variablen anpassen zu müssen.
Vielen Dank vorab für eure Hilfe!