Arduino UNO R4 MySQL

Hướng dẫn này sẽ chỉ cho bạn cách sử dụng Arduino UNO R4 thu thập dữ liệu từ cảm biến và lưu vào cơ sở dữ liệu MySQL. Cụ thể, chúng ta sẽ học:

Arduino UNO R4 mysql

Phần Cứng Cần Thiết

1×Arduino UNO R4 WiFi
1×Alternatively, DIYables STEM V4 IoT
1×(Tùy chọn) DIYables STEM V4 IoT
1×Cáp USB Type-C
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino UNO R4
1×(Khuyến nghị) Breadboard Shield for Arduino UNO R4
1×(Khuyến nghị) Enclosure for Arduino UNO R4
1×(Khuyến nghị) Power Splitter for Arduino UNO R4
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V4 IoT Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Arduino UNO R4 - MySQL

Arduino UNO R4 có thể kết nối với cơ sở dữ liệu MySQL bằng hai phương pháp khác nhau:

  • Arduino UNO R4 kết nối trực tiếp đến MySQL Server sử dụng giao thức MySQL (đây là phương pháp trực tiếp).
  • Arduino UNO R4 kết nối đến MySQL Server thông qua giao thức HTTP (đây là phương pháp gián tiếp).

Hãy xem phương pháp nào tốt hơn.

Arduino UNO R4 tương tác trực tiếp với MySQL Server

Arduino directly to mysql

Điều này có vẻ dễ dàng, nhưng có một số nhược điểm:

  • Cho phép MySQL User truy cập cơ sở dữ liệu từ xa có thể gây rủi ro bảo mật, ngay cả với quyền hạn người dùng hạn chế.
  • Xử lý dữ liệu trong Arduino UNO R4 hoặc MySQL server làm cho code Arduino và MySQL script phức tạp hơn và sử dụng nhiều bộ nhớ và CPU của Arduino.
  • MySQL server có thể gửi lượng dữ liệu lớn đến Arduino UNO R4, điều này có thể khiến nó bị hết bộ nhớ.
  • Nhiều thư viện MySQL không hỗ trợ SSL/TLS, có nghĩa là tên đăng nhập và mật khẩu được gửi mà không mã hóa, tạo ra rủi ro bảo mật khác.

Arduino UNO R4 tương tác gián tiếp với MySQL Server qua HTTP/HTTPS

Phương pháp gián tiếp này giải quyết tất cả các vấn đề mà phương pháp trực tiếp gặp phải. Hãy xem phương pháp gián tiếp này hoạt động như thế nào trước khi chúng ta khám phá cách nó tránh được các vấn đề của phương pháp trực tiếp.

Cách thức hoạt động

  • Bước 1: Arduino UNO R4 gửi HTTP Request đến Web Server
  • Bước 2: Web Server thực thi PHP script
  • Bước 3: PHP script nhận dữ liệu từ HTTP Request, xử lý và tương tác với cơ sở dữ liệu MySQL.
  • Bước 4: PHP script xử lý kết quả và gửi lại cho Arduino UNO R4 thông qua HTTP Response
Arduino UNO R4 mysql http

Hướng dẫn này cũng sẽ chỉ bạn cách cài đặt Web server và MySQL server trên máy tính của bạn. Có vẻ phức tạp nhưng thực ra không khó.

