ESP32 - MySQL

Deze tutorial legt uit hoe u met ESP32 data naar een MySQL database kunt invoegen of bijwerken, of data uit een MySQL database kunt uitlezen.

ESP32 MySQL

Benodigde Hardware

1×ESP32 ESP-WROOM-32 Ontwikkelingsmodule
1×USB-kabel Type-C
1×(optioneel) DC-stroomaansluiting
1×Breadboard (experimenteerprint)
1×Jumper wires (verbindingsdraadjes)
1×(Aanbevolen) Schroefklem Uitbreidingsboard voor ESP32
1×(Aanbevolen) Breakout Expansion Board for ESP32
1×(Aanbevolen) Stromsplitter voor ESP32

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

ESP32 - MySQL

Er zijn twee termen in MySQL die beginners vaak verwarren: MySQL Database en MySQL server. Dit zijn verschillende begrippen. Als beginner kunt u er echter vanuit gaan dat ze hetzelfde zijn. Later ontdekt u de verschillen tijdens het leerproces.

De ESP32 kan op twee manieren interactie hebben met de MySQL database:

  • Direct: de ESP32 maakt rechtstreeks verbinding met de MySQL server en communiceert via het MySQL protocol
  • Indirect: de ESP32 maakt indirect verbinding met de MySQL server via een webserver met behulp van HTTP/HTTPS protocol

Welke methode is het beste voor ESP32? Laten we het ontdekken!

ESP32 maakt directe verbinding met MySQL Server

ESP32 direct met MySQL

Directe interactie met MySQL lijkt eenvoudig, maar kent veel nadelen:

  • We moeten remote toegang verlenen aan een MySQL-gebruikersaccount ⇒ Dit is een beveiligingsrisico, ook als we beperkte rechten geven aan dat gebruikersaccount.
  • ESP32 MOET MySQL queries opslaan en verzenden naar de MySQL server ⇒ Dit vereist veel ESP32-code en belast de ESP32 resources (geheugen en CPU).
  • ESP32 MOET complexe MySQL reacties verwerken (soms grote hoeveelheden data) ⇒ dit kan ervoor zorgen dat ESP32 geheugen tekort komt
  • De MySQL server moet ruwe data verwerken ⇒ verhoogt de complexiteit van MySQL scripts
  • De meeste MySQL libraries voor ESP32 ondersteunen geen SSL/TLS ⇒ data en gebruikersnaam/wachtwoord worden zonder encryptie verzonden ⇒ nog een beveiligingsprobleem

ESP32 maakt indirecte verbinding met MySQL Server via HTTP/HTTPS

Interacties via HTTP/HTTPS via een webserver verhelpen alle problemen van directe toegang.

Hoe werkt het

  • Stap 1: ESP32 voegt data toe aan een HTTP/HTTPS verzoek en stuurt dit verzoek naar de webserver
  • Stap 2: De webserver voert een PHP-script uit dat het verzoek van ESP32 verwerkt
  • Stap 3: Het PHP-script haalt data uit het HTTP-verzoek, verwerkt deze en communiceert met de MySQL database
  • Stap 4: Het PHP-script verwerkt het resultaat en stuurt alleen de benodigde gegevens terug naar de ESP32 via het HTTP-antwoord
ESP32 MySQL HTTP

We gaan MySQL server, webserver en PHP installeren op de PC. In de praktijk kunt u dit ook op een dedicated server of cloudservice zoals AWS EC2 installeren.

Dit is hoe de indirecte methode de problemen van directe toegang oplost:

  • We kunnen HTTP-server en MySQL server op dezelfde fysieke server installeren en toegang voor de MySQL-gebruiker beperken (bijv. alleen localhost-toegang) ⇒ veilig
  • De gebruikersnaam/wachtwoord voor MySQL wordt alleen op de server opgeslagen ⇒ veilig
  • Data wordt verwerkt door een PHP-script ⇒ dit vermindert de belasting en complexiteit voor zowel ESP32 als MySQL-server
  • PHP-script is eenvoudiger dan ESP32-code en MySQL-scripts ⇒ vereenvoudigt code
  • PHP-script kan data filteren en alleen benodigde data terugsturen naar ESP32 (Stap 4), zodat ESP32 niet zonder geheugen komt
  • ESP32 kan eenvoudig HTTPS verzoeken versturen ⇒ data is versleuteld

Let op: authenticatie tussen ESP32 en webserver moet los staan van MySQL-authenticatie. Bijvoorbeeld, de HTTP gebruikersnaam/wachtwoord moet anders zijn dan die voor MySQL.

Vanwege deze voordelen gebruiken we in deze tutorial de indirecte methode.

ESP32 naar MySQL via HTTP/HTTPS

Dit zijn de stappen die u moet uitvoeren:

  • Installeren van XAMPP-pakket dat MySQL server, webserver en PHP bevat op uw PC
  • Aanmaken van MySQL gebruikersaccount
  • Aanmaken van een MySQL database
  • Aanmaken van een MySQL tabel
  • Schrijven van een of meer PHP-scriptbestanden
  • Schrijven van ESP32-code

1. Installeren van MySQL server, webserver en PHP op uw PC

  • Download en installeer XAMPP via deze link. Controleer na installatie de map C:\xampp\htdocs op uw PC. Dit is de locatie waar u PHP-code plaatst (later meer).
  • Open het XAMPP Control Panel
  • Klik op de Start knoppen om MySQL en de webserver te starten (zie onderstaande afbeelding)
