Arduino Nano ESP32 - MySQL

Diese Anleitung erklärt, wie man den Arduino Nano ESP32 verwendet, um Daten in eine MySQL-Datenbank einzufügen oder zu aktualisieren bzw. Daten aus einer MySQL-Datenbank abzurufen.

Arduino Nano ESP32 MySQL

Erforderliche Hardware

1×Arduino Nano ESP32
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 Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano ESP32

Oder Sie können die folgenden Kits kaufen:

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.

Arduino Nano ESP32 - MySQL

Es gibt zwei Begriffe in MySQL, bei denen Anfänger normalerweise verwirrt sind: MySQL-Datenbank und MySQL-Server. Sie unterscheiden sich. 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 Arduino Nano ESP32 kann auf zwei Arten mit der MySQL-Datenbank interagieren:

  • Direkt: Arduino Nano ESP32 verbindet sich direkt mit dem MySQL-Server und interagiert mit dem MySQL-Server über das MySQL-Protokoll
  • Indirekt: Arduino Nano ESP32 verbindet sich indirekt mit dem MySQL-Server über einen Webserver mittels HTTP/HTTPS-Protokoll

Was ist das Beste für den ESP32? Lassen Sie es uns herausfinden!

Arduino Nano ESP32 interagiert direkt mit dem MySQL-Server

Arduino Nano ESP32 direkt mit MySQL verbinden

Die direkte Interaktion mit MySQL scheint einfach zu sein, aber es gibt viele Nachteile:

  • Wir müssen einem MySQL-Benutzerkonto Remote-Zugriffsberechtigungen gewähren ⇒ Dies ist sicherheitstechnisch riskant, auch wenn dem Benutzerkonto nur eingeschränkte Berechtigungen gewährt werden.
  • Arduino Nano ESP32 MUSS MySQL-Abfragen speichern und an den MySQL-Server senden ⇒ Es muss viel Code für den Arduino Nano ESP32 geschrieben werden, und außerdem würden die Ressourcen des Arduino Nano ESP32 (Speicher- und CPU-Auslastung) erschöpft.
  • Arduino Nano ESP32 MUSS eine komplexe MySQL-Antwort verarbeiten (in einigen Fällen sehr große Datenmengen) ⇒ Dies kann dazu führen, dass der Arduino Nano ESP32 nicht mehr über ausreichend Speicher verfügt.
  • Der MySQL-Server muss die Rohdaten verarbeiten ⇒ erhöht die Komplexität des MySQL-Skripts.
  • Die meisten MySQL-Bibliotheken für den Arduino Nano ESP32 unterstützen kein SSL/TLS ⇒ Die Daten sowie Benutzername und Passwort werden unverschlüsselt übertragen ⇒ ein weiteres Sicherheitsproblem.

Arduino Nano 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: Arduino Nano 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 vom Arduino Nano ESP32 verarbeitet
  • Schritt 3: 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 an den Arduino Nano ESP32 über die HTTP-Antwort zurück
Arduino Nano 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.

Nachfolgend wird gezeigt, wie der indirekte Weg die Probleme des direkten Weges löst.

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

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

Aufgrund dieser Vorteile wird dieses Tutorial den indirekten Weg verwenden.

Arduino Nano ESP32 zu MySQL über HTTP/HTTPS

Folgende Schritte müssen wir durchführen:

  • XAMPP-Paket installieren, das MySQL-Server, Webserver und PHP enthält
  • Einen MySQL-Benutzer erstellen
  • Eine MySQL-Datenbank erstellen
  • Eine MySQL-Tabelle erstellen
  • Eine oder mehrere PHP-Skriptdateien erstellen
  • Arduino Nano ESP32-Code schreiben

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

  • Laden Sie XAMPP von diesem Link herunter und installieren Sie es. Nach der Installation prüfen Sie den Ordner C:\xampp\htdocs auf Ihrem PC. Hier legen Sie Ihren PHP-Code ab (siehe später).
  • Öffnen Sie das XAMPP-Kontrollpanel
  • Klicken Sie auf die Start-Schaltflächen, um MySQL und Webserver zu aktivieren (wie im untenstehenden Bild)
