Lass die Daten bei mir sein
In den vorherigen Artikeln haben wir gesehen, wie man Daten vom ESP32-Controller anzeigt und speichert. In diesem Artikel haben wir sie auf der seriellen Konsole angezeigt, und in diesem Artikel haben wir sie auf der Thingspeake-Plattform gespeichert. Aber wie kann man sie lokal bei uns speichern? Hierfür gibt es sicher viele Lösungen, die wir uns später ansehen werden. Aber konzentrieren wir uns auf eine, die vielleicht nicht die einfachste ist, uns aber viel Flexibilität bietet. Hierfür verwenden wir InfluxDB 2 und verbinden es mit Rasberry PI 3 Modell B.
Aber was ist InfluxDB 2?
InfluxDB ist eine temporäre Datenbank für die Speicherung und Verarbeitung von Zeitreihendaten. Diese Art von Daten umfasst Informationen, die zu verschiedenen Zeitpunkten aufgezeichnet werden. Beispiele für Zeitreihen sind Sensordaten, Messungen aus der Infrastrukturüberwachung, Ereignisprotokolle und andere ähnliche Daten, die im Laufe der Zeit aufgezeichnet werden.
Hier sind einige der wichtigsten Funktionen von InfluxDB:
- Zeitreihen: InfluxDB ist für die Arbeit mit Zeitreihendaten optimiert. Das bedeutet, dass die Daten unter besonderer Berücksichtigung der Zeitstempel, die sie identifizieren, geschrieben und gelesen werden.
- SQL-ähnliche Abfragesprache (InfluxQL): InfluxDB bietet eine eigene Abfragesprache namens InfluxQL, die SQL ähnlich ist. Diese Sprache ist für Abfragen auf Zeitreihendaten optimiert und hat eine Syntax, die das Arbeiten mit Zeitreihen erleichtert.
- Flexibilität und Skalierbarkeit: InfluxDB ist so konzipiert, dass es flexibel und leicht skalierbar ist. Dadurch eignet es sich für eine Vielzahl von Anwendungen, bei denen eine zeitliche Datenspeicherung und -analyse erforderlich ist.
- Unterstützung für Retention Policies und Continuous Queries: InfluxDB ermöglicht es Anwendern, Retention Policies festzulegen und Continuous Queries zu erstellen, um Daten automatisch über Zeiträume hinweg zu verarbeiten.
- Hervorragend geeignet für Monitoring und IoT: Aufgrund seiner Eigenschaften eignet sich InfluxDB besonders für den Einsatz in Überwachungssystemen, Messungen von IoT-Geräten (Internet of Things) und anderen Anwendungen, bei denen es wichtig ist, zeitliche Daten zu speichern und zu analysieren.
- InfluxDB Version 2: Neben der ursprünglichen InfluxDB (1.x) gibt es auch InfluxDB 2, das eine neue Oberfläche, eine verbesserte Abfragesprache (Flux) und weitere Neuerungen bietet.
InfluxDB wird häufig im Bereich der Überwachung und des Zeitdatenmanagements eingesetzt, da es über spezifische Eigenschaften für die Verarbeitung dieser Art von Informationen verfügt. Deshalb wollen wir die Datenbank nutzen, um Daten in ihr zu speichern. Das gibt uns viel Flexibilität, denn später können wir die Daten visualisieren, verarbeiten, darauf reagieren und an andere Systeme weitergeben. Wir verwenden die Datenbank, weil sie uns auch eine Datenstruktur, eine einfache Sprache zur Manipulation und eine Ein-/Ausgabeschnittstelle bietet, ohne großen Aufwand und komplexe Installationen. Aus diesem Grund verwenden wir eine Datenbank und nicht etwa ein Textformat, das direkt in den Speicher geschrieben wird.
Aber wo sollen wir diese Daten speichern? Raspberry Pi
Wir haben bereits über die Datenprotokollierung und die zu verwendende Datenbank gesprochen, aber wo können wir diese Datenbank installieren? Es ist möglich, sie bei einem Cloud-Anbieter wie Google, AWS oder Azure zu installieren, aber dafür brauchen wir ständiges Internet. Das ist mit moderner Technologie und schnellem und stabilem Internet möglich, aber wir sollten die Dinge lokal speichern. Auf diese Weise können wir, falls etwas passiert und wir nicht verbunden sind, immer noch auf die Daten zugreifen und sind nicht vom Internet abhängig. Aber was ist Raspberry Pi?
Der Raspberry Pi (Raspberry Pi Foundation) ist eine Reihe von Einplatinencomputern (SBC), die für den Informatikunterricht und zur Unterstützung von Hobbyprogrammierern entwickelt wurden. Der Raspberry Pi ist bekannt für seine geringen Kosten, seine kompakte Größe und seine Fähigkeit, eine Vielzahl von Softwareaufgaben durchzuführen.
Die Hauptmerkmale des Raspberry Pi variieren je nach Modell, umfassen aber in der Regel Folgendes:
- Prozessor: ARM-basierter Prozessor mit unterschiedlichen Eigenschaften je nach Modell.
- RAM: Die verschiedenen Modelle bieten unterschiedliche RAM-Ausstattungen.
- Eingangs-/Ausgangsanschlüsse (E/A): USB-Anschlüsse, HDMI-Ausgang, Audioausgang, GPIO-Anschlüsse (General Purpose Input/Output) und andere, die den Anschluss an verschiedene Peripheriegeräte ermöglichen.
- MicroSD-Kartensteckplatz: Die Karte wird zum Speichern des Betriebssystems und von Daten verwendet.
- Vernetzungsmöglichkeiten:Integrierter Ethernet-Anschluss oder Wi-Fi-Konnektivität (je nach Modell).
- GPIO-Pins: Der Raspberry Pi verfügt über GPIO-Pins, die den Anschluss an verschiedene Sensoren, Aktoren und andere elektronische Komponenten ermöglichen.
- Betriebssystem (OS): Der Raspberry Pi unterstützt verschiedene Betriebssysteme wie Raspbian (früher „Raspberry Pi OS“ genannt), Ubuntu und andere.
Der Raspberry Pi ist nicht nur im Bildungsbereich beliebt, sondern auch für Hobbyprogrammierung, IoT-Projekte, Media Center, Heimserver und mehr. Dieser erschwingliche und flexible Computer kombiniert die Leistung von Software und Hardware in einem kompakten und einfach zu bedienenden Paket. Der Raspberry Pi eignet sich perfekt für unser Projekt und ist leistungsstark genug, um die Aufgabe zu bewältigen.
Installieren wir Software
Zuerst müssen wir ein Betriebssystem auf dem Raspberry Pi Board installieren.
Gehen Sie auf die offizielle Raspberry Pi Seite im Download-Bereich – hier und laden Sie Raspberry Pi Imager herunter, indem Sie auf „Download for Windows“ oder Mac OS/Linux klicken

