Arduino Nano - MySQL

Der Arduino Nano kann Sensordaten sammeln und in einer MySQL-Datenbank speichern. Er kann auch Daten (wie Befehle) aus der MySQL-Datenbank abrufen, um Geräte wie LEDs, Motoren und Aktuatoren zu steuern.

Dieses Tutorial wird Ihnen zeigen, wie man das Arduino Nano und das Ethernet-Modul verwendet, um mit einer MySQL-Datenbank zu interagieren. Genauer gesagt, werden wir Folgendes behandeln:

Arduino MySQL

Erforderliche Hardware

1×Official Arduino Nano
1×Alternativ: DIYables ATMEGA328P Nano Development Board
1×USB-A-zu-Mini-B-Kabel
1×W5500 Ethernet Module
1×Ethernet Cable
1×Verbindungskabel
1×Breadboard
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano

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 - MySQL

Wenn Sie neu in der Systemarchitektur sind, ist es in Ordnung, vorerst die MySQL-Datenbank und den MySQL-Server als dasselbe zu betrachten. Mit zunehmendem Wissen werden Sie die Unterschiede zwischen ihnen verstehen.

Es gibt zwei Methoden, wie der Arduino Nano mit einer MySQL-Datenbank kommunizieren kann:

  • Direkt eine Verbindung zum MySQL-Server über eine MySQL-Verbindung herstellen (der direkte Ansatz)
  • Indirekt mit dem MySQL-Server über eine HTTP-Verbindung kommunizieren (der indirekte Ansatz)

Lass uns die beste Option erkunden.

Arduino Nano interagiert direkt mit dem MySQL-Server

Arduino direkt zu MySQL

Das könnte einfacher erscheinen, aber es hat mehrere Nachteile:

  • Das Erlauben eines MySQL-Benutzerkontos, remote auf die MySQL-Datenbank zuzugreifen, birgt Sicherheitsrisiken, auch wenn das Konto nur eingeschränkte Privilegien hat.
  • Die Verarbeitung von Daten auf dem Arduino Nano und/oder dem MySQL-Server erhöht die Komplexität des Arduino-Nano-Codes und der MySQL-Skripte und beansprucht einen Großteil der Ressourcen des Arduino Nano (Speicher und CPU).
  • In einigen Fällen kann der MySQL-Server dem Arduino Nano eine große Menge an Daten zurückgeben, was dazu führen könnte, dass dem Nano der Speicher ausgeht.
  • Die meisten verfügbaren MySQL-Bibliotheken unterstützen kein SSL/TLS, was bedeutet, dass sensible Daten wie Benutzernamen und Passwörter im Klartext übertragen werden und ein zusätzliches Sicherheitsrisiko darstellen.

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

Der indirekte Ansatz behebt alle Probleme, die die direkte Methode hat. Bevor wir darauf eingehen, wie er die Nachteile des direkten Ansatzes überwindet, betrachten wir zunächst, wie er funktioniert.

Wie es funktioniert

  • Schritt 1: Der Arduino Nano sendet eine HTTP-Anfrage an den Webserver.
  • Schritt 2: Der Webserver führt ein PHP-Skript aus.
  • Schritt 3: Das PHP-Skript erhält Daten aus der HTTP-Anfrage, verarbeitet sie und interagiert mit der MySQL-Datenbank.
  • Schritt 4: Das PHP-Skript verarbeitet das Ergebnis und sendet es in einer HTTP-Antwort zurück an den Arduino Nano.
Arduino Nano MySQL HTTP

In diesem Tutorial werden sowohl der Webserver als auch der MySQL-Server auf einem PC installiert.