Arduino Nano ESP32 XAMPP

2. Erstellen eines MySQL-Benutzerkontos

Wir erstellen ein MySQL-Konto, das nur Zugriff von localhost aus erlaubt.

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

Dieses Tutorial erstellt ein MySQL-Benutzerkonto, bei dem der Benutzername und das Passwort jeweils ESP32 und newbiely.com sind:

  • Öffne die Eingabeaufforderung auf deinem PC. Schließe sie bis zum Ende des Tutorials nicht.
  • Gib den folgenden Befehl in der Eingabeaufforderung 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, das Passwort für das Root-Konto festzulegen (z. B. YOUR_ROOT_PASSWORD) aus Sicherheitsgründen. Geben Sie den untenstehenden 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 untenstehenden Befehl in der Eingabeaufforderung ein, um sich beim 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)]>
  • Lassen Sie uns ein MySQL-Benutzerkonto erstellen, wobei der Benutzername und das Passwort ESP32 bzw. newbiely.com sind, indem wir die untenstehenden Befehle kopieren und in die Eingabeaufforderung einfügen:
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. Erstellen einer MySQL-Datenbank

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

CREATE DATABASE db_nano_esp32 CHARACTER SET = 'utf8' COLLATE = 'utf8_general_ci';
Command Prompt
MariaDB [(none)]> CREATE DATABASE db_nano_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_nano_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_nano_esp32; Database changed MariaDB [db_nano_esp32]> MariaDB [db_nano_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_nano_esp32]>

6. PHP-Skriptdateien schreiben

Erstellen Sie eine insert_temp.php mit einem Texteditor Ihrer Wahl (z. B. Notepad/Notepad++). Wir werden das Skript in dieser Datei schreiben, um den Temperaturwert aus der HTTP-Anfrage zu extrahieren und ihn 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_nano_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 in den Ordner C:\xampp\htdocs ein
  • Ermitteln Sie die IP-Adresse Ihres PCs. Falls Sie nicht wissen, wie das geht, googeln Sie es.
  • 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 oben angegebene IP-Adresse durch Ihre PC-Adresse ersetzen müssen.
  • Der Webbrowser zeigt Folgendes an:
MySQL-Test
  • Prü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_nano_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_nano_esp32]>

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

7. Schreibe Arduino Nano ESP32-Code

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

/* * Dieser Arduino Nano ESP32 Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano-esp32/arduino-nano-esp32-mysql */ #include <WiFi.h> #include <HTTPClient.h> const char* WIFI_SSID = "YOUR_WIFI_SSID"; // CHANGE IT const char* WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"; // CHANGE IT 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 Arduino Nano ESP32 zum ersten Mal verwenden, lesen Sie wie man die Umgebung für Arduino Nano ESP32 in der Arduino IDE einrichtet.
  • Schließen Sie die Verkabelung wie im obigen Bild an.
  • Verbinden Sie das Arduino Nano ESP32-Board über ein USB-Kabel mit Ihrem PC.
  • Passen Sie die IP-Adresse im Code an die IP-Adresse Ihres PCs an.
  • Kompilieren Sie den Code und laden Sie ihn auf das Arduino Nano ESP32 hoch.
  • Öffnen Sie den seriellen Monitor in der Arduino IDE.
Wie öffnet man den seriellen Monitor in der Arduino-IDE?
  • Das Ergebnis im seriellen 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  
  • Überprü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_nano_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | | 2 | 30.5 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_nano_esp32]>

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

Wie man mit Arduino Nano ESP32 Daten in eine MySQL-Datenbank einfügt, aktualisiert oder daraus 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 unter 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!