아두이노 - MySQL | Arduino - MySQL
아두이노는 센서 데이터를 수집하여 MySQL 데이터베이스에 저장할 수 있습니다. 또한, 아두이노는 MySQL 데이터베이스에서 데이터(명령)를 받아 LED, 모터, 액추에이터, 장치 등을 제어할 수 있습니다.
이 튜토리얼에서는 다음을 배우게 됩니다:
- Arduino가 MySQL 데이터베이스와 상호작용하는 가장 좋은 방법
- Arduino가 MySQL 데이터베이스에 데이터를 삽입하는 방법
- Arduino가 MySQL 데이터베이스의 데이터를 업데이트하는 방법
- Arduino가 MySQL 데이터베이스에서 데이터를 가져오는 방법
이 튜토리얼은 두 가지 경우에 대한 아두이노 코드를 제공합니다:
- 아두이노 우노 R4 와이파이
- 아두이노 우노/메가 이더넷 쉴드 2와 함께
준비물
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 |
Alternatively if using Ethernet:
1 | × | Arduino Uno | Amazon | |
1 | × | USB 2.0 cable type A/B | 쿠팡 | Amazon | |
1 | × | Arduino Ethernet Shield 2 | Amazon | |
1 | × | Ethernet Cable | Amazon | |
1 | × | (Optional) 9V Power Adapter for Arduino | Amazon | |
1 | × | (Recommended) Screw Terminal Block Shield for Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Breadboard Shield For Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Enclosure For Arduino Uno | Amazon |
아두이노 - MySQL
시스템 아키텍처에 대한 지식이 많지 않다면, MySQL 데이터베이스와 MySQL 서버 두 용어를 같은 것으로 이해할 수 있습니다. 시스템 아키텍처에 대해 많이 알게 되면 나중에 차이점을 알게 될 것입니다.
아두이노가 MySQL 데이터베이스와 상호작용하는 방법은 두 가지가 있습니다:
- 아두이노는 MySQL 연결(직접 방식이라고 함)을 통해 MySQL 서버와 직접 상호작용합니다.
- 아두이노는 HTTP 연결을 통해 MySQL 서버와 간접적으로 상호작용합니다(간접 방식이라고 함).
최고를 찾아보자.
아두이노는 MySQL 서버와 직접 상호작용합니다.
이것은 더 간단해 보이지만 많은 단점이 있습니다:
이것은 MySQL 사용자 계정이 원격으로 MySQL 데이터베이스에 접근할 수 있게 해줍니다 ⇒ 이것은 사용자 계정에 제한된 권한이 부여되었다 하더라도 보안 측면에서 위험합니다.
데이터는 Arduino와/또는 MySQL 서버에서 처리되어야 합니다 ⇒ 이것은 Arduino 코드와 MySQL 스크립트의 복잡성을 증가시킵니다. 특히, Arduino 자원(메모리와 CPU 사용량)을 많이 소모합니다.
MySQL 서버는 경우에 따라 Arduino에 매우 큰 양의 데이터를 반환할 수 있습니다 ⇒ 이것은 Arduino가 메모리 부족으로 동작하지 못하게 할 수 있습니다.
사용 가능한 대부분의 MySQL 라이브러리는 SSL/TLS를 지원하지 않습니다. 사용자 이름/비밀번호를 포함한 데이터가 평문으로 전송됩니다 ⇒ 또 다른 보안 문제입니다.
아두이노는 HTTP/HTTPS를 통해 간접적으로 MySQL 서버와 상호작용합니다.
이 간접적인 방식은 직접적인 방식이 가지는 모든 문제를 해결합니다. 간접적인 방식이 직접적인 방식의 단점을 어떻게 극복하는지 보기 전에, 먼저 그것이 어떻게 작동하는지 보겠습니다.
작동 원리
- 1단계: 아두이노가 웹 서버에 HTTP 요청을 합니다.
- 2단계: 웹 서버가 PHP 스크립트를 실행합니다.
- 3단계: PHP 스크립트는 HTTP 요청에서 데이터를 가져와 데이터를 처리한 다음 MySQL 데이터베이스와 상호작용합니다.
- 4단계: PHP 스크립트가 결과를 처리하고 HTTP 응답을 통해 결과를 아두이노에 반환합니다.
이 튜토리얼에서는 웹 서버와 MySQL 서버가 PC에 설치될 것입니다.
복잡해 보이지만 그렇지 않습니다. 이제 간접적인 방식이 직접적인 방식의 단점을 어떻게 극복하는지 살펴보겠습니다.
- MySQL 서버와 HTTP 서버를 동일한 물리 서버에 설치함으로써, MySQL 사용자 계정이 로컬호스트에만 접근하도록 제한할 수 있습니다. 더욱이, MySQL 계정의 사용자 이름/비밀번호는 서버에 저장됩니다(3단계), 이는 시스템을 더 안전하게 만듭니다.
- 데이터는 PHP 스크립트에 의해 처리됩니다(3단계 및 4단계). 이는 아두이노와 MySQL 서버의 작업 및 복잡성을 줄입니다. 데이터를 PHP 코드로 처리하는 것은 아두이노 코드와 MySQL 스크립트로 처리하는 것보다 훨씬 쉽습니다.
- PHP 스크립트는 데이터를 처리하고 필요한 데이터만 아두이노(4단계)로 보냄으로써, 아두이노가 메모리 부족으로 인해 작동을 멈추는 것을 방지할 수 있습니다.
- 대부분의 Ethernet/WiFi 라이브러리는 TLS/SSL을 지원하여 HTTPS 요청을 할 수 있게 합니다. HTTPS를 사용함으로써, 데이터는 암호화되어 인터넷을 통해 안전하게 교환됩니다.
1단계에서 Arduino와 웹 서버 간 인증을 위해 다른 사용자 이름/비밀번호를 사용할 수 있습니다. 보안상의 이유로 HTTP 사용자 이름/비밀번호는 MySQL 사용자 이름/비밀번호와 달라야 한다는 점을 유의하십시오.
이러한 이점들을 바탕으로, 본 튜토리얼의 나머지 부분에서는 간접적인 방식을 통해 Arduino를 MySQL과 사용하는 방법을 소개할 것입니다.
아두이노 - HTTP/HTTPS를 통한 MySQL
다음 단계를 수행해야 합니다:
- PC에 MySQL 서버, 웹 서버, PHP 설치하기
- MySQL 및 웹 서버 활성화하기
- MySQL 사용자 계정 생성하기
- MySQL 데이터베이스 생성하기
- MySQL 테이블 생성하기
- 하나 이상의 PHP 스크립트 파일 작성하기
- 아두이노 코드 작성하기
이제 단계별로 해보자.
PC에 MySQL 서버, 웹 서버, PHP를 설치하세요.
다행히도 XAMPP 패키지에 이 모든 것이 포함되어 있습니다. 우리는 한 번만 설치하면 됩니다.
- 이 링크에서 XAMPP를 다운로드하십시오.
- 설치하십시오.
설치 후 PC에서 C:\xampp\htdocs 폴더를 볼 수 있습니다. 여기에는 PHP 코드를 넣는 곳입니다(나중에 참조).
2. MySQL 및 웹 서버 활성화
- XAMPP 제어판 열기
- MySQL 및 웹 서버를 활성화하려면 시작 버튼을 클릭하세요 (아래 이미지 참조)
3. MySQL 사용자 계정 생성
로컬호스트에서만 MySQL 데이터베이스에 연결할 수 있는 MySQL 계정을 생성하겠습니다.
- 사용자 이름/비밀번호가 공개되더라도, 공격자가 귀하의 PC를 제어하지 않는 한 귀하의 MySQL 데이터베이스에 접근할 수 없습니다.
- PHP와 MySQL이 동일한 PC에 설치되어 있기 때문에, PHP는 이 사용자 이름/비밀번호를 사용하여 MySQL 데이터베이스에 연결할 수 있습니다.
다음과 같이 MySQL 사용자 계정을 만듭시다: 사용자 이름은 Arduino이고 비밀번호는 ArduinoGetStarted.com입니다.
- PC에서 명령 프롬프트를 열십시오. 튜토리얼이 끝날 때까지 닫지 마십시오.
- 명령 프롬프트에서 다음 명령을 입력하십시오:
기본적으로 MySQL은 비밀번호 없이 루트 계정을 가지고 있습니다. 비밀번호를 추가해야 합니다.
다음 명령어를 명령 프롬프트에 입력하여 루트 계정의 (예: your-root-password)를 설정합니다:
명령 프롬프트에서 다음 명령을 입력하십시오:
- 루트 비밀번호를 입력하고 Enter를 누르세요.
아래 명령어를 복사하여 커맨드 프롬프트에 붙여넣어 사용자 이름이 Arduino이고 비밀번호가 ArduinoGetStarted.com인 MySQL 사용자 계정을 생성하십시오:
이제 MySQL 사용자 계정을 성공적으로 생성하였습니다. 사용자 이름과 비밀번호를 기억하세요. PHP 스크립트에서 사용될 것입니다.
4. MySQL 데이터베이스 생성하기
다음 명령어를 커맨드 프롬프트에 입력하여 db_arduino라는 데이터베이스를 만듭시다:
5. MySQL 테이블 생성
아래의 커맨드를 복사하여 커맨드 프롬프트에 붙여 넣어 tbl_temp라는 이름의 테이블을 생성합시다:
6. 하나 이상의 PHP 파일을 작성하십시오.
HTTP 요청에서 온도를 가져와 데이터베이스에 삽입하는 insert_temp.php라는 PHP 파일을 생성하십시오.
이 파일을 C:\xampp\htdocs 폴더 안에 넣으세요.
PC의 IP 주소를 얻으세요. 모르는 경우에는 구글에서 검색하세요.
웹 브라우저(예: Chrome)를 열고 다음 링크에 접속해서 PHP 코드를 테스트하세요: http://192.168.0.26/insert_temp.php?temperature=27.5 . 위의 IP 주소를 귀하의 PC 주소로 바꿔야 한다는 점을 주의하세요.
웹 브라우저에서의 출력
명령 프롬프트에서 다음 명령어를 입력하여 데이터베이스에 데이터가 저장되어 있는지 확인하세요:
보시다시피, 데이터베이스에는 27.5의 온도가 저장되어 있습니다. 다음 단계는 유사한 HTTP 요청을 여러분의 PC로 만드는 아두이노를 작성하는 것입니다.
7. 아두이노 코드 작성하기
테스트를 위해 Arduino Uno와 Ethernet Shield 또는 Arduino Uno R4 WiFi를 사용할 것입니다.
아래의 아두이노 코드는 온도 29.1°C를 데이터베이스에 삽입하기 위해 PC로 HTTP를 만듭니다.
아두이노 우노 R4 WiFi를 위한 아두이노 코드
아두이노 우노/메가 및 이더넷 쉴드를 위한 아두이노 코드
사용 방법
- 이더넷 쉴드를 사용하는 경우, 아두이노 우노에 이더넷 쉴드를 쌓으세요.
- 이더넷 케이블을 이더넷 쉴드에 연결하세요.
- USB 케이블을 통해 아두이노 우노를 PC에 연결하세요.
- 코드 내의 IP 주소를 귀하의 PC의 IP 주소로 변경하세요.
- 코드를 컴파일하고 아두이노에 업로드하세요.
- 시리얼 모니터를 열세요.
- 시리얼 모니터의 결과 확인하세요.
명령 프롬프트에서 다음 명령을 입력하여 데이터베이스에 데이터가 저장되어 있는지 확인하십시오:
보시다시피, 온도 29.1이 데이터베이스에 저장되어 있습니다.
아두이노가 MySQL 데이터베이스에 데이터를 삽입, 업데이트 또는 가져오는 방법
위의 예에서 우리는 MySQL 데이터베이스에 데이터를 삽입하는 방법을 배웠습니다. 데이터베이스에서 데이터를 업데이트하고 가져오는 것은 비슷합니다. PHP 스크립트에서 MySQL 쿼리를 변경하기만 하면 됩니다. W3Schools에서 더 배울 수 있습니다.
고급 사용법
보안을 강화하기 위해
- Arduino 코드를 변경하여 HTTP 대신 HTTPS를 사용할 수 있습니다. Arduino - HTTPS 참고하세요.
- 사용자 이름/비밀번호를 사용하여 Arduino와 웹 서버 간의 인증을 수행할 수 있습니다. 기본 액세스 인증을 참고하세요.
※ NOTE THAT:
최고 수준의 보안을 갖춘 완벽한 시스템을 만들기 위해서는 더 많은 작업을 해야 합니다 (예: MySQL 인젝션 방지, HTTPS를 REST API로 만들기, 데이터에 Json 형식 사용하기 등). 하지만, 이 튜토리얼은 초보자들이 아두이노를 배우기 위해 만들어졌습니다. 가능한 한 단순하게 만들었습니다. 이 튜토리얼을 학습한 후 사용자는 이를 확장할 수 있습니다.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.