Es mag kompliziert erscheinen, aber es ist nicht so. So löst die indirekte Methode die Probleme des direkten Ansatzes:

  • Durch die Installation von MySQL- und HTTP-Servern auf derselben Maschine können wir das MySQL-Benutzerkonto darauf beschränken, nur auf localhost zuzugreifen.
  • Außerdem werden der MySQL-Benutzername und das Passwort sicher auf dem Server gespeichert (Schritt 3), was die Sicherheit verbessert.
  • Daten werden von einem PHP-Skript verarbeitet (Schritte 3 und 4), wodurch die Arbeitslast und die Komplexität sowohl für Arduino Nano als auch für den MySQL-Server reduziert werden.
  • Das Verarbeiten von Daten mit PHP-Code ist viel einfacher als die Verwendung von Arduino Nano-Code oder MySQL-Skripten.
  • Das PHP-Skript kann die Daten filtern und nur das senden, was für den Arduino Nano benötigt wird (Schritt 4), um einen Speicherüberlauf zu verhindern.
  • Die meisten Ethernet-/WiFi-Bibliotheken unterstützen TLS/SSL, sodass wir HTTPS-Anfragen stellen können. Die Verwendung von HTTPS sorgt dafür, dass Daten verschlüsselt übertragen und online sicher ausgetauscht werden.

Im ersten Schritt können wir einen anderen Benutzernamen und ein Passwort für die Authentifizierung zwischen dem Arduino Nano und dem Webserver verwenden. Aus Sicherheitsgründen sollten der HTTP-Benutzername und das HTTP-Passwort nicht identisch mit den MySQL-Anmeldeinformationen sein.

Das folgende Tutorial zeigt, wie man die indirekte Methode mit Arduino Nano und MySQL verwendet und dabei ihre vielen Vorteile erläutert.

Verdrahtungsdiagramm zwischen Arduino Nano und W5500 Ethernet-Modul

Arduino Nano Ethernet-Modul Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Siehe Der beste Weg, den Arduino Nano und andere Komponenten mit Strom zu versorgen.

image source: diyables.io

Arduino Nano - MySQL über HTTP/HTTPS

Hier sind die Schritte, die wir befolgen müssen:

  • Installieren Sie MySQL-Server, Webserver und PHP auf Ihrem PC.
  • Aktivieren Sie MySQL-Server und Webserver.
  • Erstellen Sie ein MySQL-Benutzerkonto.
  • Richten Sie eine MySQL-Datenbank ein.
  • Erstellen Sie eine MySQL-Tabelle.
  • Schreiben Sie ein oder mehrere PHP-Skriptdateien.
  • Schreiben Sie den Code für Arduino Nano.

Wir gehen es Schritt für Schritt an. Gehen wir den Prozess schrittweise durch.

1. Installieren Sie MySQL-Server, Webserver und PHP auf Ihrem PC

Glücklicherweise enthält das XAMPP-Paket all dies.

Wir müssen es nur einmal installieren:

  • Laden Sie XAMPP von diesem Link herunter.
  • Führen Sie die Installation durch.

Nachdem Sie installiert haben, werden Sie den Ordner C:\xampp\htdocs auf Ihrem Computer sehen. Hier sollten Sie Ihren PHP-Code platzieren (wie später erläutert wird).

2. MySQL und Webserver aktivieren

  • Öffnen Sie das XAMPP-Kontrollfeld.
  • Drücken Sie die Start-Schaltfläche, um MySQL und den Webserver zu aktivieren. (Siehe das untenstehende Bild.)
Arduino Nano XAMPP

3. Ein MySQL-Benutzerkonto erstellen

Wir werden ein MySQL-Konto erstellen, das sich nur von localhost aus mit der MySQL-Datenbank verbinden kann:

  • Selbst wenn der Benutzername und das Passwort offengelegt werden, können Angreifer nicht auf die MySQL-Datenbank zugreifen, es sei denn, sie haben die Kontrolle über den Computer.
  • Da PHP und MySQL auf demselben PC installiert sind, kann PHP diesen Benutzernamen und dieses Passwort verwenden, um eine Verbindung zur MySQL-Datenbank herzustellen.

