ESP32 MySQL
Hướng dẫn này sẽ chỉ bạn cách sử dụng ESP32 để chèn/cập nhật dữ liệu vào cơ sở dữ liệu MySQL, hoặc đọc dữ liệu từ cơ sở dữ liệu MySQL

Linh Kiện Cần Thiết
| 1 | × | mô-đun phát triển ESP-WROOM-32 | ||
| 1 | × | Alternatively, ESP32 Uno-form board | ||
| 1 | × | Alternatively, ESP32 S3 Uno-form board | ||
| 1 | × | Cáp USB Type-C | ||
| 1 | × | (Tùy chọn) Jack Nguồn DC | ||
| 1 | × | breadboard (bo mạch thí nghiệm) | ||
| 1 | × | Dây Jumper | ||
| 1 | × | (Khuyến nghị) Screw Terminal Expansion Board for ESP32 | ||
| 1 | × | (Khuyến nghị) Breakout Expansion Board for ESP32 | ||
| 1 | × | (Khuyến nghị) Power Splitter for ESP32 |
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
ESP32 - MySQL
Có hai thuật ngữ trong MySQL mà người mới bắt đầu thường nhầm lẫn: MySQL Database (Cơ sở dữ liệu MySQL) và MySQL server (Máy chủ MySQL). Chúng là khác nhau. Tuy nhiên, nếu bạn là người mới bắt đầu, bạn có thể giả định rằng chúng giống nhau. Sau này, bạn sẽ tìm hiểu được sự khác biệt trong quá trình học.
ESP32 có thể tương tác với cơ sở dữ liệu MySQL theo hai cách:
- Trực tiếp: ESP32 kết nối trực tiếp đến MySQL server và tương tác với MySQL server bằng giao thức MySQL
- Gián tiếp: ESP32 kết nối gián tiếp đến MySQL server thông qua web server bằng giao thức HTTP/HTTPS.
Cách nào tốt nhất cho ESP32? Hãy cùng tìm hiểu!
ESP32 tương tác trực tiếp với MySQL Server

Tương tác với MySQL trực tiếp có vẻ đơn giản nhưng có rất nhiều nhược điểm:
- Chúng ta phải cấp quyền truy cập từ xa cho tài khoản người dùng MySQL ⇒ Điều này có rủi ro về bảo mật, ngay cả khi chúng ta cấp quyền hạn chế cho tài khoản người dùng.
- ESP32 PHẢI lưu trữ và gửi các truy vấn MySQL đến MySQL server ⇒ Cần viết nhiều code ESP32 hơn, và cũng làm cạn kiệt tài nguyên ESP32 (bộ nhớ và CPU).
- ESP32 PHẢI xử lý phản hồi MySQL phức tạp (dữ liệu có kích thước rất lớn trong một số trường hợp) ⇒ Điều này có thể làm ESP32 hết bộ nhớ
- MySQL server phải xử lý dữ liệu thô ⇒ tăng độ phức tạp của script MySQL.
- Hầu hết các thư viện MySQL cho ESP32 không hỗ trợ SSL/TLS ⇒ Dữ liệu và username/password được gửi mà không mã hóa ⇒ vấn đề bảo mật khác.
ESP32 tương tác gián tiếp với MySQL Server qua HTTP/HTTPS
Tương tác với MySQL gián tiếp qua HTTP/HTTPS giải quyết tất cả các vấn đề của truy cập trực tiếp.
Cách hoạt động
- Bước 1: ESP32 bao gồm dữ liệu vào HTTP/HTTPS request và gửi request đến Web server
- Bước 2: Web server chạy script PHP để xử lý request từ ESP32
- Bước 3: Script PHP trích xuất dữ liệu từ HTTP request, xử lý dữ liệu, và sau đó tương tác với cơ sở dữ liệu MySQL.
- Bước 4: Script PHP xử lý kết quả và chỉ trả về kết quả cần thiết cho ESP32 qua HTTP response

Chúng ta sẽ cài đặt MySQL server, Web server, và PHP trên PC. Thực tế, chúng ta có thể cài đặt nó trên server chuyên dụng hoặc dịch vụ cloud như AWS EC2.
Dưới đây là cách mà phương pháp gián tiếp giải quyết các vấn đề của phương pháp trực tiếp.
- Chúng ta có thể cài đặt HTTP server và MySQL server trên cùng một server vật lý, chúng ta có thể cấp quyền truy cập hạn chế cho tài khoản người dùng MySQL (ví dụ: chỉ truy cập localhost) ⇒ bảo mật
- Username/password của tài khoản MySQL được lưu trữ trên server ⇒ bảo mật.
- Dữ liệu được xử lý bởi script PHP ⇒ Điều này giảm tải và độ phức tạp cho ESP32 và MySQL server.
- Script PHP có thể xử lý dữ liệu dễ dàng hơn nhiều so với code ESP32 và script MySQL ⇒ Đơn giản hóa code ESP32 và script MySQL
- Script PHP có thể xử lý dữ liệu và chỉ gửi dữ liệu cần thiết cho ESP32 (Bước 4) để ngăn ESP32 hết bộ nhớ.
- ESP32 có thể thực hiện HTTPS request dễ dàng ⇒ dữ liệu được mã hóa.
Lưu ý rằng xác thực giữa ESP32 và Web Server nên độc lập với xác thực MySQL. Ví dụ, HTTP username/password nên khác với MySQL username/password.
Vì những ưu điểm đó, hướng dẫn này sẽ sử dụng phương pháp gián tiếp.
ESP32 Đến MySQL qua HTTP/HTTPS
Dưới đây là các bước mà chúng ta cần làm:
- Cài đặt gói XAMPP bao gồm MySQL server, Web server, và PHP trên PC của bạn
- Tạo tài khoản người dùng MySQL
- Tạo cơ sở dữ liệu MySQL
- Tạo bảng MySQL
- Viết một hoặc nhiều file script PHP
- Viết code ESP32
1. Cài đặt MySQL server, Web server, và PHP trên PC
- Tải xuống và cài đặt XAMPP từ liên kết này. Sau khi cài đặt, kiểm tra thư mục C:\xampp\htdocs trên PC của bạn. Đây là nơi bạn đặt code PHP (xem phần sau).
- Mở XAMPP Control Panel
- Nhấp các nút Start để kích hoạt MySQL và Web server (như hình dưới đây)

