ESP32 - MySQL

Diese Anleitung erklärt dir, wie du den ESP32 verwendest, um Daten in eine MySQL-Datenbank einzufügen oder zu aktualisieren, oder die Daten aus der MySQL-Datenbank auszulesen.

ESP32 MySQL

Erforderliche Hardware

1×ESP32 ESP-WROOM-32 Entwicklungsmodul
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×(Optional) DC-Stromanschluss
1×Breadboard
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP32
1×(Empfohlen) Breakout Expansion Board for ESP32
1×(Empfohlen) Stromverteiler für ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 Starter-Kit (ESP32 enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

ESP32 - MySQL

Es gibt zwei Begriffe in MySQL, die Anfänger normalerweise verwirren: MySQL-Datenbank und MySQL-Server. Sie sind unterschiedlich. Allerdings, wenn Sie Anfänger sind, können Sie davon ausgehen, dass sie gleich sind. Später werden Sie im Lernprozess die Unterschiede feststellen.

Der ESP32 kann auf zwei Arten mit der MySQL-Datenbank interagieren:

  • Direkt: ESP32 verbindet sich direkt mit dem MySQL-Server und interagiert mit diesem über das MySQL-Protokoll
  • Indirekt: ESP32 verbindet sich indirekt mit dem MySQL-Server über einen Webserver, der das HTTP/HTTPS-Protokoll verwendet.

Welches ist das Beste für den ESP32? Finden wir es heraus!

ESP32 interagiert direkt mit dem MySQL-Server

ESP32 direkt zu MySQL

Der direkte Umgang mit MySQL scheint einfach zu sein, aber es gibt viele Nachteile:

  • Wir müssen einem MySQL-Benutzerkonto Remote-Zugriffsberechtigungen gewähren ⇒ Aus sicherheitstechnischer Sicht ist dies riskant, selbst wenn wir dem Benutzerkonto eingeschränkte Privilegien gewähren.
  • Der ESP32 muss MySQL-Abfragen speichern und an den MySQL-Server senden ⇒ Es muss viel ESP32-Code geschrieben werden, und auch die Ressourcen des ESP32 (Speicher und CPU-Auslastung) werden stark beansprucht.
  • Der ESP32 muss eine komplexe MySQL-Antwort verarbeiten (in einigen Fällen sehr große Datenmengen) ⇒ Dadurch kann der ESP32 den Arbeitsspeicher erschöpfen.
  • Der MySQL-Server muss die Rohdaten verarbeiten ⇒ erhöht die Komplexität des MySQL-Skripts.
  • Die meisten MySQL-Bibliotheken für ESP32 unterstützen kein SSL/TLS ⇒ Die Daten sowie der Benutzername und das Passwort werden unverschlüsselt übertragen ⇒ ein weiteres Sicherheitsproblem.

ESP32 interagiert indirekt mit dem MySQL-Server über HTTP/HTTPS

Die indirekte Interaktion mit MySQL über HTTP/HTTPS löst alle Probleme des direkten Zugriffs.

So funktioniert es

  • Schritt 1: ESP32 enthält die Daten für die HTTP/HTTPS-Anfrage und sendet die Anfrage an den Webserver.
  • Schritt 2: Der Webserver führt ein PHP-Skript aus, das die Anfrage von ESP32 bearbeitet.
  • Schritt 3: Das PHP-Skript extrahiert die Daten aus der HTTP-Anfrage, verarbeitet die Daten und interagiert dann mit der MySQL-Datenbank.
  • Schritt 4: Das PHP-Skript verarbeitet das Ergebnis und gibt nur das notwendige Ergebnis über die HTTP-Antwort an ESP32 zurück.
ESP32 MySQL HTTP

Wir werden MySQL-Server, Webserver und PHP auf dem PC installieren. Tatsächlich können wir es auch auf einem dedizierten Server oder Cloud-Dienst wie AWS EC2 installieren.

Das Folgende zeigt, wie der indirekte Weg die Probleme des direkten Weges löst.

  • Wir können HTTP-Server und MySQL-Server auf demselben physischen Server installieren; wir können einem MySQL-Benutzerkonto eingeschränkten Zugriff gewähren (z. B. localhost-Zugriff) ⇒ sicher.
  • Der Benutzername und das Passwort des MySQL-Kontos werden auf dem Server gespeichert ⇒ sicher.
  • Daten werden von einem PHP-Skript verarbeitet ⇒ Dies verringert die Belastung und die Komplexität für den ESP32 und den MySQL-Server.
  • PHP-Skript kann die Daten viel einfacher verarbeiten als der ESP32-Code und das MySQL-Skript ⇒ ESP32-Code und MySQL-Skript vereinfachen.
  • PHP-Skript kann die Daten verarbeiten und nur notwendige Daten an den ESP32 senden (Schritt 4), um zu verhindern, dass dem ESP32 der Speicher ausgeht.
  • Der ESP32 kann problemlos HTTPS-Anfragen senden ⇒ Die Daten sind verschlüsselt.

Beachten Sie, dass die Authentifizierung zwischen ESP32 und Webserver unabhängig von der MySQL-Authentifizierung erfolgen sollte. Zum Beispiel sollten der HTTP-Benutzername und das HTTP-Passwort sich vom MySQL-Benutzername und MySQL-Passwort unterscheiden.

Aufgrund dieser Vorteile wird dieses Tutorial den indirekten Weg wählen.

ESP32 zu MySQL über HTTP/HTTPS

Die folgenden Schritte müssen wir durchführen:

  • Installation des XAMPP-Pakets, das MySQL-Server, Webserver und PHP enthält
  • Einen MySQL-Benutzeraccount erstellen
  • Eine MySQL-Datenbank erstellen
  • Eine MySQL-Tabelle erstellen
  • Eine oder mehrere PHP-Skriptdateien erstellen
  • ESP32-Code schreiben

1. Installation von MySQL-Server, Webserver und PHP auf Ihrem PC

  • Lade XAMPP von diesem Link herunter und installiere es. Nach der Installation überprüfe den C:\xampp\htdocs-Ordner auf deinem PC. Hier legst du deinen PHP-Code ab (siehe später).
  • Öffne das XAMPP-Kontrollzentrum
  • Klicke auf die Start-Schaltflächen, um MySQL und den Webserver zu aktivieren (wie im untenstehenden Bild)
ESP32 XAMPP

2. Erstellung eines MySQL-Benutzerkontos

Wir werden ein MySQL-Konto mit ausschließlich localhost-Zugriffsrechten erstellen.

  • Selbst wenn Angreifer den Benutzernamen und das Passwort kennen, können sie nicht auf Ihre MySQL-Datenbank zugreifen, es sei denn, sie übernehmen Ihren PC.
  • Dieser Benutzername und dieses Passwort werden von PHP verwendet, um eine Verbindung zur MySQL-Datenbank herzustellen.

Dieses Tutorial erstellt ein MySQL-Benutzerkonto, dessen Benutzername und Passwort jeweils ESP32 bzw. newbiely.com sind:

  • Öffnen Sie die Command Prompt auf Ihrem PC. Schließen Sie es bis zum Ende des Tutorials nicht.
  • Geben Sie Folgendes im Command Prompt ein:
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\YOUR_USER>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>
  • Standardmäßig hat MySQL das Root-Konto ohne Passwort. Es wird dringend empfohlen, aus Sicherheitsgründen das Passwort für das Root-Konto festzulegen (z. B. YOUR_ROOT_PASSWORD). Geben Sie den folgenden Befehl in der Eingabeaufforderung ein:
mysqladmin -u root password YOUR_ROOT_PASSWORD
Command Prompt
C:\xampp\mysql\bin>mysqladmin -u root password YOUR_ROOT_PASSWORD C:\xampp\mysql\bin>
  • Geben Sie den folgenden Befehl in der Eingabeaufforderung ein, um sich am MySQL-Server anzumelden:
mysql.exe -u root -p
  • Geben Sie YOUR_ROOT_PASSWORD ein und drücken Sie Enter
Command Prompt
C:\xampp\mysql\bin>mysql.exe -u root -p Enter password: ****************** Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.4.6-MariaDB mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
  • Lass uns ein MySQL-Benutzerkonto erstellen, bei dem der Benutzername ESP32 und das Passwort newbiely.com jeweils sind, indem du die untenstehenden Befehle kopierst und in der Eingabeaufforderung einfügst:
CREATE USER 'ESP32'@'localhost' IDENTIFIED BY 'newbiely.com'; GRANT ALL PRIVILEGES ON *.* TO 'ESP32'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
Command Prompt
MariaDB [(none)]> CREATE USER 'ESP32'@'localhost' IDENTIFIED BY 'newbiely.com'; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'ESP32'@'localhost' WITH GRANT OPTION; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.001 sec) MariaDB [(none)]>

