Arduino UNO R4 - MySQL

Deze tutorial legt u uit hoe u Arduino UNO R4 gebruikt om gegevens van sensoren te verzamelen en op te slaan in een MySQL database. In detail zullen we leren:

Arduino UNO R4 MySQL

Arduino UNO R4 - MySQL

De Arduino UNO R4 kan op twee verschillende manieren verbinding maken met de MySQL database:

  • Arduino UNO R4 verbindt direct met MySQL Server met behulp van een MySQL protocol (dit is de directe methode).
  • Arduino UNO R4 verbindt met MySQL Server via een HTTP protocol (dit is de indirecte methode).

Laten we kijken welke beter is.

Arduino UNO R4 interacteert direct met MySQL Server

arduino directly to MySQL

Dit lijkt misschien eenvoudig, maar er zijn verschillende nadelen:

  • Het toestaan van een MySQL-gebruiker om op afstand toegang te krijgen tot de database kan risicovol zijn voor de beveiliging, zelfs met beperkte gebruikersrechten.
  • Het verwerken van gegevens in Arduino UNO R4 of een MySQL server maakt de Arduino-code en MySQL-script complexer en gebruikt veel Arduino geheugen en CPU.
  • De MySQL server kan een grote hoeveelheid gegevens naar Arduino UNO R4 sturen, wat ertoe kan leiden dat het geheugen opraakt.
  • Veel MySQL bibliotheken ondersteunen geen SSL/TLS, wat betekent dat gebruikersnamen en wachtwoorden zonder versleuteling worden verzonden, wat een ander beveiligingsrisico vormt.

Arduino UNO R4 interacteert indirect met MySQL Server via HTTP/HTTPS

Deze indirecte methode lost alle problemen op die de directe methode heeft. Laten we eerst kijken hoe deze indirecte methode werkt voordat we onderzoeken hoe het de problemen van de directe methode vermijdt.

Hoe het werkt

  • Stap 1: Arduino UNO R4 stuurt een HTTP Request naar Web Server
  • Stap 2: Web Server voert PHP script uit
  • Stap 3: PHP script ontvangt gegevens van HTTP Request, verwerkt deze en communiceert met MySQL database.
  • Stap 4: PHP script verwerkt de resultaten en stuurt ze terug naar Arduino UNO R4 via HTTP Response
Arduino UNO R4 MySQL HTTP

Deze gids legt u ook uit hoe u een webserver en MySQL server op uw PC installeert. Het lijkt complex, maar dat is het niet.

Nu gaan we onderzoeken hoe de indirecte methode helpt om de nadelen van de directe methode te vermijden.

  • Door de MySQL server en HTTP server op dezelfde machine te plaatsen, kunt u het MySQL gebruikersaccount zo instellen dat het alleen toegang heeft vanaf die machine. De gebruikersnaam en het wachtwoord voor dit account worden opgeslagen op de server (genoemd in stap 3), wat helpt om de beveiliging te verhogen.
  • Een PHP script (stappen 3 en 4) verwerkt de gegevens. Dit maakt dingen eenvoudiger en minder complex voor zowel de Arduino UNO R4 als de MySQL servers. Het gebruik van PHP voor gegevensverwerking is makkelijker dan het gebruik van Arduino UNO R4 code of MySQL scripts.
  • Het PHP script verwerkt de gegevens en stuurt vervolgens alleen wat nodig is naar de Arduino UNO R4 (stap 4). Dit helpt om te voorkomen dat de Arduino UNO R4 zonder geheugen komt te zitten.
  • De meeste Ethernet/WiFi bibliotheken ondersteunen TLS/SSL, waardoor HTTPS requests mogelijk zijn. Met HTTPS worden gegevens versleuteld en veilig over het internet verzonden.

In stap 1 kunt u een andere gebruikersnaam en wachtwoord gebruiken om de Arduino UNO R4 met de webserver te verbinden. Het is belangrijk dat de HTTP gebruikersnaam en wachtwoord niet hetzelfde zijn als de MySQL gebruikersnaam en wachtwoord om de beveiliging te waarborgen.

Deze gids laat zien hoe u Arduino UNO R4 indirect met MySQL verbindt.

Arduino UNO R4 - MySQL via HTTP/HTTPS