2. Tạo tài khoản người dùng MySQL
Chúng ta sẽ tạo một tài khoản MySQL chỉ với quyền truy cập localhost.
- Ngay cả khi kẻ tấn công biết username/password, họ không thể truy cập cơ sở dữ liệu MySQL của bạn trừ khi họ kiểm soát được PC của bạn.
- Username/password này sẽ được PHP sử dụng để kết nối đến cơ sở dữ liệu MySQL.
Hướng dẫn này tạo tài khoản người dùng MySQL với username và password lần lượt là ESP32 và newbiely.com:
- Mở Command Prompt trên PC của bạn. Không đóng nó cho đến khi kết thúc hướng dẫn.
- Gõ lệnh sau trên Command Prompt:
- Theo mặc định, MySQL có tài khoản root không có mật khẩu. Rất khuyến khích đặt mật khẩu cho tài khoản root (ví dụ: YOUR_ROOT_PASSWORD) vì lý do bảo mật. Gõ lệnh dưới đây trên Command Prompt:
- Gõ lệnh dưới đây trên Command Prompt để đăng nhập vào MySQL server:
- Gõ YOUR_ROOT_PASSWORD và nhấn Enter
- Hãy tạo tài khoản người dùng MySQL với username và password lần lượt là ESP32 và newbiely.com bằng cách sao chép các lệnh dưới đây và dán vào Command Prompt:
Bạn đã tạo tài khoản người dùng MySQL thành công. Ghi lại username/password. Nó sẽ được sử dụng trong script PHP.
3. Tạo cơ sở dữ liệu MySQL
Tạo cơ sở dữ liệu db_esp32 bằng cách gõ lệnh sau trên Command Prompt:
4. Tạo bảng MySQL
Tạo bảng tbl_temp bằng cách sao chép các lệnh dưới đây và dán vào Command Prompt:
6. Viết file script PHP
Tạo file insert_temp.php bằng trình soạn thảo văn bản bất kỳ (ví dụ: Notepad/Notepad++). Chúng ta sẽ viết script trong file này để trích xuất giá trị nhiệt độ từ HTTP Request và chèn giá trị nhiệt độ vào cơ sở dữ liệu.
- Đặt file này trong thư mục C:\xampp\htdocs
- Lấy địa chỉ IP của PC. Nếu bạn không biết cách, hãy tìm kiếm trên Google.
- Kiểm tra code PHP bằng cách mở trình duyệt web (ví dụ: Chrome) và truy cập liên kết này: http://192.168.0.19/insert_temp.php?temperature=26.2. Lưu ý rằng bạn cần thay thế địa chỉ IP trên bằng địa chỉ PC của bạn.
- Trình duyệt web hiển thị như dưới đây:

- Kiểm tra xem dữ liệu có được lưu trữ trong cơ sở dữ liệu không bằng cách gõ lệnh sau trên Command Prompt:
Như bạn có thể thấy, nhiệt độ 26.2 được lưu trữ trong cơ sở dữ liệu. Bước tiếp theo là viết code ESP32 để thực hiện HTTP Request đến web server trên PC của bạn.
7. Viết code ESP32
Code ESP32 dưới đây thực hiện HTTP đến PC của bạn để chèn nhiệt độ 30.5°C vào cơ sở dữ liệu
Các Bước Nhanh
- Mới sử dụng ESP32? Hãy bắt đầu với hướng dẫn ESP32 - Cài Đặt Phần Mềm để học các kiến thức cơ bản trước.
- Kết nối mạch như hình trên.
- Kết nối bo ESP32 với PC của bạn qua cáp micro USB
- Thay đổi địa chỉ IP trong code bằng địa chỉ IP PC của bạn
- Biên dịch và nạp code lên ESP32
- Mở Serial Monitor trên Arduino IDE

- Kết quả trên Serial Monitor
- Kiểm tra xem dữ liệu có được lưu trữ trong cơ sở dữ liệu không bằng cách sử dụng lệnh sau trên Command Prompt:
Như bạn có thể thấy, nhiệt độ 30.5 được lưu trữ trong cơ sở dữ liệu.
ESP32 chèn, cập nhật hoặc lấy dữ liệu từ/đến cơ sở dữ liệu MySQL
Ví dụ trên cho thấy cách chèn dữ liệu vào cơ sở dữ liệu MySQL. Cách thức tương tự cho việc cập nhật và đọc dữ liệu từ cơ sở dữ liệu. Bạn chỉ cần sửa đổi truy vấn MySQL trong code PHP. Bạn có thể học thêm trên W3Schools.com
Video Tutorial
Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.