아두이노 나노 ESP32 - AWS IoT | Arduino Nano ESP32 - AWS IoT

이 튜토리얼은 Arduino Nano ESP32를 AWS IoT Core에 연결하는 방법을 안내합니다. 자세히, 우리는 배울 것입니다:

Arduino Nano ESP32 AWS IoT

준비물

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

Arduino Nano ESP32 및 AWS IoT에 관하여

Arduino Nano ESP32는 MQTT 프로토콜을 통해 AWS IoT Core에 연결합니다. 이것은 라이브러리가 제공되므로 사용하기 쉬워 큰 문제가 아닙니다.

그러나 아두이노 나노 ESP32를 PC에 설치된 Mosquitto와 같은 MQTT 브로커에 연결하는 것만큼 쉽지는 않습니다. 이는 AWS IoT 코어가 보안 조치를 엄격하게 시행하기 때문입니다. 아두이노 나노 ESP32 코드를 작성하기 전에 인증 자격 증명 및 권한 부여를 얻기 위해 AWS IoT 코어에서 설정이 필요합니다. 요약하자면, 우리는 두 가지 주요 단계를 밟아야 합니다:

  • 1단계: AWS IoT Core 구성하기. 이 단계를 마치면 인증 자격 증명을 얻게 되며, 이는 Arduino Nano ESP32 코드에서 사용됩니다.
  • 2단계: Arduino Nano ESP32 코드 작성하기.

자세히 살펴보자

아두이노 나노 ESP32 사용을 위한 AWS IoT Core 구성

이 단계의 목적은:

  • AWS IoT Core에서 아두이노 나노 ESP32의 표현을 생성합니다(Thing이라고 합니다).
  • 아두이노 나노 ESP32가 AWS IoT Core에 연결/게시/구독할 수 있는 권한을 부여하는 인증을 구성합니다(Policy라고 합니다).
  • 인증에 사용될 AWS 자격 증명을 생성합니다(Certificates라고 합니다). 생성 후, 이 자격 증명을 다운로드하여 아두이노 ESP32 코드에 배치합니다.

아래는 AWS IoT 콘솔을 통해 Arduino Nano ESP32와 함께 AWS IoT Core를 구성하는 방법을 보여줍니다. AWS에서 시간이 지남에 따라 사용자 인터페이스를 변경할 수 있지만, 아래와 유사할 것입니다:

AWS IoT Console에 로그인하세요.

관리 모든 장치 Things로 이동하여 Thing 생성하세요.

AWS IoT creates Things
  • 물건 만들기 버튼을 클릭하세요.
  • 단일 항목 만들기를 선택하고 다음 버튼을 클릭하세요.
AWS IoT Core creates Things

Thing 이름을 지정하세요. 예를 들어, ESP32-thing을 입력하고 페이지 하단의 다음 버튼을 클릭하세요.

AWS IoT Core Thing name

자격증명을 생성하려면 새 인증서 자동 생성 옵션을 선택하고 다음 버튼을 클릭하세요.

AWS IoT Core generates certificate
  • 이제 인증서가 생성되어 Thing에 연결되었습니다.
  • 정책 생성 버튼을 클릭하여 정책을 생성하세요.
AWS IoT Core Create policy

새 탭이 열릴 것입니다.

AWS IoT Core Create policy ESP32
  • 예를 들어, ESP32-policy와 같은 정책 이름을 지정하고 JSON 버튼을 클릭하세요.
  • 아래의 JSON 정책 내용을 복사하여 정책 문서 영역에 붙여넣으세요:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }
  • 페이지 하단에 있는 생성 버튼을 클릭하여 정책을 생성하세요.
  • 이제 정책이 생성되어 인증서에 연결되었습니다. 그 페이지를 닫고 Thing 페이지로 돌아가세요.
  • ESP32-정책을 확인하고 Thing 생성 버튼을 클릭하여 Thing을 생성하세요.
AWS IoT Core creates Thing ESP32

팝업 창이 나타나서 자격 증명 파일을 다운로드할 수 있습니다. 모든 파일을 다운로드하여 PC의 안전한 위치에 보관하고 기밀로 유지하세요.

AWS IoT Core credentials file

그런 다음, 완료 버튼을 클릭하세요.

다운로드한 파일 중 다음 단계에서 Arduino Nano ESP32 코드에 사용될 세 개의 파일이 있습니다:

  • Xxxxxxxxxx-certificate.pem.crt - xxxxxxxxxx-인증서.pem.crt
  • Xxxxxxxxxx-private.pem.key - xxxxxxxxxx-개인.pem.key
  • AmazonRootCA1.pem - AmazonRootCA1.pem

