Arduino - MySQL
Arduino kan sensorwaarden verzamelen en opslaan in een MySQL database. Arduino kan ook data (commando’s) ophalen uit een MySQL database om een LED, motor, actuator of ander apparaat te besturen.
In deze tutorial leert u:
- De beste manier voor Arduino om te communiceren met een MySQL database
- Hoe Arduino data toevoegt aan een MySQL database
- Hoe Arduino data bijwerkt in een MySQL database
- Hoe Arduino data ophaalt uit een MySQL database

Deze tutorial bevat Arduino-code voor twee situaties:
- Arduino Uno R4 WiFi
- Arduino Uno/Mega met Ethernet Shield
Benodigde Hardware
| 1 | × | Arduino UNO R4 WiFi | |
| 1 | × | Alternatief: DIYables STEM V4 IoT | |
| 1 | × | USB-kabel Type-C |
Alternatief bij gebruik van Ethernet:
Of u kunt de volgende kits kopen:
| 1 | × | DIYables Sensorkit (30 sensoren/displays) | |
| 1 | × | DIYables Sensorkit (18 sensoren/displays) |
Arduino - MySQL
Als u nog niet veel weet over systeemarchitectuur, kunnen de twee termen MySQL Database en MySQL Server als hetzelfde worden beschouwd. De verschillen ontdekt u later zodra u meer kennis opdoet over systeemarchitectuur.
Er zijn twee methoden waarop Arduino kan communiceren met een MySQL database:
- Arduino communiceert direct met MySQL Server via een MySQL-verbinding (directe manier)
- Arduino communiceert indirect met MySQL Server via een HTTP-verbinding (indirecte manier)
Laten we de beste methode bekijken.
Arduino communiceert direct met MySQL Server

Deze methode lijkt eenvoudiger, maar kent veel nadelen:
- Dit geeft een MySQL-gebruikersaccount de mogelijkheid om op afstand toegang te verkrijgen tot de MySQL database ⇒ Dit is een beveiligingsrisico, ook als er beperkte rechten zijn toegekend aan het gebruikersaccount.
- De data MOET worden verwerkt op de Arduino en/of de MySQL server ⇒ Dit maakt de Arduino-code en MySQL-scripts complexer. Vooral verbruikt het veel Arduino-bronnen (geheugen en CPU).
- De MySQL server kan in sommige gevallen grote hoeveelheden data terugsturen naar Arduino ⇒ Dit kan leiden tot geheugenoverschrijding op Arduino.
- De meeste beschikbare MySQL bibliotheken ondersteunen geen SSL/TLS. De gegevens, inclusief gebruikersnaam/wachtwoord, worden in platte tekst verzonden ⇒ Een extra beveiligingsprobleem.
Arduino communiceert indirect met MySQL Server via HTTP/HTTPS
Deze indirecte methode lost alle problemen op die de directe manier heeft. Voordat we uitleggen hoe de indirecte manier deze nadelen omzeilt, eerst hoe het werkt:
Hoe het werkt
- Stap 1: Arduino 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 via HTTP-response terug naar Arduino

In deze tutorial worden de Webserver en MySQL-server geïnstalleerd op een PC.
Het lijkt ingewikkeld, maar dat is het niet. Laten we nu kijken hoe de indirecte manier de nadelen van de directe manier oplost:
- Door MySQL-server en HTTP-server op dezelfde fysieke server te installeren, kan het MySQL-gebruikersaccount worden beperkt tot toegang via localhost. Bovendien worden gebruikersnaam en wachtwoord van het MySQL-account opgeslagen op de server (stap 3), wat de beveiliging verbetert.
- Data wordt verwerkt door het PHP-script (stap 3 en 4). Dit vermindert de werklast en complexiteit voor zowel Arduino als MySQL-server. Data verwerken met PHP is veel eenvoudiger dan met Arduino-code en MySQL-scripts.
- Het PHP-script kan de data filteren en alleen de noodzakelijke informatie terugsturen naar Arduino (stap 4), zodat Arduino geen geheugenproblemen krijgt.
- De meeste Ethernet- en WiFi-bibliotheken ondersteunen TLS/SSL, wat het mogelijk maakt om HTTPS-verzoeken te doen. HTTPS zorgt voor versleuteling en veilige overdracht van data via internet.
Bij stap 1 kunt u een aparte gebruikersnaam/wachtwoord gebruiken voor authenticatie tussen Arduino en Webserver. Let op: deze HTTP-gebruikersnaam/wachtwoord moet om veiligheidsredenen verschillen van die van MySQL.
Met deze voordelen zal de rest van deze tutorial uitleggen hoe Arduino MySQL gebruikt via de indirecte methode.
Arduino - MySQL via HTTP/HTTPS
We doorlopen de volgende stappen:
- Installeer MySQL-server, Webserver en PHP op uw PC
- Activeer MySQL- en Webserver
- Maak een MySQL-gebruikersaccount aan
- Maak een MySQL-database aan
- Maak een MySQL-tabel aan
- Schrijf één of meerdere PHP-scriptbestanden
- Schrijf Arduino-code
Laten we stap voor stap beginnen.
1. Installeer MySQL-server, Webserver en PHP op uw PC
Gelukkig bevat het XAMPP-pakket dit allemaal. U hoeft dit slechts één keer te installeren
- Download XAMPP via deze link
- Installeer het
Na installatie vindt u de map C:\xampp\htdocs op uw PC. Hier plaatst u PHP-code (zie later).
2. Activeer MySQL- en Webserver
- Open het XAMPP Control Panel
- Klik op de knop Start om MySQL en Webserver te activeren (zie onderstaande afbeelding)

