아두이노 나노 ESP32 - MySQL | Arduino Nano ESP32 - MySQL

이 튜토리얼은 Arduino Nano ESP32를 사용하여 MySQL 데이터베이스에 데이터를 삽입/업데이트하거나 MySQL 데이터베이스에서 데이터를 읽는 방법에 대한 지침을 제공합니다.

Arduino Nano ESP32 MySQL

준비물

1×Arduino Nano ESP32 Amazon
1×USB Cable Type-C 쿠팡 | Amazon
1×(Optional) DC Power Jack 쿠팡 | Amazon
1×Breadboard 쿠팡 | Amazon
1×Jumper Wires Amazon
1×(Recommended) Screw Terminal Expansion Board for Arduino Nano 쿠팡 | Amazon
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.

아두이노 나노 ESP32 - MySQL

MySQL에서 초보자들이 흔히 혼동하는 두 가지 용어가 있습니다: MySQL 데이터베이스MySQL 서버입니다. 이들은 서로 다릅니다. 하지만, 만약 당신이 초보자라면, 그것들이 같다고 가정해도 됩니다. 나중에, 학습 과정에서 그 차이점을 발견하게 될 것입니다.

Arduino Nano ESP32는 MySQL 데이터베이스와 두 가지 방법으로 상호작용할 수 있습니다:

  • 직접적으로: Arduino Nano ESP32는 MySQL 프로토콜을 사용하여 MySQL 서버에 직접 연결되고 MySQL 서버와 상호 작용합니다.
  • 간접적으로: Arduino Nano ESP32는 HTTP/HTTPS 프로토콜을 사용하여 웹 서버를 통해 간접적으로 MySQL 서버에 연결됩니다.

어느 것이 ESP32에 가장 좋을까요? 알아봅시다!

Arduino Nano ESP32가 MySQL 서버와 직접 상호작용합니다.

Arduino Nano ESP32 directly to MySQL

MySQL을 직접 조작하는 것은 간단해 보이지만 많은 단점이 있습니다:

  • MySQL 사용자 계정에 원격 액세스 권한을 부여해야 합니다 ⇒ 이는 보안 측면에서 위험합니다, 사용자 계정에 제한된 권한을 부여하더라도.
  • Arduino Nano ESP32는 반드시 MySQL 쿼리를 저장하고 MySQL 서버로 전송해야 합니다 ⇒ 많은 Arduino Nano ESP32 코드를 작성해야 하며, 또한 Arduino Nano ESP32 리소스(메모리와 CPU 사용량)를 고갈시킵니다.
  • Arduino Nano ESP32는 복잡한 MySQL 응답(일부 경우에는 매우 큰 데이터 크기)을 처리해야 합니다 ⇒ 이는 Arduino Nano ESP32의 메모리가 부족해질 수 있습니다.
  • MySQL 서버는 원시 데이터를 처리해야 합니다 ⇒ MySQL 스크립트의 복잡성이 증가합니다.
  • Arduino Nano ESP32용 MySQL 라이브러리 대부분이 SSL/TLS를 지원하지 않습니다 ⇒ 데이터와 사용자 이름/비밀번호가 암호화되지 않은 채로 전송됩니다 ⇒ 또 다른 보안 문제입니다.

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

MySQL에 간접적으로 HTTP/HTTPS를 통해 접근하는 것은 직접 접근의 모든 문제를 해결합니다.

작동 원리

  • 1단계: Arduino Nano ESP32가 HTTP/HTTPS 요청에 데이터를 포함하여 웹 서버로 요청을 보냅니다.
  • 2단계: 웹 서버는 Arduino Nano ESP32에서 온 요청을 처리하는 PHP 스크립트를 실행합니다.
  • 3단계: PHP 스크립트는 HTTP 요청에서 데이터를 추출하여 데이터를 처리한 다음 MySQL 데이터베이스와 상호 작용합니다.
  • 4단계: PHP 스크립트는 결과를 처리하고 필요한 결과만을 HTTP 응답을 통해 Arduino Nano ESP32로 반환합니다.
Arduino Nano ESP32 MySQL HTTP

우리는 PC에 MySQL 서버, 웹 서버, PHP를 설치할 예정입니다. 사실, 전용 서버나 AWS EC2와 같은 클라우드 서비스에도 설치할 수 있습니다.