이 파일들은 메모장이나 Notepad++와 같은 모든 텍스트 편집기로 열 수 있습니다.

AWS IoT Core에 연결하기 위한 아두이노 나노 ESP32 코드 작성

/* * 이 Arduino Nano ESP32 코드는 newbiely.kr 에서 개발되었습니다 * 이 Arduino Nano ESP32 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/arduino-nano-esp32/arduino-nano-esp32-aws-iot */ #include "secrets.h" #include <WiFiClientSecure.h> #include <MQTTClient.h> #include <ArduinoJson.h> #include "WiFi.h" // 이 장치가 게시 / 구독해야하는 MQTT 토픽 #define AWS_IOT_PUBLISH_TOPIC "esp32/esp32-to-aws" #define AWS_IOT_SUBSCRIBE_TOPIC "esp32/aws-to-esp32" #define PUBLISH_INTERVAL 4000 // 4초 WiFiClientSecure net = WiFiClientSecure(); MQTTClient client = MQTTClient(256); unsigned long lastPublishTime = 0; void setup() { Serial.begin(9600); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Arduino Nano ESP32 connecting to Wi-Fi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); connectToAWS(); } void loop() { client.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToAWS(); lastPublishTime = millis(); } } void connectToAWS() { // AWS IoT 디바이스 자격증명을 사용하도록 WiFiClientSecure 구성 net.setCACert(AWS_CERT_CA); net.setCertificate(AWS_CERT_CRT); net.setPrivateKey(AWS_CERT_PRIVATE); // 앞서 정의한 AWS 엔드포인트에서 MQTT 브로커에 연결 client.begin(AWS_IOT_ENDPOINT, 8883, net); // 수신 메시지 처리를 위한 핸들러 생성 client.onMessage(messageHandler); Serial.print("Arduino Nano ESP32 connecting to AWS IOT"); while (!client.connect(THINGNAME)) { Serial.print("."); delay(100); } Serial.println(); if (!client.connected()) { Serial.println("Arduino Nano ESP32 - AWS IoT Timeout!"); return; } // 메시지 핸들러 함수에 의해 처리되는 메시지를 주제로 구독 client.subscribe(AWS_IOT_SUBSCRIBE_TOPIC); Serial.println("Arduino Nano ESP32 - AWS IoT Connected!"); } void sendToAWS() { StaticJsonDocument<200> message; message["timestamp"] = millis(); message["data"] = analogRead(0); // 혹은 다른 센서에서 데이터를 읽을 수 있음 char messageBuffer[512]; serializeJson(message, messageBuffer); // 클라이언트에 출력 client.publish(AWS_IOT_PUBLISH_TOPIC, messageBuffer); Serial.println("sent:"); Serial.print("- topic: "); Serial.println(AWS_IOT_PUBLISH_TOPIC); Serial.print("- payload:"); Serial.println(messageBuffer); } void messageHandler(String &topic, String &payload) { Serial.println("received:"); Serial.println("- topic: " + topic); Serial.println("- payload:"); Serial.println(payload); // 수신된 데이터를 json 객체로 처리한 후 무언가를 제어할 수 있음 /* StaticJsonDocument<200> doc; deserializeJson(doc, payload); const char* message = doc["message"]; */ }

사용 방법

  • 아두이노 나노 ESP32를 처음 사용하는 경우, 아두이노 나노 ESP32를 위한 환경 설정 방법을 확인하세요.
  • 아두이노 IDE의 왼쪽 네비게이션 바에 있는 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다.
  • 검색 상자에 MQTT를 입력한 다음, Joel Gaehwiler에 의한 MQTT 라이브러리를 찾습니다.
  • MQTT 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
Arduino Nano ESP32 MQTT library

검색 상자에 ArduinoJson을 입력한 후, Benoit Blanchon이 만든 ArduinoJson 라이브러리를 찾으세요.

Install 버튼을 클릭하여 ArduinoJson 라이브러리를 설치하세요.

