아두이노 우노 R4 - MySQL

이 튜토리얼은 Arduino UNO R4를 사용하여 센서로부터 데이터를 수집하고 이를 MySQL 데이터베이스에 저장하는 방법을 안내합니다. 자세히는, 우리는 다음을 학습할 것입니다:

아두이노 UNO R4 MySQL

Hardware Preparation

1×Arduino UNO R4 WiFi Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×(Recommended) Screw Terminal Block Shield for Arduino UNO R4 쿠팡 | Amazon
1×(Recommended) Breadboard Shield For Arduino UNO R4 쿠팡 | Amazon
1×(Recommended) Enclosure For Arduino UNO R4 Amazon
1×(Recommended) Power Splitter For Arduino UNO R4 Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

아두이노 UNO R4 - MySQL

Arduino UNO R4는 두 가지 방법으로 MySQL 데이터베이스에 연결할 수 있습니다:

  • Arduino UNO R4는 MySQL 프로토콜을 사용하여 MySQL 서버에 직접 연결합니다 (이것이 직접 방법입니다).
  • Arduino UNO R4는 HTTP 프로토콜을 통해 MySQL 서버에 연결합니다 (이것이 간접 방법입니다).

어느 것이 더 나은지 보자.

Arduino UNO R4가 MySQL 서버와 직접 상호작용합니다

아두이노에서 MySQL로 직접 연결

이것은 쉬워 보일 수 있지만, 몇 가지 단점이 있습니다:

  • MySQL 사용자가 데이터베이스에 원격으로 접근할 수 있도록 허용하는 것은 사용자의 권한이 제한되었더라도 보안상 위험할 수 있습니다.
  • 아두이노 UNO R4나 MySQL 서버에서 데이터를 처리하는 것은 아두이노 코드와 MySQL 스크립트를 더 복잡하게 만들며, 아두이노의 메모리와 CPU를 많이 사용하게 됩니다.
  • MySQL 서버는 아두이노 UNO R4로 대량의 데이터를 보낼 수 있으며, 이는 메모리 부족 문제를 일으킬 수 있습니다.
  • 많은 MySQL 라이브러리는 SSL/TLS를 지원하지 않아 사용자 이름과 비밀번호가 암호화 없이 전송되어 또 다른 보안 위험이 됩니다.

Arduino UNO R4는 HTTP/HTTPS를 통해 MySQL 서버와 간접적으로 상호작용합니다.

이 간접적인 방법은 직접적인 방법의 모든 문제를 해결합니다. 이 간접적인 방법이 어떻게 작동하는지 살펴본 후, 직접적인 방법의 문제를 어떻게 피하는지 알아보겠습니다.

작동 방식

  • 1단계: Arduino UNO R4가 웹 서버에 HTTP 요청을 보냅니다.
  • 2단계: 웹 서버가 PHP 스크립트를 실행합니다.
  • 3단계: PHP 스크립트가 HTTP 요청으로부터 데이터를 수신하고, 처리하며, MySQL 데이터베이스와 상호작용합니다.
  • 4단계: PHP 스크립트가 결과를 처리하고 이를 HTTP 응답을 통해 Arduino UNO R4로 다시 보냅니다.
아두이노 UNO R4 MySQL HTTP

이 안내서는 PC에 웹 서버와 MySQL 서버를 설치하는 방법을 가르쳐 줍니다. 복잡해 보이지만 그렇지 않습니다.

이제 간접법이 직접법의 단점을 어떻게 피할 수 있는지 살펴보겠습니다.

  • MySQL 서버와 HTTP 서버를 같은 기계에 두면 MySQL 사용자 계정을 해당 기계에서만 접근할 수 있도록 설정할 수 있습니다. 이 계정의 사용자 이름과 비밀번호는 서버에 저장되어 있어 (3단계에서 언급됨) 보안을 강화하는 데 도움이 됩니다.
  • PHP 스크립트(3단계 및 4단계)가 데이터 처리를 담당합니다. 이는 Arduino UNO R4와 MySQL 서버 모두에게 더 쉽고 덜 복잡하게 만듭니다. 데이터 처리를 위해 PHP를 사용하는 것이 Arduino UNO R4 코드나 MySQL 스크립트를 사용하는 것보다 더 쉽습니다.
  • PHP 스크립트는 데이터를 처리한 후 필요한 정보만을 Arduino UNO R4에 보냅니다 (4단계). 이는 Arduino UNO R4의 메모리 부족을 방지하는 데 도움이 됩니다.
  • 대부분의 이더넷/와이파이 라이브러리는 TLS/SSL을 지원하여 HTTPS 요청을 가능하게 합니다. HTTPS를 사용하면 데이터가 암호화되어 안전하게 인터넷을 통해 전송됩니다.