ESP32 XAMPP

2. Aanmaken van een MySQL gebruikersaccount

We maken een MySQL gebruiker aan met alleen localhost toegangsrechten.

  • Zelfs als hackers de gebruikersnaam/wachtwoord achterhalen, kunnen ze niet in uw MySQL database tenzij ze ook controle hebben over uw PC
  • Deze gebruikersnaam/wachtwoord gebruiken we in PHP-scripts om verbinding te maken met de MySQL database

Deze tutorial maakt een MySQL-gebruiker aan met gebruikersnaam ESP32 en wachtwoord newbiely.com:

  • Open de Opdrachtprompt op uw PC. Sluit deze niet voordat u klaar bent met de tutorial.
  • Typ het volgende commando in de Opdrachtprompt:
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\UW_GEBRUIKERSNAAM>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>
  • Standaard heeft MySQL het root-account zonder wachtwoord. Het wordt sterk aangeraden om een wachtwoord in te stellen voor root (bijv. YOUR_ROOT_PASSWORD) vanwege beveiligingsredenen. Typ het onderstaande commando in de opdrachtprompt:
mysqladmin -u root password YOUR_ROOT_PASSWORD
Command Prompt
C:\xampp\mysql\bin>mysqladmin -u root password YOUR_ROOT_PASSWORD C:\xampp\mysql\bin>
  • Typ het onderstaande commando in de opdrachtprompt om in te loggen op de MySQL-server:
mysql.exe -u root -p
  • Typ YOUR_ROOT_PASSWORD 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 nu een MySQL-gebruiker aan met gebruikersnaam ESP32 en wachtwoord newbiely.com door de onderstaande commando's te kopiëren en te plakken in de opdrachtprompt:
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)]>

U heeft nu succesvol een MySQL-gebruikersaccount aangemaakt. Noteer de gebruikersnaam en het wachtwoord, die hebt u nodig in het PHP-script.

3. Aanmaken van een MySQL database

Maak een database aan met de naam db_esp32 door het volgende commando in te voeren in de opdrachtprompt:

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

4. Aanmaken van een MySQL tabel

Maak een tabel tbl_temp aan door de volgende commando's te kopiëren en in de opdrachtprompt te plakken:

USE db_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_esp32; Database changed MariaDB [db_esp32]> MariaDB [db_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_esp32]>

6. PHP script schrijven

Maak een bestand genaamd insert_temp.php aan met een teksteditor (bijv. Kladblok/Notepad++). In dit script lezen we de temperatuurwaarde uit het HTTP-verzoek en voegen die toe aan de database.

<?php if(isset($_GET["temperature"])) { $temperature = $_GET["temperature"]; // haal temperatuurwaarde op uit HTTP GET $servername = "localhost"; $username = "ESP32"; $password = "newbiely.com"; $database_name = "db_esp32"; // Maak MySQL-verbinding vanuit PHP naar MySQL server $connection = new mysqli($servername, $username, $password, $database_name); // Controleer verbinding 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"; } ?>
  • Plaats dit bestand in de map C:\xampp\htdocs
  • Zoek het IP-adres van uw PC op. Als u niet weet hoe dat moet, zoek het op via Google.
  • Test de PHP-code via een webbrowser (bijv. Chrome) door naar de volgende URL te gaan: http://192.168.0.19/insert_temp.php?temperature=26.2. Vervang dit IP-adres door het IP-adres van uw PC.
  • De webbrowser toont het volgende:
MySQL Test
  • Controleer of de gegevens in de database zijn opgeslagen door in de opdrachtprompt de volgende query uit te voeren:
SELECT * from tbl_temp;
Command Prompt
MariaDB [db_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_esp32]>

Zoals u ziet, is de temperatuurwaarde 26.2 opgeslagen in de database. De volgende stap is het schrijven van ESP32-code die een HTTP-verzoek naar de webserver op uw PC stuurt.

7. ESP32 code schrijven

De onderstaande ESP32 code maakt een HTTP-verzoek naar uw PC om een temperatuur van 30.5°C in de database in te voegen.

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-mysql */ #include <WiFi.h> #include <HTTPClient.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; 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() { }

Snelle stappen

  • Als u ESP32 voor het eerst gebruikt, bekijk dan hoe u de omgeving instelt voor ESP32 in de Arduino IDE.
  • Maak de verbindingen volgens bovenstaande afbeelding.
  • Verbind de ESP32 met uw PC via een micro USB-kabel
  • Pas het IP-adres in de code aan naar het IP-adres van uw PC
  • Compileer en upload de code naar de ESP32
  • Open de Seriële Monitor in de Arduino IDE
Hoe seriële monitor openen in Arduino IDE
  • Resultaat in de Seriële 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  
  • Controleer of de data in de database is opgeslagen met het volgende commando in de opdrachtprompt:
SELECT * from tbl_temp;
Command Prompt
MariaDB [db_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | | 2 | 30.5 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_esp32]>

Zoals u ziet, is temperatuur 30.5 succesvol toegevoegd aan de database.

Hoe ESP32 data in MySQL invoegt, bijwerkt of uitleest

Het bovenstaande voorbeeld toont hoe u data invoegt in MySQL. Voor het bijwerken of uitlezen van data wijzigt u alleen de MySQL query in de PHP-code. Meer leren? Zie W3Schools.com

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.

※ 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!