Führen Sie dann die heruntergeladene Datei aus und installieren Sie sie.
Nach der Ausführung sollte das folgende Fenster erscheinen:

Auf diesem Bildschirm müssen wir ein paar Dinge auswählen:
- Raspberry PI Device – hier wählen wir aus, für welchen PI wir ein Betriebssystem installieren wollen. Hier wählen wir „Raspberry Pi 3“.
- Betriebssystem – Hier wählen wir Raspberry PI OS (LEGACY, 64 Bit) FULL
- Storage – Hier wählen wir die SD-Karte aus, die wir später in das Raspberry PI-Board einsetzen und als Speicher verwenden werden.
Auf dem nächsten Bildschirm wollen wir die Einstellungen des Betriebssystems ändern. Wählen Sie „Einstellungen bearbeiten“.
Lassen Sie uns hier ein paar Dinge klären:

Unter „General“
- Set hostname – hier können wir den Host des Raspberry PI Boards festlegen, ohne seine IP-Adresse zu kennen. Dies ist besonders dann nützlich, wenn wir das Board „headless“ betreiben wollen, oder wenn wir keinen Monitor, keine Maus und keine Tastatur angeschlossen haben und das Board nur an unser lokales Netzwerk gebunden ist. Auf diese Weise können wir uns über ssh mit dem Board verbinden und es verwalten. Aber dazu später mehr.
- Set username and password – Legen wir einen Benutzernamen und ein Passwort fest, mit denen wir uns mit dem Board verbinden können. Dies ist auch der Benutzer, der auf dem Betriebssystem angelegt wird.
- Configure wireless LAN – Richten wir auch die Verbindung zum drahtlosen Netzwerk ein, wenn wir kein Kabel verwenden. In diesem Beispiel ist der Pi nicht mit einem Kabel angebunden.