1단계에서는 Arduino UNO R4를 웹 서버에 연결하기 위해 다른 사용자 이름과 비밀번호를 사용할 수 있습니다. 보안을 유지하기 위해 HTTP 사용자 이름과 비밀번호는 MySQL 사용자 이름과 비밀번호와 동일하지 않아야 합니다.

이 가이드는 Arduino UNO R4를 MySQL에 간접적으로 연결하는 방법을 보여줍니다.

아두이노 UNO R4 - HTTP/HTTPS를 통한 MySQL

다음 단계를 실행해야 합니다:

  • MySQL 서버, 웹 서버 및 PHP를 컴퓨터에 설치하십시오
  • MySQL 및 웹 서버를 활성화하십시오
  • MySQL 사용자 계정을 생성하십시오
  • MySQL 데이터베이스를 생성하십시오
  • MySQL 테이블을 생성하십시오
  • PHP 스크립트를 작성하십시오
  • Arduino UNO R4를 프로그래밍하십시오

그럼 이제 한 번에 한 걸음씩 나아가 봅시다.

PC에 MySQL 서버, 웹 서버, PHP 설치하기

XAMPP 패키지에는 모든 것이 포함되어 있습니다. 우리는 한 번만 설치하면 됩니다.

  • 이 링크에서 XAMPP를 다운로드하세요.
  • 설치하세요.

설치 후, C:\xampp\htdocs라는 폴더가 PC에 나타납니다. 이 폴더에는 PHP 코드가 포함됩니다(후에 설명 예정).

MySQL 및 웹 서버 활성화

  • XAMPL 제어판을 엽니다
  • 시작 버튼을 클릭하여 MySQL과 웹 서버를 켭니다 (아래 이미지 참조)
아두이노 UNO R4 XAMPP

MySQL 사용자 계정 생성

우리는 로컬 컴퓨터에서만 MySQL 데이터베이스에 접근할 수 있는 MySQL 계정을 설정할 것입니다.

  • 누군가가 사용자 이름과 비밀번호를 알고 있더라도 원격으로 MySQL 데이터베이스에 접속할 수 없습니다.
  • PHP와 MySQL이 동일한 PC에 있기 때문에 PHP는 사용자 이름과 비밀번호를 사용하여 MySQL 데이터베이스에 연결할 수 있습니다.

MySQL 사용자 계정을 사용자 이름 ArduinoUnoR4와 비밀번호 newbiely.com으로 만들자.

  • 컴퓨터에서 명령 프롬프트를 엽니다. 튜토리얼을 마칠 때까지 열어 놓으세요.
  • 명령 프롬프트에 다음 명령어를 입력하세요:
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\youruser>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>
  • MySQL의 기본 설정에는 비밀번호가 없는 루트 계정이 포함되어 있습니다. 이 계정에 비밀번호를 설정할 것을 권장합니다.

명령 프롬프트에 다음 명령을 입력하여 루트 계정 비밀번호를 설정하세요: (예: 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>
  • 명령 프롬프트에 이 명령을 입력하세요:
mysql.exe -u root -p
  • 루트 비밀번호를 입력하고 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)]>
  • 'ArduinoUnoR4' 사용자 이름과 'newbiely.com' 비밀번호로 MySQL 사용자 계정을 생성하세요. 다음 명령어를 복사하여 명령 프롬프트에 붙여넣으세요:
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)]>

이제 MySQL 사용자 계정을 성공적으로 생성했습니다. PHP 스크립트에 필요하니 사용자 이름과 비밀번호를 기억하세요.

MySQL 데이터베이스 생성하기

Command Prompt에서 다음 명령어를 입력하여 db_arduino라는 데이터베이스를 만드십시오:

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)]>

MySQL 테이블 생성