Sie haben erfolgreich ein MySQL-Benutzerkonto erstellt. Notieren Sie den Benutzernamen und das Passwort. Es wird im PHP-Skript verwendet.

3. Eine MySQL-Datenbank erstellen

Erstellen Sie eine Datenbank db_esp32, indem Sie den folgenden Befehl in der Eingabeaufforderung eingeben:

CREATE DATABASE db_esp32 CHARACTER SET = 'utf8' COLLATE = 'utf8_general_ci';
Command Prompt
MariaDB [(none)]> CREATE DATABASE db_esp32 CHARACTER SET = 'utf8' COLLATE = 'utf8_general_ci'; Query OK, 1 row affected (0.003 sec) MariaDB [(none)]>

4. Eine MySQL-Tabelle erstellen

Erstellen Sie eine Tabelle tbl_temp, indem Sie die untenstehenden Befehle kopieren und in die Eingabeaufforderung einfügen:

USE db_esp32; CREATE TABLE tbl_temp ( temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT, temp_value FLOAT DEFAULT 0.00, PRIMARY KEY (temp_id) );
Command Prompt
MariaDB [(none)]> USE db_esp32; Database changed MariaDB [db_esp32]> MariaDB [db_esp32]> CREATE TABLE tbl_temp ( -> temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT, -> temp_value FLOAT DEFAULT 0.00, -> PRIMARY KEY (temp_id) -> ); Query OK, 0 rows affected (0.044 sec) MariaDB [db_esp32]>