Arduino Nano ESP32 Json library
  • 위의 코드를 복사하여 아두이노 IDE에 붙여넣으세요.
  • 아래의 방법 중 하나를 사용하여 아두이노 IDE에서 secrets.h 파일을 생성하세요:
    • 직렬 모니터 아이콘 아래에 있는 버튼을 클릭하고 새 탭을 선택하거나, Ctrl+Shift+N 키를 사용하세요.
    Arduino IDE 2 adds file

    파일 이름을 secrets.h로 지정하고 OK 버튼을 클릭하세요.

    Arduino IDE 2 adds file secrets.h

    아래 코드를 복사한 다음 만들어진 secrets.h 파일에 붙여넣으십시오.

    #include <pgmspace.h> #define SECRET #define THINGNAME "ESP32-thing" const char WIFI_SSID[] = ""; const char WIFI_PASSWORD[] = ""; const char AWS_IOT_ENDPOINT[] = "xxxxx.amazonaws.com"; // Amazon Root CA 1 static const char AWS_CERT_CA[] PROGMEM = R"EOF( -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- )EOF"; // Device Certificate static const char AWS_CERT_CRT[] PROGMEM = R"KEY( -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- )KEY"; // Device Private Key static const char AWS_CERT_PRIVATE[] PROGMEM = R"KEY( -----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- )KEY";

    다음 정보를 secrets.h에 업데이트하세요.

    • 귀하의 WiFi 네트워크의 WIFI_SSIDWIFI_PASSWORD
    • AWS_CERT_CA, AWS_CERT_CRT, AWS_CERT_PRIVATE. 이 정보들은 이전 단계에서 다운로드한 파일들에 있습니다.
    • AWS_IOT_ENDPOINT. 이 정보는 아래 이미지처럼 AWS IoT 콘솔에서 설정으로 이동하여 찾을 수 있습니다:
    AWS IoT endpoint

    Arduino IDE에서 Upload 버튼을 클릭하여 Arduino Nano ESP32 보드에 코드를 컴파일하고 업로드하세요.

아두이노 나노 ESP32에서 AWS IoT로 데이터 전송

위의 Arduino Nano ESP32 코드는 아날로그 핀에서 주기적으로 데이터를 읽어서 4초마다 AWS IoT로 전송합니다. Arduino IDE에서 시리얼 모니터를 열면 아래와 같은 로그를 볼 수 있습니다:

COM6
Send
Arduino Nano ESP32 connecting to AWS IOT. Arduino Nano ESP32 - AWS IoT Connected! sent: - topic: esp32/esp32-to-aws - payload:{"timestamp":12743,"data":0} sent: - topic: esp32/esp32-to-aws - payload:{"timestamp":16745,"data":130}
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

AWS IoT에서 데이터가 수신되었는지 여부를 확인하려면 다음 단계를 수행하십시오:

AWS IoT 콘솔에서 테스트 MQTT 테스트 클라이언트로 이동하세요.

AWS IoT MQTT Test Client ESp32
  • 주제 구독하기 버튼을 클릭하세요.
  • 주제 필터esp32/esp32-to-aws를 입력하세요. 주제를 변경할 수 있지만 Arduino Nano ESP32 코드의 주제와 일치해야 합니다.
  • 구독하기 버튼을 클릭하세요.
  • AWS IoT 콘솔에서 Arduino Nano ESP32에서 보낸 데이터를 볼 수 있게 됩니다.

AWS IoT에서 Arduino Nano ESP32로 데이터 전송

다음 단계를 수행하여 AWS IoT 콘솔에서 아두이노 나노 ESP32로 데이터를 보낼 수 있습니다:

  • Arduino IDE에서 시리얼 모니터 열기
  • AWS IoT 콘솔에서 테스트 MQTT 테스트 클라이언트로 이동하세요.
AWS IoT MQTT Test Client ESp32
  • 주제에 게시 버튼을 클릭하세요.
  • 주제 이름esp32/aws-to-esp32를 입력하세요. 주제를 변경할 수 있지만 아두이노 나노 ESP32 코드의 주제와 일치해야 합니다.
  • 선택적으로 메시지 페이로드를 변경하거나 기본값을 유지할 수 있습니다.
  • 게시 버튼을 클릭하세요.
  • 아두이노 IDE의 시리얼 모니터를 확인하세요. AWS IoT 콘솔에서 보낸 메시지가 표시됩니다.
COM6
Send
received: - topic: esp32/aws-to-esp32 - payload: { "message": "Hello from AWS IoT console" }
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

AWS로 더 많은 것을 하세요

이제 Arduino Nano ESP32에서 AWS IoT Core로 데이터를 보내고 그 반대로도 데이터를 보낼 수 있습니다. 그런 다음, IoTRule을 설정하여 Arduino Nano ESP32를 Lambda, DynamoDB, Amplify, RDS와 같은 기타 AWS 서비스와 연결할 수 있습니다.

※ 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!