tbl_temperature이라는 테이블을 만듭시다. 다음 명령어를 복사하여 명령 프롬프트에 붙여 넣으세요:

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]>

하나 이상의 PHP 파일 작성

C:\xampp\htdocs에 insert_temp.php라는 PHP 파일을 만드세요.

<?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"; } ?>

이 PHP 코드는 HTTP 요청에서 온도를 가져와 데이터베이스에 삽입합니다.

  • 컴퓨터의 IP 주소를 확인하세요. 찾는 방법이 확실하지 않다면 Google에서 검색하세요.
  • PHP 코드가 작동하는지 확인하려면 웹 브라우저(예: Chrome)를 열고 이 링크로 이동하세요: http://192.168.0.4/insert_temp.php?temperature=25.3. "192.168.0.4" 대신 자신의 컴퓨터 IP 주소를 사용해야 합니다.
  • 웹 브라우저에 결과가 표시됩니다.
마이SQL 테스트
  • 데이터가 데이터베이스에 저장되었는지 확인하려면 명령 프롬프트에 이 명령어를 입력하십시오:
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]>

온도 25.3이 데이터베이스에 저장되었습니다. 다음으로, Arduino UNO R4를 프로그래밍하여 유사한 HTTP 요청을 컴퓨터로 보낼 필요가 있습니다.

아두이노 UNO R4 코드 작성

이 Arduino UNO R4 코드는 HTTP 요청을 컴퓨터에 보내 데이터베이스에 30.5°C의 온도를 추가합니다.

Arduino UNO R4 코드 for Arduino UNO R4 R4 WiFi

/* * 이 Arduino UNO R4 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino UNO R4 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/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() { }

Detailed Instructions

이 지침을 단계별로 따르십시오:

  • Arduino Uno R4 WiFi/Minima를 처음 사용하는 경우, Arduino IDE에서 Arduino Uno R4 WiFi/Minima 환경 설정에 대한 튜토리얼을 참조하세요.
  • USB 케이블을 사용하여 Arduino Uno R4 보드를 컴퓨터에 연결하세요.
  • 컴퓨터에서 Arduino IDE를 실행하세요.
  • 적절한 Arduino Uno R4 보드(예: Arduino Uno R4 WiFi)와 COM 포트를 선택하세요.
  • 코드의 IP 주소를 컴퓨터의 IP 주소로 바꾸세요.
  • 코드를 컴파일하고 Arduino UNO R4에 업로드하세요.
  • 시리얼 모니터를 여세요.
  • 시리얼 모니터에서 출력을 확인하세요.
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  
  • 정보가 데이터베이스에 저장되었는지 확인하려면 명령 프롬프트에 이 명령어를 입력하세요:
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]>

온도 30.5가 데이터베이스에 저장되었습니다.

Arduino UNO R4가 MySQL 데이터베이스에 데이터를 삽입, 업데이트 또는 가져오는 방법

예제에서는 MySQL 데이터베이스에 데이터를 추가하는 방법을 배웠습니다. 데이터를 업데이트하거나 검색하기 위한 과정도 유사합니다. PHP 스크립트에서 MySQL 쿼리만 변경하면 됩니다. 더 많은 정보는 W3Schools를 방문하세요.

고급 사용 방법

보안을 개선하기 위해,

  • Arduino UNO R4의 코드를 수정하여 HTTP 대신 HTTPS를 사용할 수 있습니다. 방법에 대한 자세한 내용은 Arduino UNO R4 - HTTPS에서 확인하세요.
  • Arduino UNO R4를 웹 서버에 연결할 때 사용자 이름과 비밀번호를 사용하여 인증할 수 있습니다. 자세한 내용은 기본 액세스 인증에서 확인하세요.

※ NOTE THAT:

최고 수준의 보안을 갖춘 전체 시스템을 만들기 위해서는 더 많은 기능(예: MySQL 인젝션 방지, HTTPS를 REST API로 변환, 데이터를 JSON 형식으로 사용 등)을 추가해야 합니다. 하지만 이 가이드는 Arduino UNO R4를 배우는 초보자를 위한 것입니다. 우리는 그것을 매우 간단하게 유지했습니다. 이 가이드를 끝낸 후에는 더 고급 주제를 배울 수 있습니다.

Video Tutorial

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!