Arduino Nano - MySQL
De Arduino Nano kan sensorgegevens verzamelen en opslaan in een MySQL database. Daarnaast kan het ook gegevens (zoals commando’s) ophalen uit de MySQL database om apparaten zoals LED’s, motoren en actuatoren aan te sturen.
Deze handleiding begeleidt u bij het gebruik van de Arduino Nano en Ethernet-module om te communiceren met een MySQL database. Specifiek behandelen we:
- De beste manier voor de Arduino Nano om te communiceren met een MySQL database
- Hoe u de Arduino Nano programmeert om data in een MySQL database in te voegen
- Hoe u de Arduino Nano programmeert om data in een MySQL database bij te werken
- Hoe u de Arduino Nano programmeert om data uit een MySQL database op te halen

Hardware Benodigd
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Arduino Nano - MySQL
Als u nieuw bent met systeemarchitectuur, is het prima om de MySQL Database en MySQL Server voorlopig als hetzelfde te zien. Naarmate u meer ervaring krijgt, zult u de verschillen beter begrijpen.
Er zijn twee methoden waarmee de Arduino Nano kan communiceren met een MySQL database:
- Rechtstreeks verbinden met de MySQL Server via een MySQL-verbinding (de directe methode)
- Indirect communiceren met de MySQL Server via een HTTP-verbinding (de indirecte methode)
Laten we de beste optie bekijken.
Arduino Nano communiceert direct met MySQL Server

Dit lijkt misschien eenvoudiger, maar kent verschillende nadelen:
- Het toestaan van een MySQL-gebruikersaccount om op afstand de MySQL-database te benaderen brengt beveiligingsrisico’s met zich mee, zelfs als het account beperkte rechten heeft.
- Het verwerken van data op de Arduino Nano en/of MySQL Server verhoogt de complexiteit van zowel de Arduino Nano-code als de MySQL-scripts, en verbruikt veel van de Arduino Nano’s beperkte bronnen (geheugen en CPU).
- In sommige gevallen kan de MySQL Server een grote hoeveelheid data terugsturen naar de Arduino Nano, wat kan leiden tot een geheugenoverschrijding op de Nano.
- De meeste beschikbare MySQL-bibliotheken ondersteunen geen SSL/TLS, wat betekent dat gevoelige gegevens zoals gebruikersnamen en wachtwoorden onversleuteld verstuurd worden, wat een extra beveiligingsrisico veroorzaakt.
Arduino Nano communiceert indirect met MySQL Server via HTTP/HTTPS
De indirecte methode pakt al deze problemen van de directe methode aan. Voordat we uitleggen hoe dit werkt, laten we eerst bekijken wat de werkwijze is.
Werkwijze
- Stap 1: De Arduino Nano verstuurt een HTTP-verzoek naar de webserver.
- Stap 2: De webserver voert een PHP-script uit.
- Stap 3: Het PHP-script haalt data op uit het HTTP-verzoek, verwerkt deze en communiceert met de MySQL database.
- Stap 4: Het PHP-script verwerkt het resultaat en stuurt dit terug naar de Arduino Nano in een HTTP-respons.

In deze handleiding worden zowel de webserver als de MySQL-server geïnstalleerd op een PC.
Het lijkt misschien ingewikkeld, maar dat is het niet. Zo lost de indirecte methode de problemen van de directe methode op:
- Door MySQL en HTTP-servers op dezelfde machine te installeren, kunnen we het MySQL-gebruikersaccount beperken tot toegang via localhost. Ook worden de MySQL-gebruikersnaam en wachtwoord veilig opgeslagen op de server (stap 3), wat de beveiliging verbetert.
- Data wordt verwerkt door een PHP-script (stappen 3 en 4), waardoor de werklast en complexiteit voor zowel de Arduino Nano als de MySQL-server vermindert. Data verwerken met PHP is veel eenvoudiger dan met Arduino code of MySQL scripts.
- Het PHP-script kan de data filteren en alleen de benodigde informatie terugsturen naar de Arduino Nano (stap 4), dit voorkomt geheugenoverbelasting.
- De meeste Ethernet-/WiFi-bibliotheken ondersteunen TLS/SSL, waardoor we HTTPS-verzoeken kunnen doen. HTTPS zorgt dat data versleuteld en veilig wordt uitgewisseld.
In stap 1 kunnen we een andere gebruikersnaam en wachtwoord gebruiken voor authenticatie tussen Arduino Nano en webserver. Om veiligheidsredenen mogen deze HTTP-inloggegevens niet hetzelfde zijn als de MySQL-gebruikersnaam en wachtwoord.
De volgende handleiding laat zien hoe u de indirecte methode gebruikt met Arduino Nano en MySQL, en verklaart de vele voordelen ervan.
Aansluitschema tussen Arduino Nano en W5500 Ethernet-module

This image is created using Fritzing. Click to enlarge image
Arduino Nano - MySQL via HTTP/HTTPS
Dit zijn de stappen die we volgen:
- Installeer MySQL-server, webserver en PHP op uw PC.
- Zet de MySQL- en webservers aan.
- Maak een MySQL-gebruikersaccount aan.
- Maak een MySQL-database aan.
- Maak een MySQL-tabel aan.
- Schrijf een of meerdere PHP-scriptbestanden.
- Schrijf de Arduino Nano-code.
We doorlopen de procedure stap voor stap.
1. MySQL-server, webserver en PHP installeren op uw PC
Gelukkig bevat de XAMPP-pakket alles wat je nodig hebt.
U hoeft het maar één keer te installeren:
- Download XAMPP via deze link
- Start de installatie.
Na installatie ziet u de map C:\xampp\htdocs op uw computer. Hier plaatst u uw PHP-code (zoals later uitgelegd).
2. Zet MySQL- en webserver aan
- Open het XAMPP Control Panel.
- Klik op de Start-knop om MySQL en de webserver te activeren. (Zie onderstaande afbeelding.)