Bây giờ, hãy khám phá cách phương pháp gián tiếp giúp tránh những nhược điểm của phương pháp trực tiếp.

  • Bằng cách đặt MySQL server và HTTP server trên cùng một máy, bạn có thể thiết lập tài khoản MySQL user chỉ truy cập từ máy đó. Tên đăng nhập và mật khẩu cho tài khoản này được lưu trên server (được đề cập ở bước 3), giúp tăng cường bảo mật.
  • PHP script (bước 3 và 4) xử lý việc xử lý dữ liệu. Điều này làm mọi thứ đơn giản và ít phức tạp hơn cho cả Arduino UNO R4 và MySQL server. Sử dụng PHP để xử lý dữ liệu dễ dàng hơn so với việc sử dụng code Arduino UNO R4 hoặc MySQL script.
  • PHP script xử lý dữ liệu và chỉ gửi những gì cần thiết đến Arduino UNO R4 (bước 4). Điều này giúp ngăn Arduino UNO R4 khỏi bị hết bộ nhớ.
  • Hầu hết các thư viện Ethernet/WiFi đều hỗ trợ TLS/SSL, cho phép HTTPS request. Với HTTPS, dữ liệu được mã hóa và truyền tải an toàn qua Internet.

Trong bước 1, bạn có thể sử dụng tên đăng nhập và mật khẩu khác để kết nối Arduino UNO R4 với Web Server. Quan trọng là HTTP username và password phải khác với MySQL username và password để giữ an toàn.

Hướng dẫn này sẽ chỉ cách kết nối Arduino UNO R4 với MySQL một cách gián tiếp.

Arduino UNO R4 - MySQL qua HTTP/HTTPS

Chúng ta cần thực hiện các bước sau:

  • Cài đặt MySQL server, Web server và PHP trên máy tính của bạn
  • Kích hoạt MySQL và Web server
  • Tạo tài khoản MySQL User
  • Tạo cơ sở dữ liệu MySQL
  • Tạo bảng MySQL
  • Viết PHP script
  • Lập trình Arduino UNO R4

Bây giờ, hãy thực hiện từng bước một.

Cài đặt MySQL server, Web server và PHP trên máy tính

Gói XAMPP bao gồm tất cả những gì cần thiết. Chúng ta chỉ cần cài đặt một lần.

Sau khi cài đặt, thư mục có tên C:\xampp\htdocs sẽ xuất hiện trên máy tính của bạn. Thư mục này sẽ chứa code PHP (được giải thích sau).

Kích hoạt MySQL và Web server

  • Mở XAMPL Control Panel
  • Nhấp vào nút Start để bật MySQL và Web server (Tham khảo hình ảnh bên dưới)
Arduino UNO R4 xampp

Tạo tài khoản MySQL User

Chúng ta sẽ thiết lập một tài khoản MySQL có thể truy cập cơ sở dữ liệu MySQL chỉ từ máy tính cục bộ.

  • Ngay cả khi ai đó biết tên đăng nhập và mật khẩu của bạn, họ cũng không thể truy cập vào cơ sở dữ liệu MySQL từ xa.
  • Vì PHP và MySQL ở trên cùng một máy tính, PHP có thể sử dụng tên đăng nhập và mật khẩu để kết nối với cơ sở dữ liệu MySQL.

Hãy tạo một tài khoản MySQL user với tên đăng nhập ArduinoUnoR4 và mật khẩu newbiely.com.

  • Mở Command Prompt trên máy tính của bạn. Giữ nó mở cho đến khi bạn hoàn thành hướng dẫn.
  • Nhập lệnh này trong Command Prompt:
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\youruser>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>
  • Cài đặt mặc định của MySQL bao gồm một tài khoản root không có mật khẩu. Bạn nên tạo mật khẩu cho tài khoản này.

Nhập lệnh sau trong Command Prompt để đặt mật khẩu cho tài khoản root: (ví dụ YOUR-ROOT-PASSWORD)

mysqladmin -u root password YOUR-ROOT-PASSWORD
Command Prompt
C:\xampp\mysql\bin>mysqladmin -u root password YOUR-ROOT-PASSWORD C:\xampp\mysql\bin>
  • Nhập lệnh này trong Command Prompt:
mysql.exe -u root -p
  • Nhập mật khẩu root và nhấn 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)]>
  • Tạo tài khoản MySQL user với tên đăng nhập 'ArduinoUnoR4' và mật khẩu 'newbiely.com'. Sao chép các lệnh sau và dán vào Command Prompt:
CREATE USER 'ArduinoUnoR4'@'localhost' IDENTIFIED BY 'newbiely.com'; GRANT ALL PRIVILEGES ON *.* TO 'ArduinoUnoR4'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
Command Prompt
MariaDB [(none)]> CREATE USER 'ArduinoUnoR4'@'localhost' IDENTIFIED BY 'newbiely.com'; Query OK, 0 rows affected (0.005 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'ArduinoUnoR4'@'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)]>

Bây giờ bạn đã tạo thành công tài khoản MySQL user. Hãy ghi nhớ tên đăng nhập và mật khẩu vì bạn sẽ cần chúng cho PHP script.

Tạo cơ sở dữ liệu MySQL

Tạo cơ sở dữ liệu có tên db_arduino bằng cách nhập lệnh này trong Command Prompt:

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

Tạo bảng MySQL

Hãy tạo một bảng có tên tbl_temperature. Sao chép các lệnh sau và dán vào Command Prompt:

USE db_arduino; CREATE TABLE tbl_temperature ( temp_id INT UNSIGNED NOT NULL AUTO_INCREMENT, temp_value FLOAT DEFAULT 0.00, PRIMARY KEY (temp_id) );
Command Prompt
MariaDB [(none)]> USE db_arduino; Database changed MariaDB [db_arduino]> MariaDB [db_arduino]> CREATE TABLE tbl_temperature ( -> 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_arduino]>

Viết một hoặc nhiều file PHP

Tạo file PHP có tên insert_temp.php tại C:\xampp\htdocs

<?php if(isset($_GET["temperature"])) { $temperature = $_GET["temperature"]; // get temperature value from HTTP GET $servername = "localhost"; $username = "ArduinoUnoR4"; $password = "newbiely.com"; $dbname = "db_arduino"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "INSERT INTO tbl_temperature (temp_value) VALUES ($temperature)"; if ($conn->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . " => " . $conn->error; } $conn->close(); } else { echo "temperature is not set"; } ?>

Code PHP này lấy nhiệt độ từ HTTP Request và chèn nó vào cơ sở dữ liệu.

  • Tìm địa chỉ IP của máy tính bạn. Tìm kiếm trên Google nếu bạn không biết cách tìm.
  • Để kiểm tra xem code PHP có hoạt động không, mở trình duyệt web (như Chrome) và truy cập liên kết này: http://192.168.0.4/insert_temp.php?temperature=25.3. Nhớ sử dụng địa chỉ IP của máy tính bạn thay vì "192.168.0.4".
  • Bạn sẽ thấy kết quả hiển thị trong trình duyệt web.
mysql test
  • Để xem dữ liệu có được lưu trong cơ sở dữ liệu không, nhập lệnh này trong Command Prompt:
SELECT * from tbl_temperature;
Command Prompt
MariaDB [db_arduino]> SELECT * from tbl_temperature; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 25.3 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_arduino]>

Nhiệt độ 25.3 đã được lưu trong cơ sở dữ liệu. Tiếp theo, chúng ta cần lập trình Arduino UNO R4 để gửi HTTP request tương tự đến máy tính của bạn.

Viết code Arduino UNO R4

Code Arduino UNO R4 này gửi HTTP request đến máy tính của bạn để thêm nhiệt độ 30.5°C vào cơ sở dữ liệu.

Code Arduino UNO R4 cho Arduino UNO R4 R4 WiFi

/* * Mã Arduino UNO R4 này được phát triển bởi newbiely.vn * Mã Arduino UNO R4 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/arduino-uno-r4/arduino-uno-r4-mysql */ #include <WiFiS3.h> const char ssid[] = "YOUR_WIFI_SSID"; // change your network SSID (name) const char pass[] = "YOUR_WIFI_PASSWORD"; // change your network password (use for WPA, or use as key for WEP) WiFiClient client; int status = WL_IDLE_STATUS; int HTTP_PORT = 80; String HTTP_METHOD = "GET"; char HOST_NAME[] = "192.168.0.4"; // change to your PC's IP address String PATH_NAME = "/insert_temp.php"; String queryString = "?temperature=30.5"; void setup() { Serial.begin(9600); // check for the WiFi module: if (WiFi.status() == WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); // don't continue while (true) ; } String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); } // attempt to connect to WiFi network: while (status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } // print your board's IP address: Serial.print("IP Address: "); Serial.println(WiFi.localIP()); // connect to web server on port 80: if (client.connect(HOST_NAME, HTTP_PORT)) { // if connected: Serial.println("Connected to server"); // make a HTTP request: // send HTTP header client.println(HTTP_METHOD + " " + PATH_NAME + queryString + " HTTP/1.1"); client.println("Host: " + String(HOST_NAME)); client.println("Connection: close"); client.println(); // end HTTP header while (client.connected()) { if (client.available()) { // read an incoming byte from the server and print it to serial monitor: char c = client.read(); Serial.print(c); } } // the server's disconnected, stop the client: client.stop(); Serial.println(); Serial.println("disconnected"); } else { // if not connected: Serial.println("connection failed"); } } void loop() { }

Các Bước Nhanh

Thực hiện theo các hướng dẫn từng bước:

  • Nếu đây là lần đầu tiên bạn sử dụng Arduino Uno R4 WiFi/Minima, hãy tham khảo hướng dẫn Arduino UNO R4 - Cài Đặt Phần Mềm.
  • Kết nối board Arduino Uno R4 với máy tính bằng cáp USB.
  • Khởi chạy Arduino IDE trên máy tính của bạn.
  • Chọn board Arduino Uno R4 phù hợp (ví dụ: Arduino Uno R4 WiFi) và cổng COM.
  • Thay thế địa chỉ IP trong code bằng địa chỉ IP máy tính của bạn.
  • Biên dịch và upload code lên Arduino UNO R4.
  • Mở Serial Monitor.
  • Xem kết quả trên Serial 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  
  • Để xem thông tin có được lưu trong cơ sở dữ liệu không, nhập lệnh này trong Command Prompt:
SELECT * from tbl_temperature;
Command Prompt
MariaDB [db_arduino]> SELECT * from tbl_temperature; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 25.3 | | 2 | 30.5 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_arduino]>

