아두이노 나노 MySQL
아두이노 나노는 센서 데이터를 수집하여 MySQL 데이터베이스에 저장할 수 있습니다. 또한 MySQL 데이터베이스에서 데이터(명령어)를 검색하고 LED, 모터, 액추에이터 및 기타 장치를 관리할 수 있습니다.
이 튜토리얼은 Arduino Nano를 사용하여 MySQL을 제어하는 방법에 대해 알려줍니다. 구체적으로, 우리는 다음을 배울 것입니다:
- Arduino Nano가 MySQL 데이터베이스와 통신하는 최적의 방법
- Arduino Nano가 MySQL 데이터베이스에 데이터를 삽입하는 방법
- Arduino Nano가 MySQL 데이터베이스의 데이터를 업데이트하는 방법
- Arduino Nano가 MySQL 데이터베이스에서 데이터를 검색하는 방법
준비물
1 | × | Arduino Nano | Amazon | |
1 | × | USB A to Mini-B USB cable | 쿠팡 | Amazon | |
1 | × | Arduino Nano Ethernet Shield 2 | Amazon | |
1 | × | Ethernet Cable | 쿠팡 | Amazon | |
1 | × | (추천) 9V Power Adapter for Arduino Nano | Amazon | |
1 | × | (추천) Screw Terminal Expansion Board for Arduino Nano | 쿠팡 | Amazon | |
1 | × | (추천) Breakout Expansion Board for Arduino Nano | Amazon | |
1 | × | (추천) Power Splitter For Arduino Nano | Amazon |
아두이노 나노 - MySQL
시스템 아키텍처에 정통하지 않다면, MySQL 데이터베이스와 MySQL 서버를 같은 것으로 생각할 수 있습니다. 시스템 아키텍처에 대해 더 많이 알게 되면, 그들 사이의 구별점을 볼 수 있게 됩니다.
아두이노 나노가 MySQL 데이터베이스와 통신하는 두 가지 방법이 있습니다:
- MySQL 서버에 MySQL 연결을 사용하여 직접 연결하는 것(직접 접근법이라고 함)
- HTTP 연결을 통해 MySQL 서버와 간접적으로 상호작용하는 것(간접 접근법이라고 알려짐)
우리는 최적의 옵션을 찾아보자.
아두이노 나노가 MySQL 서버와 직접 상호 작용합니다.
이것은 더 간단해 보일 수 있지만 많은 단점이 있습니다:
- MySQL 사용자 계정이 MySQL 데이터베이스에 원격으로 접근하는 것을 허용하는 것은, 사용자 계정에 제한된 권한이 부여되었더라도 보안 관점에서 위험합니다.
- Arduino Nano와/또는 MySQL 서버에서 데이터를 처리하는 것은 Arduino Nano 코드와 MySQL 스크립트의 복잡성을 증가시키고 많은 Arduino Nano 자원(메모리와 CPU 사용량)을 소모합니다.
- MySQL 서버는 일부 경우에 Arduino Nano로 매우 큰 양의 데이터를 반환할 수 있으며, 이로 인해 Arduino Nano가 메모리 부족으로 작동하지 않을 수 있습니다.
- 사용 가능한 대부분의 MySQL 라이브러리는 SSL/TLS를 지원하지 않으며, 이는 사용자 이름/비밀번호를 포함한 데이터가 평문으로 전송되어 또 다른 보안 문제를 야기한다는 의미입니다.
아두이노 나노는 HTTP/HTTPS를 통해 간접적으로 MySQL 서버와 상호작용합니다.
간접적인 방식은 직접적 접근방식이 가진 모든 문제를 해결합니다. 간접 방법이 직접 접근의 단점을 어떻게 뛰어넘는지 살펴보기 전에, 먼저 그것이 어떻게 작동하는지 살펴봅시다.
작동 원리
- 1단계: 아두이노 나노가 웹 서버에 HTTP 요청을 보냅니다
- 2단계: 웹 서버는 PHP 스크립트를 실행합니다
- 3단계: PHP 스크립트는 HTTP 요청에서 데이터를 추출하고, 처리한 뒤, MySQL 데이터베이스와 상호작용합니다
- 4단계: PHP 스크립트는 결과를 처리하고 그것을 HTTP 응답을 통해 아두이노 나노에게 다시 보냅니다
이 튜토리얼에서는 PC에 웹 서버와 MySQL 서버가 설치될 것입니다.
복잡해 보일 수 있지만 그렇지 않습니다. 간접 접근 방식이 직접 방식의 단점을 어떻게 해결할 수 있는지 살펴보도록 하겠습니다.
- MySQL 및 HTTP 서버를 동일한 물리 서버에 설치함으로써, MySQL 사용자 계정이 localhost에만 접근하도록 제한할 수 있습니다. 더욱이, MySQL 계정의 사용자 이름/비밀번호는 서버에 저장됩니다(단계 3), 시스템의 보안을 강화합니다.
- 데이터는 PHP 스크립트에 의해 처리됩니다(단계 3과 4). 이는 Arduino Nano 및 MySQL 서버 모두에 대한 작업 부담과 복잡성을 줄입니다. PHP 코드를 사용하여 데이터를 처리하는 것은 Arduino Nano 코드나 MySQL 스크립트로 처리하는 것보다 훨씬 쉽습니다.
- PHP 스크립트는 데이터를 처리하고 필요한 데이터만을 Arduino Nano로 전송할 수 있습니다(단계 4) 이로 인해 메모리 부족을 방지할 수 있습니다.
- 대부분의 Ethernet/WiFi 라이브러리는 TLS/SSL을 지원하여 HTTPS 요청을 할 수 있습니다. HTTPS를 사용함으로써 데이터는 암호화되어 인터넷을 통해 안전하게 교환됩니다.
1단계에서는 Arduino Nano와 웹 서버 간 인증을 위해 다른 사용자 이름/비밀번호를 사용할 수 있습니다. 중요한 것은 HTTP 사용자 이름/비밀번호는 안전을 위해 MySQL 사용자 이름/비밀번호와 같지 않아야 한다는 것을 기억하는 것입니다.
다음 튜토리얼은 MySQL과 간접적으로 Arduino Nano를 사용하는 방법을 보여줄 것입니다. 여러 가지 장점이 있으며 이에 대해 논의될 것입니다.
아두이노 나노 - HTTP/HTTPS를 통한 MySQL
우리는 다음 단계를 수행해야 합니다:
- PC에 MySQL 서버, 웹 서버, PHP 설치하기
- MySQL 및 웹 서버 활성화하기
- MySQL 사용자 계정 만들기
- MySQL 데이터베이스 생성하기
- MySQL 테이블 구성하기
- 하나 이상의 PHP 스크립트 파일 작성하기
- 아두이노 나노 코드 작성하기
하나씩 차근차근 해 나가요. 점진적으로 진행할 수 있어요. 단계별로 차근차근 살펴보아요.
PC에 MySQL 서버, 웹 서버, 및 PHP를 설치하세요.
다행히 XAMPP 패키지에는 이 모든 것이 포함되어 있습니다.
우리는 그것을 단 한 번만 설치하면 됩니다.
- 이 링크에서 XAMPP를 다운로드하십시오.
- 설치를 실행하십시오.
설치를 완료하면 컴퓨터에서 C:\xampp\htdocs 폴더를 볼 수 있습니다. 이곳이 나중에 설명할 것처럼 PHP 코드를 두어야 할 곳입니다.
2. MySQL 및 웹 서버 활성화
- XAMPP 제어판을 엽니다.
- MySQL과 웹 서버를 활성화하려면 시작 버튼을 누릅니다. (아래 이미지 참조.)
3. MySQL 사용자 계정 생성
로컬호스트에서만 MySQL 데이터베이스에 연결할 수 있는 MySQL 계정을 생성할 것입니다:
- 사용자 이름과 비밀번호가 노출되더라도, 컴퓨터의 제어권을 갖고 있지 않는 한 공격자는 MySQL 데이터베이스에 접근할 수 없습니다.
- PHP와 MySQL이 동일한 PC에 설치되어 있기 때문에, PHP는 이 사용자 이름과 비밀번호를 사용하여 MySQL 데이터베이스에 연결할 수 있습니다.
MySQL 사용자 계정을 만들어 보겠습니다. 사용자 이름은 Arduino이고 비밀번호는 ArduinoGetStarted.com입니다:
- 컴퓨터에서 명령 프롬프트를 시작하세요. 이 튜토리얼이 끝날 때까지 이 창을 열어두세요.
- 다음 명령어를 명령 프롬프트에 입력하세요:
- 그것에.
- 기본적으로, MySQL에는 비밀번호가 없는 root 계정이 있습니다.
- 그것에 비밀번호를 추가하는 것이 권장됩니다.
명령 프롬프트에서 이 명령을 입력하여 루트 계정의 your-root-password를 입력하십시오:
명령 프롬프트에서 이 명령을 입력하세요:
루트 비밀번호를 입력한 후 엔터 키를 누르십시오.
아래 명령어를 복사하여 커맨드 프롬프트에 붙여넣어 사용자 이름이 Arduino이고 비밀번호가 ArduinoGetStarted.com인 MySQL 사용자 계정을 생성하세요:
이제 MySQL 사용자 계정을 생성했습니다. PHP 스크립트에 필요하므로 사용자 이름과 비밀번호를 기억하세요.
4. MySQL 데이터베이스를 생성하세요.
다음 명령어를 명령 프롬프트에 입력하여 db_arduino라는 제목의 데이터베이스를 생성합시다:
5. MySQL 테이블 만들기
아래의 명령들을 복사해서 명령 프롬프트에 붙여 넣어 tbl_temp라는 테이블을 만듭시다:
6. 하나 이상의 PHP 파일을 작성하십시오.
PHP 파일을 만드세요. 이름은 insert_temp.php로 지정하세요. HTTP 요청에서 온도를 검색하세요. 온도를 데이터베이스에 삽입하세요.
- "온도 27.5가 저장되었습니다."
- 이 파일을 C:\xampp\htdocs 디렉토리에 넣으세요.
- 귀하의 PC의 IP 주소를 찾아보세요. 방법을 모르시면 Google에서 검색하세요.
- PHP 코드를 테스트하려면 웹 브라우저(e.g. Chrome)를 열고 이 링크로 가세요: http://192.168.0.26/insert_temp.php?temperature=27.5. IP 주소를 귀하의 것으로 바꿔서 사용하세요.
- 웹 브라우저가 "온도 27.5가 저장되었습니다"라고 표시해야 합니다.
명령 프롬프트에서 다음 명령을 입력하여 데이터베이스에 데이터가 저장되어 있는지 확인하십시오:
27.5라는 온도가 데이터베이스에 저장되어 있음이 분명합니다. 다음 단계는 유사한 HTTP 요청을 귀하의 PC로 보낼 수 있는 아두이노 나노 코드를 작성하는 것입니다.
아두이노 나노 코드를 작성하라
우리는 테스트를 위해 Arduino Nano와 Ethernet Shield를 사용할 것입니다.
아래의 아두이노 나노 코드는 29.1°C의 온도를 데이터베이스에 입력하기 위해 PC로 HTTP 요청을 보냅니다.
사용 방법
- 이더넷 쉴드의 IP 주소를 표시할 것입니다.
- 아두이노 나노 위에 이더넷 쉴드를 쌓으십시오.
- 이더넷 케이블을 이더넷 쉴드에 연결하십시오.
- USB 케이블을 사용하여 아두이노 나노를 PC에 연결하십시오.
- PC의 IP 주소를 반영하도록 코드를 수정하십시오.
- 코드를 컴파일하고 아두이노 나노에 업로드하십시오.
- 시리얼 모니터를 엽니다.
- 시리얼 모니터에 표시되는 출력은 이더넷 쉴드의 IP 주소를 표시할 것입니다.
다음 명령어를 명령 프롬프트에 입력하여 데이터가 데이터베이스에 저장되었는지 확인하세요:
데이터베이스에는 29.1도의 온도가 기록되어 있는 것이 분명합니다.
아두이노 나노가 MySQL 데이터베이스에 데이터를 삽입, 업데이트 또는 가져오는 방법
위의 예제에서 우리는 MySQL 데이터베이스에 데이터를 입력하는 방법을 배웠습니다. 데이터베이스에서 데이터를 업데이트하고 가져오는 것도 유사합니다. PHP 스크립트에서 MySQL 쿼리를 수정하기만 하면 됩니다. 더 자세히 알고 싶다면 W3Schools를 방문하실 수 있습니다.
고급 사용법
보안 강화를 위해:
아두이노 나노 코드를 HTTP 대신에 HTTPS를 사용하도록 변경하세요. Arduino Nano - HTTPS 참조
아두이노 나노와 웹 서버 사이의 인증을 위해 사용자 이름/비밀번호 조합을 사용하세요. 기본 액세스 인증 참조
※ NOTE THAT:
가장 높은 보안을 갖춘 시스템을 만들기 위해, 추가적인 조치를 취해야 합니다 (예: MySQL 주입 방지, HTTPS를 REST API로 만들기, 데이터를 Json 형식으로 사용하기 등). 그럼에도 불구하고, 이 튜토리얼은 초보자가 아두이노 나노를 배울 수 있도록 의도되었으며, 가능한 한 간단하게 유지되었습니다. 이 튜토리얼을 완료한 후, 사용자는 이를 확장할 수 있습니다.
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.