Unter „Services“
- Aktivieren Sie SSH, indem Sie „Enable SSH“ und „Use password authentification“ auswählen.

Und lassen Sie uns die Einstellungen beibehalten.
Sobald wir die Einstellungen vorgenommen haben, können wir fortfahren.

und akzeptieren, dass unsere Karte gelöscht wird

Nach der Bestätigung erhalten wir einen Bildschirm, der den Speicherstatus des Betriebssystems anzeigt.

Wenn die Installation abgeschlossen ist, erhalten wir die folgende Meldung

Sobald wir die Karte wieder in das Raspberry Pi-Board einstecken, können wir uns mit ihm verbinden. Es sollte sich automatisch über das drahtlose Netzwerk mit dem Internet verbunden haben. Wir brauchen dafür keine Tastatur, Maus und keinen Monitor. Wir werden den SSH-Zugang verwenden. Hierfür verwenden wir putty. Wir können das Programm von hier herunterladen.
Was ist Putty?
PuTTY ist eine freie und quelloffene Software, die für Terminalverbindungen (SSH, Telnet, Rlogin usw.) zu anderen Computern im Netzwerk entwickelt wurde. Das Projekt wurde von Simon Tatum gegründet und begann 1998.
Der Hauptzweck von PuTTY besteht darin, eine einfache Möglichkeit zu bieten, sich über verschiedene Kommunikationsprotokolle mit anderen Computern zu verbinden, insbesondere bei der Arbeit mit Servern. Hier sind einige der wichtigsten Funktionen von PuTTY:
- SSH, Telnet, Rlogin, etc.: Unterstützt verschiedene Protokolle für die sichere und unsichere Kommunikation mit anderen Computern.
- Terminalemulator: Bietet eine Textschnittstelle, über die der Benutzer Befehle eingeben und die Ergebnisse empfangen kann.
- SCP- und SFTP-Clients: enthält auch Tools zur Übertragung von Dateien über SCP (Secure Copy) und SFTP (SSH File Transfer Protocol).
- Unterstützt Zertifikate und Schlüssel: Ermöglicht die Verwendung von SSH-Schlüsseln zur Authentifizierung, was die Sicherheit bei der Verbindung mit Servern erhöht.
- Unterstützung für verschiedene Betriebssysteme: puTTY ist für Microsoft Windows verfügbar und es gibt auch verschiedene Ports für UNIX-basierte Systeme.
- Sitzungsspeicher: Ermöglicht es Benutzern, Einstellungen und Konfigurationen für häufig verwendete Sitzungen zu speichern.
- Schnell und leichtgewichtig: PuTTY ist leichtgewichtig und läuft schnell, so dass es auch auf älteren Computern oder bei schlechter Netzwerkanbindung bequem zu benutzen ist.
PuTTY ist ein weit verbreitetes Tool in der Systemadministration und Softwareentwicklung, wo ein Terminalemulator für den Zugriff auf und die Verwaltung von entfernten Systemen erforderlich ist. Wir werden es verwenden, um auf das System zuzugreifen, ohne in seiner Nähe sein zu müssen.
Auf der Seite müssen wir auf „Download PuTTY“ klicken und „putty-64bit-0.80-installer.msi
“ herunterladen. Die Datei wird das Programm auf unserem Computer installieren.