Nhiệt độ 30.5 đã được lưu trong cơ sở dữ liệu.

Cách Arduino UNO R4 chèn, cập nhật hoặc lấy dữ liệu từ cơ sở dữ liệu MySQL

Trong ví dụ trên, chúng ta đã học cách thêm dữ liệu vào cơ sở dữ liệu MySQL. Để cập nhật hoặc truy xuất dữ liệu, quy trình cũng tương tự. Chỉ cần thay đổi các truy vấn MySQL trong PHP script. Để biết thêm thông tin, hãy truy cập W3Schools.

Sử Dụng Nâng Cao

Để cải thiện bảo mật,

  • Bạn có thể sửa đổi code của Arduino UNO R4 để sử dụng HTTPS thay vì HTTP. Để biết cách thực hiện, hãy truy cập Arduino UNO R4 - HTTPS.
  • Bạn có thể xác thực bằng tên đăng nhập và mật khẩu khi kết nối Arduino UNO R4 với Web server. Tìm hiểu thêm tại Basic access authentication.

※ Lưu ý:

Để tạo một hệ thống hoàn chỉnh với bảo mật cao nhất, chúng ta phải thêm nhiều tính năng hơn (như ngăn chặn MySQL injection, chuyển HTTPS thành REST API và sử dụng định dạng JSON cho dữ liệu). Tuy nhiên, hướng dẫn này dành cho người mới bắt đầu học Arduino UNO R4. Chúng tôi đã giữ nó rất đơn giản. Sau khi hoàn thành hướng dẫn này, bạn có thể học các chủ đề nâng cao hơn.

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.

Nhận Xét