3. Maak een MySQL-gebruikersaccount aan
We maken een MySQL-account dat alleen verbinding kan maken met de MySQL database via localhost:
- Zelfs als de gebruikersnaam en het wachtwoord bekend worden, kunnen aanvallers de database niet bereiken zonder controle over de computer.
- Omdat PHP en MySQL op dezelfde PC zijn geïnstalleerd, kan PHP deze gebruikersnaam en wachtwoord gebruiken voor verbinding met de MySQL database.
We maken een MySQL-gebruiker aan met de gebruikersnaam Arduino en wachtwoord ArduinoGetStarted.com:
- Open de Opdrachtprompt (Command Prompt) op uw computer. Houd dit venster open tot de handleiding klaar is.
- Typ de volgende opdracht in de Opdrachtprompt:
- Standaard is er een root-account in MySQL zonder wachtwoord.
- Het wordt aanbevolen om er een wachtwoord aan toe te voegen.
Voer dit commando in om your-root-password als wachtwoord voor de root-gebruiker te zetten:
- Voer het volgende commando uit:
- Voer uw root-wachtwoord in en druk op Enter.
- Maak nu de MySQL-gebruiker Arduino met wachtwoord ArduinoGetStarted.com aan door onderstaande opdrachten te kopiëren en in de Opdrachtprompt te plakken:
U heeft nu een MySQL-gebruikersaccount aangemaakt. Onthoud de gebruikersnaam en het wachtwoord, want die zijn nodig voor het PHP-script.
4. Maak een MySQL database aan
We maken een database aan met de naam db_arduino door het volgende commando in te voeren in de Opdrachtprompt:
5. Maak een MySQL tabel aan
Maak een tabel genaamd tbl_temp met onderstaande opdrachten, plakken in de Opdrachtprompt:
6. PHP-bestanden schrijven
Maak een PHP-bestand aan met de naam insert_temp.php. Hiermee wordt de temperatuur uit het HTTP-verzoek gelezen en opgeslagen in de database:
- De uitvoer zou "Temperature 27.5 is saved" moeten zijn.
- Plaats dit bestand in de map C:\xampp\htdocs.
- Zoek het IP-adres van uw PC. Indien onbekend, zoekt u dit online op.
- Om de PHP-code te testen, opent u een webbrowser (bijv. Chrome) en gaat u naar deze link: http://192.168.0.26/insert_temp.php?temperature=27.5. Vervang het IP-adres door uw eigen IP.
- De webbrowser zou "Temperature 27.5 is saved" moeten tonen.

- Controleer in de database of de data is opgeslagen met het volgende commando in de Opdrachtprompt:
Hieruit blijkt dat de temperatuur 27.5 succesvol in de database is opgeslagen. De volgende stap is het schrijven van de Arduino Nano-code die een gelijksoortig HTTP-verzoek naar uw PC verstuurt.
7. Arduino Nano-code schrijven
We gebruiken voor deze test de Arduino Nano en de Ethernet Shield.
De Arduino Nano-code hieronder verstuurt een HTTP-verzoek naar uw PC, met een temperatuurwaarde van 29.1°C, die in de database wordt ingevoegd.
Snelle Stappen
- Verbind de Arduino Nano met de Ethernet-module volgens het hierboven getoonde aansluitschema.
- Sluit een Ethernetkabel aan op de Ethernet-module.
- Verbind de Arduino Nano met uw PC via een USB-kabel.
- Start de Arduino IDE op uw PC.
- Selecteer het bord Arduino Nano en de bijbehorende COM-poort.
- Klik op het Libraries icoon in de linkerzijbalk van de Arduino IDE.
- Zoek op “Ethernet” en selecteer de Ethernet-bibliotheek van Various.
- Klik op de knop Installeren om de Ethernet-bibliotheek te installeren.

- Pas de code aan met het IP-adres van uw PC.
- Compileer en upload de code naar de Arduino Nano.
- Open de Seriële Monitor.
- Op de Seriële Monitor verschijnt het IP-adres van het Ethernet Shield.
- Controleer of de data is opgeslagen in de database met onderstaand commando in de Opdrachtprompt:
Zo blijkt dat de database nu ook temperatuur 29.1 bevat.
Hoe Arduino Nano data invoegt, bijwerkt of ophaalt uit een MySQL database
In het vorige voorbeeld hebben we geleerd hoe we data aan een MySQL database toevoegen. Het bijwerken en ophalen van data werkt op vergelijkbare wijze. U hoeft alleen de MySQL-query’s in het PHP-script aan te passen. Voor meer informatie kunt u terecht bij W3Schools.
※ Notiz:
Voor het bouwen van een zeer veilig systeem dienen extra maatregelen genomen te worden (bijv. voorkomen van SQL-injectie, HTTPS omzetten naar een REST API, gebruik van JSON-format voor data, enzovoorts). Deze tutorial is bedoeld voor beginners om met Arduino Nano te leren, daarom is het zo eenvoudig mogelijk gehouden. Na deze tutorial kunt u altijd uitbreiden met meer geavanceerde functies.
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.