아두이노 나노 ESP32 - MySQL | Arduino Nano ESP32 - MySQL
이 튜토리얼은 Arduino Nano ESP32를 사용하여 MySQL 데이터베이스에 데이터를 삽입/업데이트하거나 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 서버와 직접 상호작용합니다.
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로 반환합니다.
우리는 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과 웹 서버를 활성화하려면 시작 버튼을 클릭하세요(아래 이미지 참조).
2. MySQL 사용자 계정 생성하기
우리는 로컬호스트 접근 권한만 있는 MySQL 계정을 생성할 것입니다.
- 공격자가 사용자 이름/비밀번호를 알고 있더라도, 그들이 여러분의 PC를 제어하지 않는 이상 여러분의 MySQL 데이터베이스에 접근할 수 없습니다.
- 이 사용자 이름/비밀번호는 PHP가 MySQL 데이터베이스에 연결하는 데 사용될 것입니다.
이 튜토리얼은 사용자 이름과 비밀번호가 각각 ESP32와 newbiely.kr인 MySQL 사용자 계정을 생성합니다:
- 명령 프롬프트를 PC에서 엽니다. 튜토리얼이 끝날 때까지 닫지 마십시오.
- 명령 프롬프트에서 다음 명령을 입력하세요:
기본적으로 MySQL은 패스워드 없이 root 계정을 가지고 있습니다. 보안상의 이유로 root 계정에 대한 패스워드를 설정하는 것을 강력히 권장합니다(예: YOUR_ROOT_PASSWORD). 아래의 명령어를 커맨드 프롬프트에 입력하세요:
명령 프롬프트에서 MySQL 서버에 로그인하기 위해 아래 명령어를 입력하십시오:
YOUR_ROOT_PASSWORD를 입력하고 Enter를 누르세요.
아래의 명령어를 복사하여 명령 프롬프트에 붙여넣어 사용자 이름이 ESP32, 비밀번호가 newbiely.kr인 MySQL 사용자 계정을 생성합시다:
MySQL 사용자 계정을 성공적으로 생성하였습니다. 사용자 이름/비밀번호를 메모해 두십시오. PHP 스크립트에서 사용될 것입니다.
3. MySQL 데이터베이스 생성하기
명령 프롬프트에서 다음 명령어를 입력하여 db_nano_esp32 데이터베이스를 생성하세요:
4. MySQL 테이블 생성하기
아래 명령어를 복사하여 명령 프롬프트에 붙여넣어 tbl_temp 테이블을 만드세요:
6. PHP 스크립트 파일 작성하기
아무 텍스트 에디터(예: 메모장/Notepad++)를 사용해서 insert_temp.php를 생성하세요. 우리는 이 파일에서 스크립트를 작성하여 HTTP 요청에서 온도 값을 추출하고 그 온도 값을 데이터베이스에 삽입할 것입니다.
- 이 파일을 C:\xampp\htdocs 폴더 안에 넣으세요.
- PC의 IP 주소를 찾으세요. 방법을 모르시면 구글에서 검색하세요.
- 웹 브라우저(예: Chrome)를 열고 다음 링크에 접속하여 PHP 코드를 테스트하세요: http://192.168.0.19/insert_temp.php?temperature=26.2. 위의 IP 주소를 본인의 PC 주소로 교체해야 한다는 점을 주목하세요.
- 웹 브라우저에는 아래와 같이 표시됩니다:
명령 프롬프트에서 다음 명령을 입력하여 데이터가 데이터베이스에 저장되었는지 확인하십시오:
보시다시피 26.2의 온도가 데이터베이스에 저장되어 있습니다. 다음 단계는 PC의 웹 서버에 HTTP 요청을 하는 Arduino Nano ESP32 코드를 작성하는 것입니다.
아두이노 나노 ESP32 코드 작성
아래의 Arduino Nano ESP32 코드는 온도 30.5°C를 데이터베이스에 삽입하기 위해 PC에 HTTP 요청을 합니다.
사용 방법
- Arduino Nano ESP32를 처음 사용하는 경우, Arduino IDE에서 Arduino Nano ESP32 환경 설정하는 방법을 참조하세요.
- 위 이미지와 같이 배선하세요.
- USB 케이블을 통해 Arduino Nano ESP32 보드를 PC에 연결하세요.
- 코드상의 IP 주소를 귀하의 PC의 IP 주소로 변경하세요.
- Arduino Nano ESP32에 코드를 컴파일하고 업로드하세요.
- Arduino IDE에서 시리얼 모니터를 열세요.
시리얼 모니터에서의 결과
명령 프롬프트에서 다음 명령어를 사용하여 데이터베이스에 데이터가 저장되어 있는지 확인하세요:
보시다시피, 온도 30.5가 데이터베이스에 저장되어 있습니다.
아두이노 나노 ESP32가 MySQL 데이터베이스에 데이터를 입력, 업데이트 또는 가져오는 방법
위의 예시는 MySQL 데이터베이스에 데이터를 삽입하는 방법을 보여줍니다. 데이터베이스에서 데이터를 업데이트하고 읽는 것도 비슷합니다. PHP 코드에서 MySQL 쿼리만 수정하면 됩니다. 더 많은 정보는 W3Schools.com에서 배울 수 있습니다.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.