6. PHP-Skriptdateien schreiben

Erstellen Sie eine Datei insert_temp.php mit einem beliebigen Texteditor (z. B. Notepad/Notepad++). Wir schreiben das Skript in diese Datei, um den Temperaturwert aus der HTTP-Anfrage zu extrahieren und den Temperaturwert in die Datenbank einzufügen.

<?php if(isset($_GET["temperature"])) { $temperature = $_GET["temperature"]; // get temperature value from HTTP GET $servername = "localhost"; $username = "ESP32"; $password = "newbiely.com"; $database_name = "db_esp32"; // Create MySQL connection fom PHP to MySQL server $connection = new mysqli($servername, $username, $password, $database_name); // Check connection if ($connection->connect_error) { die("MySQL connection failed: " . $connection->connect_error); } $sql = "INSERT INTO tbl_temp (temp_value) VALUES ($temperature)"; if ($connection->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . " => " . $connection->error; } $connection->close(); } else { echo "temperature is not set in the HTTP request"; } ?>
  • Legen Sie diese Datei im Ordner C:\xampp\htdocs ab.
  • Ermitteln Sie die IP-Adresse Ihres PCs. Falls Sie nicht wissen, wie das geht, googeln Sie danach.
  • Testen Sie den PHP-Code, indem Sie einen Webbrowser (z. B. Chrome) öffnen und auf diesen Link zugreifen: http://192.168.0.19/insert_temp.php?temperature=26.2. Beachten Sie, dass Sie die obige IP-Adresse durch Ihre PC-Adresse ersetzen müssen.
  • Der Webbrowser zeigt Folgendes an:
MySQL-Test
  • Überprüfen Sie, ob Daten in der Datenbank gespeichert sind, indem Sie den folgenden Befehl in der Eingabeaufforderung eingeben:
SELECT * from tbl_temp;
Command Prompt
MariaDB [db_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_esp32]>

Wie Sie sehen können, ist die Temperatur von 26,2 in der Datenbank gespeichert. Der nächste Schritt besteht darin, ESP32-Code zu schreiben, der eine HTTP-Anfrage an den Webserver auf Ihrem PC sendet.

7. Schreibe ESP32-Code

Der untenstehende ESP32-Code sendet eine HTTP-Anfrage an Ihren PC, um eine Temperatur von 30,5 °C in die Datenbank einzufügen.

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-mysql */ #include <WiFi.h> #include <HTTPClient.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; String HOST_NAME = "http://192.168.0.19"; // change to your PC's IP address String PATH_NAME = "/insert_temp.php"; String queryString = "?temperature=30.5"; void setup() { Serial.begin(9600); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Connecting"); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); HTTPClient http; http.begin(HOST_NAME + PATH_NAME + queryString); //HTTP int httpCode = http.GET(); // httpCode will be negative on error if(httpCode > 0) { // file found at server if(httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTP] GET... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } void loop() { }

Schnelle Schritte

  • Wenn Sie ESP32 zum ersten Mal verwenden, sehen Sie sich wie man die Umgebung für ESP32 in der Arduino-IDE einrichtet an.
  • Verkabeln Sie gemäß dem oben gezeigten Bild.
  • Verbinden Sie das ESP32-Board über ein Micro-USB-Kabel mit Ihrem PC.
  • Ändern Sie die IP-Adresse im Code auf die IP-Adresse Ihres PCs.
  • Kompilieren und laden Sie den Code auf den ESP32 hoch.
  • Öffnen Sie den Serial Monitor in der Arduino-IDE.
Wie öffnet man den seriellen Monitor in der Arduino-IDE?
  • Das Ergebnis im Serial Monitor
COM6
Send
Connected to server HTTP/1.1 200 OK Date: Tue, 12 Jan 2021 07:52:22 GMT Server: Apache/2.4.39 (Win64) OpenSSL/1.1.1c PHP/7.3.8 X-Powered-By: PHP/7.3.8 Content-Length: 31 Connection: close Content-Type: text/html; charset=UTF-8 New record created successfully disconnected
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Prüfen Sie, ob Daten in der Datenbank gespeichert sind, indem Sie den folgenden Befehl in der Eingabeaufforderung verwenden:
SELECT * from tbl_temp;
Command Prompt
MariaDB [db_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | | 2 | 30.5 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_esp32]>

Wie Sie sehen können, ist die Temperatur 30,5 in der Datenbank gespeichert.

Wie ESP32 Daten in eine MySQL-Datenbank einfügt, aktualisiert oder Daten aus der MySQL-Datenbank abruft

Das obige Beispiel zeigt, wie Daten in die MySQL-Datenbank eingefügt werden. Es ist ähnlich beim Aktualisieren und Auslesen von Daten aus der Datenbank. Sie müssen lediglich die MySQL-Abfrage im PHP-Code anpassen. Weitere Informationen finden Sie auf W3Schools.com.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!