아래는 간접적인 방법이 직접적인 방법의 문제점을 어떻게 해결하는지에 대한 것입니다.

  • HTTP 서버와 MySQL 서버를 동일한 물리 서버에 설치할 수 있습니다. MySQL 사용자 계정에 접근 제한을 줄 수 있습니다(예: localhost 접근만 가능) ⇒ 보안적임
  • MySQL 계정의 사용자 이름/비밀번호는 서버에 저장됩니다 ⇒ 보안적임.
  • 데이터는 PHP 스크립트에 의해 처리됩니다 ⇒ 이는 Arduino Nano ESP32와 MySQL 서버의 부하와 복잡성을 줄입니다.
  • PHP 스크립트는 Arduino Nano ESP32 코드와 MySQL 스크립트보다 데이터를 훨씬 쉽게 처리할 수 있습니다 ⇒ Arduino Nano ESP32 코드와 MySQL 스크립트를 단순화합니다.
  • PHP 스크립트는 데이터를 처리하고 필요한 데이터만 Arduino Nano ESP32(4단계)에 보내어 Arduino Nano ESP32의 메모리 부족을 방지할 수 있습니다.
  • Arduino Nano ESP32는 HTTPS 요청을 쉽게 만들 수 있습니다 ⇒ 데이터가 암호화됩니다.

아두이노 나노 ESP32와 웹 서버 간의 인증은 MySQL 인증과 독립적이어야 함을 유의하십시오. 예를 들어, HTTP 사용자 이름/비밀번호는 MySQL 사용자 이름/비밀번호와 달라야 합니다.

이러한 장점들 때문에 이 튜토리얼은 간접적인 방법을 사용할 것입니다.

아두이노 나노 ESP32에서 MySQL로 HTTP/HTTPS를 통한 데이터 전송

아래는 우리가 해야 할 단계들입니다:

  • 내 PC에 MySQL 서버, 웹 서버 및 PHP가 포함된 XAMPP 패키지 설치하기
  • MySQL 사용자 계정 만들기
  • MySQL 데이터베이스 만들기
  • MySQL 테이블 만들기
  • 하나 이상의 PHP 스크립트 파일 작성하기
  • 아두이노 나노 ESP32 코드 작성하기

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

  • 이 링크에서 XAMPP를 다운로드하여 설치하세요. 설치 후, PC에서 C:\xampp\htdocs 폴더를 확인하세요. 여기에 PHP 코드를 넣습니다(이후 참조).
  • XAMPP 제어판 열기
  • MySQL과 웹 서버를 활성화하려면 시작 버튼을 클릭하세요(아래 이미지 참조).
Arduino Nano ESP32 XAMPP

2. MySQL 사용자 계정 생성하기

우리는 로컬호스트 접근 권한만 있는 MySQL 계정을 생성할 것입니다.

  • 공격자가 사용자 이름/비밀번호를 알고 있더라도, 그들이 여러분의 PC를 제어하지 않는 이상 여러분의 MySQL 데이터베이스에 접근할 수 없습니다.
  • 이 사용자 이름/비밀번호는 PHP가 MySQL 데이터베이스에 연결하는 데 사용될 것입니다.

이 튜토리얼은 사용자 이름과 비밀번호가 각각 ESP32newbiely.kr인 MySQL 사용자 계정을 생성합니다:

  • 명령 프롬프트를 PC에서 엽니다. 튜토리얼이 끝날 때까지 닫지 마십시오.
  • 명령 프롬프트에서 다음 명령을 입력하세요:
cd C:\xampp\mysql\bin
Command Prompt
C:\Users\YOUR_USER>cd C:\xampp\mysql\bin C:\xampp\mysql\bin>

기본적으로 MySQL은 패스워드 없이 root 계정을 가지고 있습니다. 보안상의 이유로 root 계정에 대한 패스워드를 설정하는 것을 강력히 권장합니다(예: 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 서버에 로그인하기 위해 아래 명령어를 입력하십시오:

mysql.exe -u root -p

YOUR_ROOT_PASSWORD를 입력하고 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)]>

아래의 명령어를 복사하여 명령 프롬프트에 붙여넣어 사용자 이름이 ESP32, 비밀번호가 newbiely.kr인 MySQL 사용자 계정을 생성합시다:

CREATE USER 'ESP32'@'localhost' IDENTIFIED BY 'newbiely.kr'; GRANT ALL PRIVILEGES ON *.* TO 'ESP32'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
Command Prompt
MariaDB [(none)]> CREATE USER 'ESP32'@'localhost' IDENTIFIED BY 'newbiely.kr'; 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)]>