Nach der Installation müssen wir die Adresse des Raspberry Pi-Boards in das Feld „Hostname“ eingeben und auf „Open“ klicken. Wir haben die Adresse zuvor oben festgelegt und müssen dann das Zertifikat akzeptieren.


Nachdem Sie den richtigen Benutzernamen und das richtige Passwort eingegeben haben, können wir mit der Installation fortfahren.
So sieht eine ordnungsgemäße Anmeldung aus:

Möglicherweise können wir die Adresse nicht direkt öffnen. Um sich bei der Pi-Platine anzumelden, müssen wir irgendwie seine IP-Adresse herausfinden. Eine Möglichkeit besteht darin, im Router unseres Netzwerks unter den DHCP-Einstellungen (sofern konfiguriert) nachzusehen, welches Gerät zuletzt eine IP-Adresse erhalten hat, und diese Adresse für die Verbindung zu verwenden. Die andere Möglichkeit ist, wenn wir physischen Zugriff auf die Pi-Platine haben und eine Tastatur und einen Monitor angeschlossen sind, können wir uns in das Betriebssystem einloggen und den Befehl „hostname -I“ ausführen. Nach der Ausführung können wir die Adresse sehen:

In diesem Fall ist es 192.168.11.42 und wir können es verwenden, indem wir es durch rasberrypiDB.local ersetzen
Installation von InfluxDB
Wir haben nun Zugriff auf das Pi-Board und können mit der Installation der Datenbank fortfahren.
Um es zu installieren, können wir der Dokumentation hier folgen und die Plattform auswählen

Aber laden wir erst einmal die Datenbank herunter. Führen Sie das in ihre Putty Terminal
>curl -O https://dl.influxdata.com/influxdb/releases/influxdb2_2.7.4-1_arm64.deb
Und jetzt entpacken wir es
>sudo dpkg -i influxdb2_2.7.4-1_arm64.deb
Jetzt können wir die Basis mit
> sudo service influxdb start
Und um es zu testen mit
>sudo service influxdb status
Sehen wir uns das Ergebnis an

Wir können sehen, dass sie geht:
influxdb.service - InfluxDB is an open-source, distributed, time series database
Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enable>
Active: active (running)
Öffnen wir die Adresse des Pi-Boards auf Port 8086 im Browser. Und wir werden dies sehen:

Geben Sie denselben Benutzer und dasselbe Passwort ein, das Sie bei der Konfiguration des Pi-Boards verwendet haben, und fahren Sie fort;

Außerdem müssen wir eine Organisation und einen Namen für den Eimer eingeben, der oben nicht angezeigt wird, um weiterzumachen. Dann erhalten wir ein Administrations-Token, das man sich irgendwo notieren sollte, weil es nur einmal auftaucht. Aber für dieses Beispiel brauchen wir diese zusätzlichen Daten nicht.
Wenn wir http://192.168.11.42:8086/ erneut öffnen, sehen wir die Startseite der Datenbank. Auf dieser finden wir ein Beispiel für ArduinoIDE und ein Beispiel mit ESP32.

Um Informationen über ESP32 zu erhalten, müssen wir das richtige Board auf der Seite auswählen

