Dalam banyak proyek Internet of Things (IoT), menyimpan data sensor ke dalam database merupakan salah satu kebutuhan utama. Data yang tersimpan dapat digunakan untuk membuat dashboard monitoring, analisis historis, hingga mengendalikan perangkat secara otomatis berdasarkan data yang telah dikumpulkan. Salah satu database yang paling banyak digunakan adalah MySQL. Namun, muncul pertanyaan yang sering diajukan oleh pemula, yaitu apakah ESP32 dapat terhubung langsung ke database MySQL? Jawabannya adalah bisa, tetapi bukan merupakan metode yang direkomendasikan karena memiliki berbagai keterbatasan, terutama dari sisi keamanan dan penggunaan sumber daya. Pada artikel ini, Anda akan mempelajari cara terbaik menghubungkan ESP32 dengan database MySQL, yaitu melalui Web Server menggunakan protokol HTTP/HTTPS. Metode ini jauh lebih aman, lebih ringan untuk ESP32, serta lebih mudah dikembangkan ketika proyek IoT semakin besar.
Perangkat Keras yang Dibutuhkan
Sebelum memulai, siapkan beberapa komponen berikut:
- ESP32 DevKit ESP-WROOM-32 (38 Pin)
- Kabel USB
Selain perangkat keras, Anda juga membutuhkan sebuah komputer yang nantinya akan berfungsi sebagai Web Server sekaligus Database Server selama proses pengembangan.
Memahami Hubungan ESP32 dengan MySQL
Sebelum masuk ke tahap instalasi dan pemrograman, penting untuk memahami terlebih dahulu bagaimana sebenarnya ESP32 dapat berkomunikasi dengan database MySQL. Banyak pemula menganggap MySQL Database dan MySQL Server adalah hal yang sama. Padahal keduanya memiliki fungsi yang berbeda:
- MySQL Server merupakan aplikasi yang menjalankan layanan database.
- MySQL Database adalah kumpulan data yang disimpan dan dikelola oleh MySQL Server.
Meskipun berbeda, pada tahap awal pembelajaran Anda dapat menganggap keduanya saling berkaitan sehingga lebih mudah dipahami. Secara umum, terdapat dua metode untuk menghubungkan ESP32 dengan MySQL.
ESP32 Terhubung Langsung ke MySQL Server
Pada metode ini, ESP32 melakukan koneksi langsung ke server MySQL menggunakan protokol MySQL tanpa melalui aplikasi perantara. Sekilas metode ini terlihat sederhana karena hanya melibatkan dua perangkat. Namun dalam praktiknya, metode ini jarang digunakan pada sistem IoT modern.
Kekurangan Koneksi Langsung ke MySQL
Meksipun dapat dilakukan, koneksi langsung memiliki sejumlah kelemahan yang cukup serius.
1. Risiko Keamanan Lebih Tinggi
Agar ESP32 dapat mengakses database, server MySQL harus mengizinkan akses jarak jauh (Remote Access). Artinya, server database akan terbuka terhadap koneksi dari jaringan luar. Kondisi ini meningkatkan risiko penyusupan apabila konfigurasi keamanan kurang tepat.
2. Username dan Password Database Harus Disimpan di ESP32
ESP32 harus menyimpan informasi seperti:
- Host MySQL
- Username
- Password database
Jika firmware berhasil diekstrak atau perangkat jatuh ke tangan orang lain, kredensial database dapat diketahui.
3. ESP32 Harus Menjalankan Query SQL
Pada metode ini ESP32 harus mengirimkan perintah SQL secara langsung, misalnya:
INSERT INTO tbl_temp(temp_value)
VALUES(29.5);
Akibatnya, program pada ESP32 menjadi lebih kompleks karena harus membangun query SQL sendiri.
4. Membutuhkan Memori Lebih Besar
ESP32 memiliki RAM yang terbatas. Ketika harus menangani query SQL yang panjang atau menerima hasil query dalam jumlah besar, penggunaan memori akan meningkat sehingga berpotensi menyebabkan kehabisan RAM (Out of Memory).
5. Sulit Mengolah Data
Jika diperlukan validasi data, konversi satuan, atau proses perhitungan tertentu, seluruh logika harus ditulis langsung di program ESP32. Hal ini membuat kode menjadi lebih rumit dan sulit dipelihara.
6. Tidak Semua Library Mendukung SSL/TLS
Sebagian besar library MySQL untuk ESP32 belum mendukung SSL/TLS secara optimal. Akibatnya:
- Username dikirim tanpa enkripsi.
- Password dikirim tanpa enkripsi.
- Data sensor juga dikirim dalam bentuk teks biasa (plain text).
Kondisi ini tentu sangat berisiko apabila perangkat terhubung melalui jaringan publik.
ESP32 Terhubung ke MySQL melalui HTTP/HTTPS (Metode yang Direkomendasikan)
Metode yang paling banyak digunakan dalam pengembangan sistem IoT adalah menghubungkan ESP32 ke database melalui Web Server. Pada metode ini, ESP32 tidak pernah berkomunikasi langsung dengan MySQL. Sebaliknya, ESP32 hanya mengirimkan data menggunakan HTTP atau HTTPS ke sebuah skrip PHP yang berada di Web Server. Selanjutnya, skrip PHP tersebut yang akan berkomunikasi dengan database MySQL.
Cara Kerja ESP32 Mengakses MySQL melalui Web Server
Secara umum proses komunikasi berlangsung dalam empat tahap berikut:
Langkah 1 – ESP32 Mengirimkan Data
ESP32 membaca data dari sensor, kemudian mengirimkannya ke Web Server melalui HTTP atau HTTPS.
Langkah 2 – Web Server Menjalankan Skrip PHP
Server menerima permintaan dari ESP32, kemudian menjalankan file PHP yang telah dibuat sebelumnya.
Langkah 3 – PHP Berinteraksi dengan Database
Skrip PHP akan menerima data dari ESP32, memvalidasi data, memproses data, dan menjalankan perintah SQL ke databse MySQL.
Langkah 4 – Server Mengirim Respons ke ESP32
Setelah proses database selesai, PHP hanya mengirimkan informasi yang diperlukan kepada ESP32.
Misalnya:
- SUCCESS
- ERROR
- Nilai sensor terbaru
- Status perangkat
Dengan demikian ESP32 tidak perlu memproses data database secara langsung.
Mengapa Menggunakan HTTP/HTTPS Lebih Direkomendasikan?
Pada tutorial ini, server Apache, PHP, dan MySQL akan dijalankan pada sebuah komputer menggunakan XAMPP. Namun, pada implementasi nyata ketiga layanan tersebut juga dapat ditempatkan pada VPS, Dedicated Server, atau layanan cloud seperti AWS EC2. Pendekatan menggunakan Web Server memiliki berbagai keunggulan dibandingkan koneksi langsung.
1. Database Lebih Aman
Server MySQL tidak perlu dibuka untuk akses dari luar. Cukup izinkan koneksi localhost, sehingga hanya skrip PHP yang dapat mengakses database.
2. Username dan Password Database Tidak Disimpan di ESP32
Informasi login database hanya disimpan pada file PHP di server. ESP32 cukup mengetahui alamat URL Web Server tanpa perlu mengetahui username maupun password database.
3. Beban Kerja ESP32 Menjadi Lebih Ringan
ESP32 hanya bertugas membaca sensor, mengirim data, dan menerima respons. Seluruh proses pengolahan data dilakukan oleh server.
4. PHP Lebih Mudah Mengolah Data
Bahasa PHP jauh lebih fleksibel dibandingkan pemrograman pada mikrokontroler. Dengan PHP, Anda dapat dengan mudah memvalidasi data, menghitung nilai, mengubah format data, menyimpan ke beberapa tabel, dan mengirim respons dalam format JSON.
5. Menghemat Memori ESP32
Server dapat memproses data dalam jumlah besar, kemudian hanya mengirimkan informasi yang benar-benar dibutuhkan oleh ESP32. Hal ini membantu mencegah penggunaan memori yang berlebihan pada mikrokontroler.
6. Mendukung HTTPS
ESP32 dapat mengirimkan data melalui HTTPS, sehingga komunikasi antara perangkat dan server terenkripsi. Ini jauh lebih aman dibandingkan mengirim query SQL secara langsung melalui jaringan.
Catatan:
Autentikasi antara ESP32 dengan Web Server sebaiknya dipisahkan dari autentikasi Web Server dengan MySQL. Misalnya, username dan password yang digunakan ESP32 untuk mengakses Web Server tidak boleh sama dengan username dan password database MySQL. Karena berbagai keunggulan tersebut, tutorial ini menggunakan metode komunikasi melalui HTTP/HTTPS.
Cara Menghubungkan ESP32 ke Database MySQL melalui HTTP/HTTPS
Agar ESP32 dapat menyimpan maupun membaca data dari MySQL, kita akan melakukan beberapa langkah berikut:
1. Menginstal XAMPP sebagai Web Server, PHP, dan MySQL
Langkah pertama adalah menginstal XAMPP pada komputer. XAMPP merupakan paket perangkat lunak yang telah berisi beberapa layanan penting, yaitu Apache Web Server, MariaDB (MySQL) dan PHP. Dengan menggunakan XAMPP, Anda tidak perlu menginstal ketiga aplikasi tersebut secara terpisah. Setelah proses instalasi selesai, buka folder C:\xampp\htdocs. Folder htdocs merupakan direktori utama (document root) yang digunakan Apache untuk menyimpan file PHP maupun halaman web yang nantinya dapat diakses melalui browser. Selanjutnya buka XAMPP Control Panel, kemudian tekan tombol Start pada layanan Apache dan MySQL. Pastikan kedua layanan tersebut berubah menjadi Running, seperti pada gambar berikut:
2. Membuat Akun Pengguna MySQL
Demi alasan keamanan, sebaiknya jangan menggunakan akun root secara langsung untuk aplikasi. Sebagai gantinya, buat akun baru yang hanya memiliki hak akses dari localhost. Keuntungan pendekatan ini yaitu database tidak dapat diakses dari komputer lain, risiko pencurian data menjadi lebih kecil, dan kredensial yang digunakan PHP terpisah dari akun administrator. Pada tutorial ini digunakan:
- Username: ESP32
- Password: arduinoindonesia.id
Username dan password tersebut nantinya akan digunakan oleh skrip PHP saat mengakses database.
a. Buka Command Prompt, kemudian masuk ke folder MySQL milik XAMPP.
cd C:\xampp\mysql\bin
b. Secara default, akun root pada MySQL belum memiliki password.
Demi keamanan, buat password untuk akun root menggunakan perintah berikut:
mysqladmin -u root password YOUR_ROOT_PASSWORD
Gantilah YOUR_ROOT_PASSWORD dengan password yang Anda inginkan.
c. Masuk ke MySQL menggunakan akun root.
mysql.exe -u root -p
Kemudian masukkan password root yang telah dibuat sebelumnya.
d. Buat akun pengguna baru menggunakan perintah SQL berikut.
CREATE USER 'esp32tutoria'@'localhost'
IDENTIFIED BY 'arduinoindonesia.id';
GRANT ALL PRIVILEGES
ON *.*
TO 'esp32tutorial'@'localhost'
WITH GRANT OPTION;
FLUSH PRIVILEGES;
Jika tidak muncul pesan kesalahan, berarti akun MySQL berhasil dibuat. Simpan username dan password tersebut, karena nantinya akan digunakan pada file PHP untuk menghubungkan aplikasi dengan database MySQL.
3. Membuat Database MySQL
Setelah akun pengguna selesai dibuat, langkah berikutnya adalah membuat database baru. Jalankan perintah SQL berikut:
CREATE DATABASE db_esp32
CHARACTER SET utf8
COLLATE utf8_general_ci;
Perintah tersebut akan membuat database bernama db_esp32 dengan karakter UTF-8 sehingga mampu menyimpan berbagai jenis karakter.
4. Membuat Tabel MySQL
Selanjutnya buat tabel untuk menyimpan data temperatur. Pertama, aktifkan database yang telah dibuat.
USE db_esp32;
Kemudian buat tabel menggunakan perintah berikut.
CREATE TABLE tbl_temp (
temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
temp_value FLOAT DEFAULT 0.00,
PRIMARY KEY (temp_id)
);
Penjelasan Struktur Tabel
Tabel temperature terdiri dari dua kolom utama, yaitu temp_id dan temp_value. Kolom temp_id menggunakan tipe data INT UNSIGNED yang berfungsi sebagai ID unik untuk setiap data suhu yang tersimpan. Nilai pada kolom ini akan bertambah secara otomatis (Auto Increment) setiap kali data baru ditambahkan ke dalam database. Sementara itu, kolom temp_value menggunakan tipe data FLOAT untuk menyimpan nilai suhu yang dikirimkan oleh perangkat ESP32 ke database.
Jika perintah berhasil dijalankan, maka tabel tbl_temp siap digunakan untuk menyimpan data dari ESP32.
5. Membuat Skrip PHP untuk Menyimpan Data ke MySQL
Setelah database dan tabel berhasil dibuat, langkah berikutnya adalah membuat skrip PHP yang berfungsi sebagai penghubung (bridge) antara ESP32 dan database MySQL. Skrip PHP ini memiliki tugas untuk menerima data suhu yang dikirim ESP32 melalui HTTP GET, memeriksa apakah data diterima dengan benar, menghubungkan aplikasi ke database MySQL, menyimpan data ke tabel tbl_temp, dan mengirimkan respons kembali ke ESP32. Dengan pendekatan ini, ESP32 tidak perlu mengetahui cara mengakses database secara langsung. Seluruh proses pengolahan data dilakukan oleh server sehingga lebih aman dan efisien.
a. Membuat File insert_temp.php
Buka editor teks seperti:
- Notepad
- Notepad++
- Visual Studio Code
Kemudian buat sebuah file baru bernama insert_temp.php, lalu salin kode berikut:
<?php
if(isset($_GET["temperature"])) {
$temperature = $_GET["temperature"]; // get temperature value from HTTP GET
$servername = "localhost";
$username = "esp32tutorial";
$password = "arduinoindonesia.id";
$database_name = "db_esp32";
// Create MySQL connection fom PHP to MySQL server
$connection = new mysqli($servername, $username, $password, $database_name);
// Check connection
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";
}
?>
Penjelasan Program PHP
a. Memeriksa Parameter Temperature
if(isset($_GET["temperature"])) {
Baris ini digunakan untuk memeriksa apakah parameter temperature dikirim melalui URL menggunakan metode HTTP GET. Sebagai contoh, jika browser membuka alamat berikut:
http://192.168.0.111/insert_temp.php?temperature=26.2
maka nilai 26.2 akan diterima oleh skrip PHP.
b. Mengambil Nilai Suhu
$temperature = $_GET["temperature"];
Nilai parameter temperature kemudian disimpan ke dalam variabel PHP bernama $temperature.
c. Konfigurasi Koneksi Database
$servername = "localhost";
$username = "esp32tutorial";
$password = "arduinoindonesia.id";
$database_name = "db_esp32";
Bagian ini berisi informasi koneksi ke database:
- localhost → alamat server MySQL.
- ESP32 → username database.
- esp32io.com → password database.
- db_esp32 → nama database.
Pastikan nilainya sama dengan akun database yang telah dibuat sebelumnya.
d. Membuka Koneksi ke MySQL
$connection = new mysqli(
$servername,
$username,
$password,
$database_name
);
Kode tersebut digunakan untuk membuat koneksi dari PHP ke MySQL. Jika koneksi gagal, maka program akan menampilkan pesan kesalahan.
if ($connection->connect_error) {
die("MySQL connection failed: " . $connection->connect_error);
}
e. Menyimpan Data ke Database
$sql = "INSERT INTO tbl_temp (temp_value)
VALUES ($temperature)";
Perintah SQL di atas akan menambahkan satu data baru ke tabel tbl_temp. Sebagai contoh, jika ESP32 mengirim temperature=30.5, maka query yang dijalankan adalah:
INSERT INTO tbl_temp (temp_value)
VALUES (30.5);
f. Mengirim Respons
Jika data berhasil disimpan, server akan mengirimkan respons berikut:
New record created successfully
Sebaliknya, jika terjadi kesalahan, PHP akan menampilkan informasi error sehingga proses debugging menjadi lebih mudah.
6. Menyimpan File PHP
Setelah selesai membuat skrip, simpan file dengan nama insert_temp.php. Kemudian salin file tersebut ke dalam folder C:\xampp\htdocs. Folder htdocs merupakan direktori utama Apache yang digunakan untuk menyimpan halaman web maupun file PHP.
7. Mengetahui Alamat IP Komputer
Agar ESP32 dapat mengakses Web Server, Anda perlu mengetahui alamat IP komputer yang menjalankan XAMPP. Salah satu cara termudah adalah:
- Buka Command Prompt.
- Ketik perintah ipconfig
- Tekan Enter.
- Perhatikan bagian IPv4 Address, misalnya: 192.168.0.111.
Alamat inilah yang nantinya digunakan oleh ESP32 untuk mengakses file PHP.
8. Menguji Skrip PHP Melalui Browser
Sebelum menghubungkan ESP32, sebaiknya lakukan pengujian menggunakan browser. Buka Google Chrome atau browser lainnya, kemudian akses alamat berikut: http://192.168.0.111/insert_temp.php?temperature=26.2. Catatan: Gantilah alamat IP di atas dengan alamat IP komputer Anda. Jika konfigurasi sudah benar, browser akan menampilkan pesan berikut:
New record created successfully
9. Memastikan Data Berhasil Disimpan
Selanjutnya, buka kembali Command Prompt yang sebelumnya digunakan untuk masuk ke MySQL. Jalankan perintah berikut:
SELECT * FROM tbl_temp;
Artinya, nilai suhu 26.2°C telah berhasil disimpan ke dalam database.
Setelah pengujian menggunakan browser berhasil, tahap berikutnya adalah membuat program pada ESP32 yang akan mengirimkan data secara otomatis.
10. Menulis Program ESP32
Program berikut digunakan untuk menghubungkan ESP32 ke jaringan WiFi, kemudian mengirimkan data suhu 30.5°C ke server menggunakan metode HTTP GET.
#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.111"; // 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();
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
} else {
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() {
}
Penjelasan Program ESP32
Program di atas terdiri dari beberapa bagian penting.
Menghubungkan ESP32 ke WiFi
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Kode ini digunakan untuk menghubungkan ESP32 ke jaringan WiFi.
Program akan terus menunggu hingga koneksi berhasil.
while (WiFi.status() != WL_CONNECTED)
a. Menentukan Alamat Web Server
String HOST_NAME = "http://192.168.0.111";
Variabel ini berisi alamat IP komputer yang menjalankan XAMPP.
Pastikan alamat IP tersebut diganti sesuai IP komputer Anda.
b. Menentukan File PHP
String PATH_NAME = "/insert_temp.php";
Bagian ini menunjukkan file PHP yang akan dijalankan oleh Web Server.
c. Mengirim Nilai Suhu
String queryString = "?temperature=30.5";
Data suhu dikirim melalui parameter URL.
Saat digabungkan, alamat yang diakses ESP32 menjadi:
http://192.168.0.111/insert_temp.php?temperature=30.5
d. Mengirim HTTP GET
http.GET();
Perintah ini mengirimkan permintaan HTTP ke Web Server. Selanjutnya server akan menerima data, menjalankan file PHP, menyimpan data ke MySQL, dan mengirimkan respons kembali ke ESP32.
e. Membaca Respons Server
String payload = http.getString();
Respons dari server akan disimpan ke dalam variabel payload.
Jika proses berhasil, Serial Monitor akan menampilkan:
New record created successfully
Cara Menjalankan Program
Ikuti langkah-langkah berikut:
- Hubungkan ESP32 ke komputer menggunakan kabel USB.
- Ubah SSID dan password WiFi sesuai jaringan yang digunakan.
- Ganti variabel HOST_NAME dengan alamat IP komputer Anda.
- Compile program menggunakan Arduino IDE.
- Upload program ke ESP32.
- Buka Serial Monitor.
- Terakhir, buka kembali MySQL dan jalankan perintah berikut:
SELECT * FROM tbl_temp;
Dengan mekanisme ini, ESP32 tidak perlu terhubung langsung ke database sehingga sistem menjadi lebih aman, lebih ringan, dan lebih mudah dikembangkan untuk aplikasi IoT yang lebih kompleks.
Baca juga: ESP32 HTTP Request - Panduan Lengkap Mengirim HTTP GET dan POST ke Web Server
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino



0 on: "ESP32 dengan MySQL - Cara Menghubungkan ESP32 ke Database MySQL melalui HTTP/HTTPS"