Lassen Sie uns ein MySQL-Benutzerkonto mit dem Benutzernamen Arduino und dem Passwort ArduinoGetStarted.com erstellen:

  • Starten Sie die Eingabeaufforderung auf Ihrem Computer. Halten Sie dieses Fenster offen, bis das Tutorial abgeschlossen ist.
  • Geben Sie den folgenden Befehl in die Eingabeaufforderung ein:
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\YOUR_USER>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>
  • Standardmäßig besitzt MySQL ein Root-Konto, das kein Passwort besitzt.
  • Es wird empfohlen, diesem Konto ein Passwort zu vergeben.

Geben Sie your-root-password für das Root-Konto ein, indem Sie diesen Befehl in der Eingabeaufforderung eingeben:

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 diesen Befehl in der Eingabeaufforderung ein:
mysql.exe -u root -p
  • Geben Sie Ihr Root-Passwort ein und drücken Sie die Eingabetaste.
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)]>
  • Erstellen Sie ein MySQL-Benutzerkonto mit dem Benutzernamen Arduino und dem Passwort ArduinoGetStarted.com, indem Sie die untenstehenden Befehle kopieren und in die Eingabeaufforderung einfügen:
CREATE USER 'Arduino'@'localhost' IDENTIFIED BY 'ArduinoGetStarted.com'; GRANT ALL PRIVILEGES ON *.* TO 'Arduino'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
Command Prompt
MariaDB [(none)]> CREATE USER 'Arduino'@'localhost' IDENTIFIED BY 'ArduinoGetStarted.com'; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'Arduino'@'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 nun ein MySQL-Benutzerkonto erstellt. Merken Sie sich den Benutzernamen und das Passwort, da sie für das PHP-Skript benötigt werden.

4. Eine MySQL-Datenbank erstellen

Lassen Sie uns eine Datenbank mit dem Titel db_arduino erstellen, indem Sie den folgenden Befehl in der Eingabeaufforderung eingeben:

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

5. Eine MySQL-Tabelle erstellen

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

USE db_arduino; 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_arduino; Database changed MariaDB [db_arduino]> MariaDB [db_arduino]> 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_arduino]>

6. Schreibe eine oder mehrere PHP-Dateien

Erstelle eine PHP-Datei. Benenne die Datei in insert_temp.php. Rufe die Temperatur aus der HTTP-Anfrage ab. Füge die Temperatur in die Datenbank ein.

<?php if(isset($_GET["temperature"])) { $temperature = $_GET["temperature"]; // get temperature value from HTTP GET $servername = "localhost"; $username = "Arduino"; $password = "ArduinoGetStarted.com"; $dbname = "db_arduino"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "INSERT INTO tbl_temp (temp_value) VALUES ($temperature)"; if ($conn->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . " => " . $conn->error; } $conn->close(); } else { echo "temperature is not set"; } ?>
  • Sollte "Temperatur 27,5 wurde gespeichert" lauten.
  • Legen Sie diese Datei in das Verzeichnis C:\xampp\htdocs.
  • Ermitteln Sie die IP-Adresse Ihres PCs. Wenn Sie nicht wissen, wie das geht, suchen Sie sie bei Google.
  • Um den PHP-Code zu testen, öffnen Sie einen Webbrowser (z. B. Chrome) und rufen Sie diesen Link auf: http://192.168.0.26/insert_temp.php?temperature=27.5. Denken Sie daran, die IP-Adresse durch Ihre eigene zu ersetzen.
  • Der Webbrowser sollte "Temperatur 27,5 wurde gespeichert" anzeigen.
Arduino Nano 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_arduino]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 27.5 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_arduino]>

Es ist offensichtlich, dass die Temperatur von 27,5 in der Datenbank gespeichert ist. Die folgende Aufgabe besteht darin, einen Code für Arduino Nano zu erstellen, der eine ähnliche HTTP-Anfrage an Ihren PC erzeugt.

7. Schreibe Arduino-Nano-Code

Wir werden den Arduino Nano und das Ethernet Shield für den Test verwenden.