We moeten de volgende stappen nemen:

  • MySQL server, webserver en PHP op uw computer installeren
  • MySQL en webserver inschakelen
  • Een MySQL gebruikersaccount aanmaken
  • Een MySQL database aanmaken
  • Een MySQL tabel aanmaken
  • PHP scripts schrijven
  • Arduino UNO R4 programmeren

Laten we dit stap voor stap doen.

MySQL server, webserver en PHP op uw PC installeren

Het XAMPP pakket bevat alles. We hoeven het maar één keer te installeren.

  • Download XAMPP van deze link
  • Installeer het.

Na installatie verschijnt de map genaamd C:\xampp\htdocs op uw PC. Deze map zal de PHP code bevatten (later uitgelegd).

MySQL en webserver inschakelen

  • Open het XAMPL Control Panel
  • Klik op de Start knop om MySQL en de webserver in te schakelen (Zie de onderstaande afbeelding)
Arduino UNO R4 XAMPP

Een MySQL gebruikersaccount aanmaken

We gaan een MySQL account instellen dat alleen vanaf de lokale computer toegang heeft tot de MySQL database.

  • Zelfs als iemand uw gebruikersnaam en wachtwoord kent, kunnen ze niet op afstand in uw MySQL database komen.
  • Omdat PHP en MySQL op dezelfde PC staan, kan PHP de gebruikersnaam en het wachtwoord gebruiken om verbinding te maken met de MySQL database.

Laten we een MySQL gebruikersaccount aanmaken met de gebruikersnaam ArduinoUnoR4 en het wachtwoord newbiely.com.

  • Open Command Prompt op uw computer. Houd het open tot u de tutorial hebt voltooid.
  • Voer deze command in Command Prompt in:
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\youruser>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>
  • MySQL's standaardinstelling bevat een root account dat geen wachtwoord heeft. Het wordt aanbevolen om een wachtwoord voor dit account aan te maken.

Typ de volgende command in Command Prompt om het root account wachtwoord in te stellen: (bijv. YOUR-ROOT-PASSWORD)

mysqladmin -u root password YOUR-ROOT-PASSWORD
Command Prompt
C:\xampp\mysql\bin>mysqladmin -u root password YOUR-ROOT-PASSWORD C:\xampp\mysql\bin>
  • Voer deze command in Command Prompt in:
mysql.exe -u root -p
  • Voer uw root wachtwoord in en druk op 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)]>
  • Maak een MySQL gebruikersaccount aan met de gebruikersnaam 'ArduinoUnoR4' en het wachtwoord 'newbiely.com'. Kopieer de volgende commands en plak ze in Command Prompt:
CREATE USER 'ArduinoUnoR4'@'localhost' IDENTIFIED BY 'newbiely.com'; GRANT ALL PRIVILEGES ON *.* TO 'ArduinoUnoR4'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
Command Prompt
MariaDB [(none)]> CREATE USER 'ArduinoUnoR4'@'localhost' IDENTIFIED BY 'newbiely.com'; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'ArduinoUnoR4'@'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)]>

U hebt nu succesvol een MySQL gebruikersaccount aangemaakt. Onthoud de gebruikersnaam en het wachtwoord, aangezien u deze nodig heeft voor het PHP script.

Een MySQL database aanmaken

Maak een database genaamd db_arduino aan door deze command in Command Prompt in te voeren:

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)]>

Een MySQL tabel aanmaken

Laten we een tabel maken genaamd tbl_temperature. Kopieer de volgende commands en plak ze in Command Prompt:

USE db_arduino; CREATE TABLE tbl_temperature ( 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_temperature ( -> 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]>

Een of meer PHP bestanden schrijven

Maak een PHP bestand genaamd insert_temp.php aan in C:\xampp\htdocs

<?php if(isset($_GET["temperature"])) { $temperature = $_GET["temperature"]; // get temperature value from HTTP GET $servername = "localhost"; $username = "ArduinoUnoR4"; $password = "newbiely.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_temperature (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"; } ?>

Deze PHP code neemt temperatuur van HTTP Request en voegt het in de database in.

  • Zoek het IP-adres van uw computer op. Zoek op Google als u niet zeker weet hoe u dit moet vinden.
  • Om te controleren of de PHP code werkt, open een webbrowser (zoals Chrome) en ga naar deze link: http://192.168.0.4/insert_temp.php?temperature=25.3. Vergeet niet om uw eigen computer IP-adres te gebruiken in plaats van "192.168.0.4".
  • U ziet de resultaten weergegeven in uw webbrowser.
MySQL Test
  • Om te zien of de gegevens in de database zijn opgeslagen, typ deze command in Command Prompt:
SELECT * from tbl_temperature;
Command Prompt
MariaDB [db_arduino]> SELECT * from tbl_temperature; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 25.3 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_arduino]>

De temperatuur 25.3 is opgeslagen in de database. Vervolgens moeten we de Arduino UNO R4 programmeren om een soortgelijk HTTP request naar uw computer te sturen.

Arduino UNO R4 code schrijven

Deze Arduino UNO R4 code stuurt een HTTP request naar uw computer om een temperatuur van 30.5°C aan de database toe te voegen.

Arduino UNO R4 Code voor Arduino UNO R4 R4 WiFi

/* * Deze Arduino UNO R4 code is ontwikkeld door newbiely.nl * Deze Arduino UNO R4 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-uno-r4/arduino-uno-r4-mysql */ #include <WiFiS3.h> const char ssid[] = "YOUR_WIFI_SSID"; // change your network SSID (name) const char pass[] = "YOUR_WIFI_PASSWORD"; // change your network password (use for WPA, or use as key for WEP) WiFiClient client; int status = WL_IDLE_STATUS; int HTTP_PORT = 80; String HTTP_METHOD = "GET"; char HOST_NAME[] = "192.168.0.4"; // change to your PC's IP address String PATH_NAME = "/insert_temp.php"; String queryString = "?temperature=30.5"; void setup() { Serial.begin(9600); // check for the WiFi module: if (WiFi.status() == WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); // don't continue while (true) ; } String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); } // attempt to connect to WiFi network: while (status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } // print your board's IP address: Serial.print("IP Address: "); Serial.println(WiFi.localIP()); // 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() { }

Snelle Stappen

Volg deze instructies stap voor stap:

  • Als dit uw eerste keer is met de Arduino Uno R4 WiFi/Minima, raadpleeg dan de tutorial over het instellen van de omgeving voor Arduino Uno R4 WiFi/Minima in de Arduino IDE.
  • Verbind de Arduino Uno R4 board met uw computer met behulp van een USB kabel.
  • Start de Arduino IDE op uw computer.
  • Selecteer de juiste Arduino Uno R4 board (bijv., Arduino Uno R4 WiFi) en COM poort.
  • Vervang het IP-adres in de code door het IP-adres van uw computer.
  • Compileer en upload de code naar de Arduino UNO R4.
  • Open de Serial Monitor.
  • Bekijk de uitvoer op de 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  
  • Om te zien of de informatie in de database is opgeslagen, typ deze command in Command Prompt:
SELECT * from tbl_temperature;
Command Prompt
MariaDB [db_arduino]> SELECT * from tbl_temperature; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 25.3 | | 2 | 30.5 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_arduino]>

De temperatuur 30.5 is opgeslagen in de database.

Hoe Arduino UNO R4 gegevens invoegt, bijwerkt of ophaalt naar/van MySQL database

In het voorbeeld hebben we geleerd hoe we gegevens aan de MySQL database kunnen toevoegen. Om gegevens bij te werken of op te halen, is het proces vergelijkbaar. Verander gewoon de MySQL queries in het PHP script. Voor meer informatie, bezoek W3Schools.

Geavanceerd Gebruik

Om de beveiliging te verbeteren,

  • Kunt u de code van Arduino UNO R4 aanpassen om HTTPS in plaats van HTTP te gebruiken. Voor hoe dit te doen, bezoek Arduino UNO R4 - HTTPS.
  • Kunt u authenticatie gebruiken met een gebruikersnaam en wachtwoord bij het verbinden van de Arduino UNO R4 met een webserver. Leer meer op Basic access authentication.

※ Notiz:

Om een volledig systeem met topbeveiliging te creëren, moeten we meer functies toevoegen (zoals het voorkomen van MySQL injectie, HTTPS omzetten naar REST API, en JSON formaat gebruiken voor gegevens). Deze gids is echter bedoeld voor beginners die Arduino UNO R4 leren. We hebben het zeer eenvoudig gehouden. Nadat u deze gids hebt voltooid, kunt u meer geavanceerde onderwerpen leren.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Reacties

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!