MySQL 사용자 계정을 성공적으로 생성하였습니다. 사용자 이름/비밀번호를 메모해 두십시오. PHP 스크립트에서 사용될 것입니다.

3. MySQL 데이터베이스 생성하기

명령 프롬프트에서 다음 명령어를 입력하여 db_nano_esp32 데이터베이스를 생성하세요:

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

4. MySQL 테이블 생성하기

아래 명령어를 복사하여 명령 프롬프트에 붙여넣어 tbl_temp 테이블을 만드세요:

USE db_nano_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_nano_esp32; Database changed MariaDB [db_nano_esp32]> MariaDB [db_nano_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_nano_esp32]>

6. PHP 스크립트 파일 작성하기

아무 텍스트 에디터(예: 메모장/Notepad++)를 사용해서 insert_temp.php를 생성하세요. 우리는 이 파일에서 스크립트를 작성하여 HTTP 요청에서 온도 값을 추출하고 그 온도 값을 데이터베이스에 삽입할 것입니다.

<?php if(isset($_GET["temperature"])) { $temperature = $_GET["temperature"]; // get temperature value from HTTP GET $servername = "localhost"; $username = "ESP32"; $password = "newbiely.kr"; $database_name = "db_nano_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"; } ?>
  • 이 파일을 C:\xampp\htdocs 폴더 안에 넣으세요.
  • PC의 IP 주소를 찾으세요. 방법을 모르시면 구글에서 검색하세요.
  • 웹 브라우저(예: Chrome)를 열고 다음 링크에 접속하여 PHP 코드를 테스트하세요: http://192.168.0.19/insert_temp.php?temperature=26.2. 위의 IP 주소를 본인의 PC 주소로 교체해야 한다는 점을 주목하세요.
  • 웹 브라우저에는 아래와 같이 표시됩니다:
MySQL Test

명령 프롬프트에서 다음 명령을 입력하여 데이터가 데이터베이스에 저장되었는지 확인하십시오:

SELECT * from tbl_temp;
Command Prompt
MariaDB [db_nano_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | +---------+------------+ 1 row in set (0.001 sec) MariaDB [db_nano_esp32]>

보시다시피 26.2의 온도가 데이터베이스에 저장되어 있습니다. 다음 단계는 PC의 웹 서버에 HTTP 요청을 하는 Arduino Nano ESP32 코드를 작성하는 것입니다.

아두이노 나노 ESP32 코드 작성

아래의 Arduino Nano ESP32 코드는 온도 30.5°C를 데이터베이스에 삽입하기 위해 PC에 HTTP 요청을 합니다.

/* * 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-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"; // PC의 IP 주소로 변경하세요 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() { }

사용 방법

  • Arduino Nano ESP32를 처음 사용하는 경우, Arduino IDE에서 Arduino Nano ESP32 환경 설정하는 방법을 참조하세요.
  • 위 이미지와 같이 배선하세요.
  • USB 케이블을 통해 Arduino Nano ESP32 보드를 PC에 연결하세요.
  • 코드상의 IP 주소를 귀하의 PC의 IP 주소로 변경하세요.
  • Arduino Nano ESP32에 코드를 컴파일하고 업로드하세요.
  • Arduino IDE에서 시리얼 모니터를 열세요.
How to open serial monitor on Arduino IDE

시리얼 모니터에서의 결과

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_temp;
Command Prompt
MariaDB [db_nano_esp32]> SELECT * from tbl_temp; +---------+------------+ | temp_id | temp_value | +---------+------------+ | 1 | 26.2 | | 2 | 30.5 | +---------+------------+ 2 rows in set (0.000 sec) MariaDB [db_nano_esp32]>

보시다시피, 온도 30.5가 데이터베이스에 저장되어 있습니다.

아두이노 나노 ESP32가 MySQL 데이터베이스에 데이터를 입력, 업데이트 또는 가져오는 방법

위의 예시는 MySQL 데이터베이스에 데이터를 삽입하는 방법을 보여줍니다. 데이터베이스에서 데이터를 업데이트하고 읽는 것도 비슷합니다. PHP 코드에서 MySQL 쿼리만 수정하면 됩니다. 더 많은 정보는 W3Schools.com에서 배울 수 있습니다.

동영상

비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, 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!