3. Maak een MySQL-gebruikersaccount aan
We maken een MySQL-account aan dat alleen verbinding mag maken vanuit localhost.
- Zelfs als gebruikersnaam/wachtwoord uitlekken, kunnen hackers niet bij uw database tenzij ze controle over uw PC krijgen.
- Omdat PHP en MySQL op dezelfde PC draaien, kan PHP dit gebruikersnaam/wachtwoord gebruiken om verbinding te maken met de database.
Laten we een MySQL-gebruiker aanmaken met gebruikersnaam Arduino en wachtwoord ArduinoGetStarted.com:
- Open de Opdrachtprompt op uw PC. Sluit deze niet tot het einde van de tutorial.
- Typ de volgende opdracht in de Opdrachtprompt:
- Standaard heeft MySQL de root-account zonder wachtwoord. U kunt een wachtwoord toevoegen, bijvoorbeeld your-root-password, door de volgende opdracht te typen:
- Typ vervolgens de volgende opdracht om in te loggen bij MySQL:
- Voer uw root-wachtwoord in en druk op Enter
- Maak het MySQL-gebruikersaccount aan met de volgende opdrachten (kopieer en plak in de prompt):
U heeft nu succesvol een MySQL-gebruikersaccount aangemaakt. Onthoud de gebruikersnaam en het wachtwoord, deze gebruikt u in het PHP-script.
4. Maak een MySQL-database aan
Creëer een database met de naam db_arduino met de volgende opdracht:
5. Maak een MySQL-tabel aan
Maak een tabel met de naam tbl_temp door onderstaande opdrachten te kopiëren en plakken:
6. Schrijf één of meerdere PHP-bestanden
Maak een PHP-bestand met de naam insert_temp.php dat de temperatuur uit het HTTP-verzoek haalt en deze in de database invoegt.
- Plaats dit bestand in de map C:\xampp\htdocs
- Zoek het IP-adres van uw PC op. Als u niet weet hoe, zoek het via Google.
- Test de PHP-code door een webbrowser te openen (bijvoorbeeld Chrome) en deze link te openen: http://192.168.0.26/insert_temp.php?temperature=27.5 (Vervang het IP-adres door dat van uw PC).
- De output in de webbrowser zal als volgt zijn:

- Controleer of de data in de database is opgeslagen door in Command Prompt de volgende opdracht te typen:
Zoals u ziet, is de temperatuur 27.5 opgeslagen in de database. De volgende stap is de Arduino-code te schrijven die een vergelijkbaar HTTP-verzoek naar uw PC maakt.
7. Schrijf Arduino-code
We gebruiken Arduino Uno en de Ethernet Shield of Arduino Uno R4 WiFi voor de test.
De onderstaande Arduino-code maakt een HTTP-verzoek naar uw PC om een temperatuur van 29.1°C in de database in te voegen.
Arduino-code voor Arduino Uno R4 WiFi
Arduino-code voor Arduino Uno/Mega en Ethernet Shield
Snelle stappen
- Indien u de Ethernet Shield gebruikt, stapel deze op de Arduino Uno
- Verbind de Ethernet-kabel met de Ethernet Shield
- Verbind Arduino Uno met de PC via USB-kabel
- Pas het IP-adres in de code aan naar het IP-adres van uw PC
- Compileer en upload de code naar Arduino
- Open de Serial Monitor
- Resultaat in de Serial Monitor:
- Controleer of de data is opgeslagen in database met de volgende opdracht:
Zoals u ziet, is ook de temperatuur 29.1 opgeslagen in de database.
Hoe Arduino data invoegt, bijwerkt of ophaalt uit de MySQL database
In het bovenstaande voorbeeld hebben we geleerd hoe data in de MySQL database wordt ingevoegd. Voor bijwerken en ophalen van data gaat het vergelijkbaar. U hoeft alleen de MySQL-query’s in het PHP-script aan te passen. Meer leren kan via W3Schools.
Geavanceerd gebruik
Om de beveiliging te verhogen:
- U kunt de Arduino-code aanpassen om HTTPS te gebruiken in plaats van HTTP. Zie Arduino - HTTPS
- U kunt username en password gebruiken voor authenticatie tussen Arduino en Webserver. Zie Basic access authentication
※ Notiz:
Voor een compleet systeem met het hoogste veiligheidsniveau is meer nodig (zoals bescherming tegen MySQL-injecties, het omzetten van HTTPS naar een REST API, data in Json-formaat verzenden, enzovoorts). Deze tutorial is echter bedoeld voor beginners. We hebben het zo eenvoudig mogelijk gehouden. Na het leren van deze tutorial kunt u het verder uitbreiden.
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.