Führen Sie den in der Anleitung beschriebenen Einrichtungsvorgang durch.
In die Variable INFLUXDB_BUCKET müssen wir den Bucket von oben füllen, der auf dem Screenshot nicht zu sehen ist.
Sobald wir die Arduino-IDE öffnen, müssen wir ein neues Projekt erstellen und die richtigen Einstellungen wählen.
Das Programm im dem IDE sieht wie folgt aus:
#if defined(ESP32)
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#define DEVICE "ESP32"
#elif defined(ESP8266)
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
#define DEVICE "ESP8266"
#endif
#include <InfluxDbClient.h>
#include <InfluxDbCloud.h>
#include "driver/temp_sensor.h"
// WiFi AP SSID
#define WIFI_SSID "Be*****"
// WiFi password
#define WIFI_PASSWORD "*****"
#define INFLUXDB_URL "http://192.168.11.42:8086"
#define INFLUXDB_TOKEN "PAq*****"
#define INFLUXDB_ORG "4a3*****"
#define INFLUXDB_BUCKET "Test"
// Time zone info
#define TZ_INFO "UTC2"
// Declare InfluxDB client instance with preconfigured InfluxCloud certificate
InfluxDBClient client(INFLUXDB_URL, INFLUXDB_ORG, INFLUXDB_BUCKET, INFLUXDB_TOKEN, InfluxDbCloud2CACert);
// Declare Data point
Point sensor("Internal temp");
void initTempSensor(){
temp_sensor_config_t temp_sensor = TSENS_CONFIG_DEFAULT();
temp_sensor.dac_offset = TSENS_DAC_L2;
temp_sensor_set_config(temp_sensor);
temp_sensor_start();
}
void setup() {
Serial.begin(115200);
initTempSensor();
// Setup wifi
WiFi.mode(WIFI_STA);
wifiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to wifi");
while (wifiMulti.run() != WL_CONNECTED) {
Serial.print(".");
delay(100);
}
Serial.println();
// Accurate time is necessary for certificate validation and writing in batches
// We use the NTP servers in your area as provided by: https://www.pool.ntp.org/zone/
// Syncing progress and the time will be printed to Serial.
timeSync(TZ_INFO, "pool.ntp.org", "time.nis.gov");
// Check server connection
if (client.validateConnection()) {
Serial.print("Connected to InfluxDB: ");
Serial.println(client.getServerUrl());
} else {
Serial.print("InfluxDB connection failed: ");
Serial.println(client.getLastErrorMessage());
}
// Add tags to the data point
sensor.addTag("device", DEVICE);
sensor.addTag("Name", "My_ESP32_board");
}
void loop() {
float result = 0;
temp_sensor_read_celsius(&result);
Serial.print("Temperature:");
Serial.println(result);
// Clear fields for reusing the point. Tags will remain the same as set above.
sensor.clearFields();
// Store measured value into point
sensor.addField("temp", result);
// Print what are we exactly writing
Serial.print("Writing: ");
Serial.println(sensor.toLineProtocol());
// Check WiFi connection and reconnect if needed
if (wifiMulti.run() != WL_CONNECTED) {
Serial.println("Wifi connection lost");
}
// Write point
if (!client.writePoint(sensor)) {
Serial.print("InfluxDB write failed: ");
Serial.println(client.getLastErrorMessage());
}
Serial.println("Waiting 1 second");
delay(1000);
}
Wir müssen die richtigen WiFi-Netzwerkeinstellungen und Token aus der Beispieldatenbank eingeben. Das Programm wird so geändert, dass es den internen Temperatursensor ausliest und die Ergebnisse in die Datenbank schreibt. Wie man den internen Sensor ausliest, finden Sie hier.
Testen wir es und sehen wir uns die Ergebnisse an. In der seriellen Konsole können wir sehen, dass das ESP32-Board die Ergebnisse schreibt.

Bei den ersten Schreibversuchen erschien folgende Fehlermeldung: ‚InfluxDB write failed: connection refused‘. Hier finden Sie eine einfache Lösung für dieses Problem.
Schauen wir uns die Datensätze in der Influx-Datenbank an:

Schlussfolgerung
In diesem Beispiel haben wir gesehen, wie wir Messungen von einem Sensor auf einem ESP32-Board in eine externe Datenbank schreiben können. Dies erleichtert uns die Arbeit mit den Daten, schützt sie vor Verlust und strukturiert sie so, dass sie von anderen Anwendungen verwendet werden können. Außerdem haben wir eine Historie der Daten und sind nicht auf den Speicher und die Netzwerkverbindung der Sensoren angewiesen. Dies ist der letzte Artikel in einer Serie über die Arbeit mit Sensordaten auf einem ESP32-Board. Sie können hier sehen, wie sie in der seriellen Konsole angezeigt werden, und hier, wie sie in der externen Plattform ThingSpeak gespeichert werden.
Spaß am Programmieren!