Der untenstehende Arduino-Nano-Code sendet eine HTTP-Anfrage an Ihren PC, mit einer Temperatur von 29,1 °C, die in die Datenbank eingefügt werden soll.

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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/arduino-nano-mysql */ #include <SPI.h> #include <Ethernet.h> // replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; EthernetClient client; int HTTP_PORT = 80; String HTTP_METHOD = "GET"; char HOST_NAME[] = "192.168.0.26"; // change to your PC's IP address String PATH_NAME = "/insert_temp.php"; String queryString = "?temperature=29.1"; void setup() { Serial.begin(9600); // initialize the Ethernet shield using DHCP: if (Ethernet.begin(mac) == 0) { Serial.println("Failed to obtaining an IP address using DHCP"); while(true); } // connect to web server on port 80: if(client.connect(HOST_NAME, HTTP_PORT)) { // if connected: Serial.println("Connected to server"); // make a HTTP request: // send HTTP header client.println(HTTP_METHOD + " " + PATH_NAME + queryString + " HTTP/1.1"); client.println("Host: " + String(HOST_NAME)); client.println("Connection: close"); client.println(); // end HTTP header while(client.connected()) { if(client.available()){ // read an incoming byte from the server and print it to serial monitor: char c = client.read(); Serial.print(c); } } // The server's disconnected, stop the client: client.stop(); Serial.println(); Serial.println("disconnected"); } else {// if not connected: Serial.println("connection failed"); } } void loop() { }

Schnelle Schritte

  • Schließen Sie das Arduino Nano gemäß dem oben gezeigten Verdrahtungsdiagramm an das Ethernet-Modul an.
  • Verbinden Sie ein Ethernetkabel mit dem Ethernet-Modul.
  • Verbinden Sie das Arduino Nano mit einem PC über ein USB-Kabel.
  • Starten Sie die Arduino-IDE auf Ihrem PC.
  • Wählen Sie das Arduino Nano-Board und den entsprechenden COM-Port.
  • Klicken Sie auf das Libraries-Symbol in der linken Leiste der Arduino-IDE.
  • Suchen Sie “Ethernet”, und finden Sie anschließend die Ethernet-Bibliothek von Various.
  • Klicken Sie auf die Install-Schaltfläche, um die Ethernet-Bibliothek zu installieren.
Arduino Nano Ethernet-Bibliothek
  • Passen Sie den Code so an, dass die IP-Adresse des PCs angezeigt wird.
  • Kompilieren Sie den Code und laden Sie ihn auf das Arduino Nano hoch.
  • Öffnen Sie den seriellen Monitor.
  • Die Ausgabe im seriellen Monitor wird die IP-Adresse des Ethernet-Shields anzeigen.
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 die Daten in der Datenbank gespeichert sind, indem Sie den folgenden Befehl in der Eingabeaufforderung eingeben:
SELECT * from tbl_temp;
Command Prompt
MariaDB [db_arduino]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 27.5 | | 2 | 29.1 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_arduino]>

Es ist offensichtlich, dass die Datenbank eine Temperatur von 29,1 speichert.

Wie der Arduino Nano Daten in eine MySQL-Datenbank einfügt, aktualisiert oder daraus abruft

Im obigen Beispiel haben wir gelernt, wie man Daten in eine MySQL-Datenbank einfügt. Das Aktualisieren und Abrufen von Daten aus der Datenbank funktioniert ähnlich. Sie müssen lediglich die MySQL-Abfragen im PHP-Skript anpassen. Weitere Informationen finden Sie unter W3Schools.

※ Notiz:

Um ein hochsicheres System zu bauen, müssten wir zusätzliche Schritte unternehmen (z. B. Verhinderung von MySQL-Injektionen, Umwandlung von HTTPS in eine REST-API, Verwendung des JSON-Formats für Daten usw.). Dieses Tutorial richtet sich jedoch an Anfänger, die mit dem Arduino Nano lernen möchten, daher haben wir es so einfach wie möglich gehalten. Sobald Sie dieses Tutorial abgeschlossen haben, können Sie es erweitern, um fortgeschrittene Funktionen hinzuzufügen.

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!