ESP8266 - AWS IoT | ESP8266 - AWS IoT

이 튜토리얼은 ESP8266을 AWS IoT Core와 사용하는 방법을 지시합니다. 구체적으로, 다음 주제들을 자세히 다룰 것입니다:

이 단계들을 따름으로써, 여러분은 ESP8266을 AWS IoT Core와 통합하여 원활한 통신을 할 수 있는 종합적인 이해를 얻게 될 것입니다.

ESP8266 NodeMCU AWS IoT

준비물

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

ESP8266 및 AWS IoT에 관하여

ESP8266은 MQTT 프로토콜을 통해 AWS IoT Core와 연결을 설정합니다. 이 연결을 단순화시키기 위한 라이브러리들이 존재하지만, PC상의 Mosquitto 같은 로컬 MQTT 브로커에 연결하는 것보다 더 복잡합니다. 이 복잡성은 AWS IoT Core의 엄격한 보안 조치로 인해 발생하며, ESP8266 코드에 통합하기 위한 인증 자격 증명 및 승인을 획득하기 위한 구성 단계가 필요합니다. 본질적으로, 이 과정은 두 가지 주요 단계를 포함합니다:

AWS IoT Core 구성: 이 단계에서는 AWS IoT Core를 구성하여 필요한 인증 자격 증명을 생성하며, 이는 이후 ESP8266 코드에 통합됩니다.

ESP8266 코드 작성: AWS IoT Core에서 인증 자격 증명을 받은 후, 다음 단계는 ESP8266 코드를 작성하는 것입니다. 이 코드는 AWS IoT Core와의 원활한 상호 작용을 위해 필수적인 인증 및 통신 프로토콜을 통합합니다.

각 단계를 더 자세히 살펴보며 더 잘 이해해 봅시다.

ESP8266을 사용하기 위한 AWS IoT Core 설정

이 단계의 목표는 다음을 포함합니다:

  • AWS IoT Core에서 "Thing"이라고 하는 ESP8266 장치의 대표 표현을 생성하는 것.
  • ESP8266 장치가 AWS IoT Core에 연결하고, 발행 및 구독을 허가받을 수 있도록 필요한 권한을 설정하는 것으로, "정책(Policy)"이라고 함.
  • 인증에 필요한 AWS 자격증명을 생성하는 것으로, 이는 "인증서(Certificates)"로 알려져 있으며, 이 자격증명은 다운로드 받아 Arduino ESP8266 코드에 통합될 것임.

다음은 AWS IoT 콘솔을 통해 ESP8266과 함께 사용하기 위한 AWS IoT Core 구성에 대한 지침입니다. 사용자 인터페이스는 시간이 지남에 따라 변경될 수 있지만, 아래에 제공된 지침과 유사한 과정을 따를 것입니다. 참고하시기 바랍니다:

  • AWS IoT 콘솔에 로그인하세요.
  • 관리 모든 장치 Things로 이동하여 Thing을 생성하세요.
AWS IoT creates Things
  • 것들 생성 버튼을 클릭하세요.
  • 단일 것들 생성을 선택하고 다음 버튼을 클릭하세요.
AWS IoT Core creates Things
  • 예를 들어, ESP8266-thing 처럼 Thing 이름을 지정하고 페이지 하단의 다음 버튼을 클릭하세요.
AWS IoT Core Thing name

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

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

새 탭이 열릴 것입니다.

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

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

AWS IoT Core credentials file

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

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

  • AmazonRootCA1.pem - 아마존RootCA1.pem
  • Xxxxxxxxxx-certificate.pem.crt - xxxxxxxxxx-인증서.pem.crt
  • Xxxxxxxxxx-private.pem.key - xxxxxxxxxx-개인.pem.key

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

AWS IoT Core에 연결하기 위한 ESP8266 코드 작성

/* * 이 ESP8266 NodeMCU 코드는 newbiely.kr 에서 개발되었습니다 * 이 ESP8266 NodeMCU 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다. * 상세한 지침 및 연결도에 대해서는 다음을 방문하세요: * https://newbiely.kr/tutorials/esp8266/esp8266-aws-iot */ #include "secrets.h" #include <ESP8266WiFi.h> #include <MQTTClient.h> #include <ArduinoJson.h> // 이 장치가 발행/구독해야 하는 MQTT 주제 #define AWS_IOT_PUBLISH_TOPIC "esp8266/esp8266-to-aws" #define AWS_IOT_SUBSCRIBE_TOPIC "esp8266/aws-to-esp8266" #define PUBLISH_INTERVAL 5000 // 5초 BearSSL::WiFiClientSecure network; MQTTClient client = MQTTClient(256); unsigned long lastPublishTime = 0; 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()); setClock(); connectToAWS(); } void loop() { client.loop(); if (millis() - lastPublishTime > PUBLISH_INTERVAL) { sendToAWS(); lastPublishTime = millis(); } } // x.509 유효성 검사에 필요한 NTP를 통해 시간 설정 void setClock() { configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov"); Serial.print("Waiting for NTP time sync: "); time_t now = time(nullptr); while (now < 8 * 3600 * 2) { delay(500); Serial.print("."); now = time(nullptr); } Serial.println(""); struct tm timeinfo; gmtime_r(&now, &timeinfo); Serial.print("Current time: "); Serial.print(asctime(&timeinfo)); } void connectToAWS() { // AWS IoT 디바이스 자격증명 구성 network.setTrustAnchors(new BearSSL::X509List(AWS_CERT_CA)); network.setClientRSACert(new BearSSL::X509List(AWS_CERT_CRT), new BearSSL::PrivateKey(AWS_CERT_PRIVATE)); // 앞서 정의한 AWS 엔드포인트에서 MQTT 브로커에 연결 client.begin(AWS_IOT_ENDPOINT, 8883, network); // 수신 메시지를 위한 핸들러 생성 client.onMessage(messageHandler); Serial.print("ESP8266 connecting to AWS IOT"); while (!client.connect(THINGNAME)) { Serial.print("."); delay(100); } Serial.println(); if (!client.connected()) { Serial.println("ESP8266 - AWS IoT Timeout!"); return; } // 주제에 구독, 수신 메시지는 messageHandler() 함수에서 처리됨 client.subscribe(AWS_IOT_SUBSCRIBE_TOPIC); Serial.println("ESP8266 - 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"]; */ }

사용 방법

Arduino IDE에서 ESP8266을 시작하려면 다음 단계를 따르세요:

ESP8266을 처음 사용하는 경우, Arduino IDE에서 ESP8266 환경 설정하는 방법 튜토리얼을 확인하세요.

  • USB 케이블을 사용하여 ESP8266 보드를 컴퓨터에 연결합니다.
  • 컴퓨터에서 Arduino IDE를 엽니다.
  • 올바른 ESP8266 보드(예: NodeMCU 1.0 (ESP-12E Module))와 해당 COM 포트를 선택합니다.
  • Arduino IDE의 왼쪽 탐색 바에 있는 Library Manager 아이콘을 클릭하여 라이브러리 관리자를 엽니다.
  • 검색 상자에 MQTT를 입력한 다음, Joel Gaehwiler의 MQTT 라이브러리를 찾습니다.
  • MQTT 라이브러리를 설치하려면 Install 버튼을 클릭합니다.
ESP8266 NodeMCU MQTT library
  • 검색 상자에 ArduinoJson을 입력한 다음, Benoit Blanchon의 ArduinoJson 라이브러리를 찾으세요.
  • ArduinoJson 라이브러리를 설치하려면 Install 버튼을 클릭하세요.
ESP8266 NodeMCU 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 "ESP8266-thing" const char WIFI_SSID[] = ""; // CHANGE IT TO MATCH YOUR OWN NETWORK CREDENTIALS const char WIFI_PASSWORD[] = ""; // CHANGE IT TO MATCH YOUR OWN NETWORK CREDENTIALS 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_SSIDWIFI_PASSWORD
    • AWS_CERT_CA, AWS_CERT_CRT, AWS_CERT_PRIVATE. 이 정보는 이전 단계에서 다운로드한 파일에 있습니다.
    • AWS_IOT_ENDPOINT. 이 정보는 아래 이미지와 같이 AWS IoT 콘솔에서 설정을 가서 찾을 수 있습니다:
    AWS IoT endpoint

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

ESP8266에서 AWS IoT로 데이터 전송하기

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

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

AWS IoT에서 데이터를 받았는지 확인하려면 다음 단계를 따르세요:

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

AWS IoT MQTT Test Client ESP8266 NodeMCU
  • 주제 구독 버튼을 클릭하세요.
  • 주제 필터esp8266/esp8266-to-aws를 입력하세요. 주제를 변경할 수 있지만 ESP8266 코드에 있는 주제와 반드시 일치해야 합니다.
  • 구독 버튼을 클릭하세요.
  • AWS IoT 콘솔에서 ESP8266에서 보낸 데이터를 볼 수 있습니다.

AWS IoT에서 ESP8266로 데이터 전송

다음 단계를 수행하여 AWS IoT 콘솔에서 ESP8266으로 데이터를 보낼 수 있습니다:

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

AWS로 더 많은 것을 하세요

이제 ESP8266과 AWS IoT Core 간에 양방향 통신을 설정할 수 있습니다. 이것은 ESP8266에서 AWS IoT Core로 데이터를 보내고 ESP8266에서 AWS IoT Core로부터 데이터를 받을 수 있음을 의미합니다. 또한, IoTRules를 구성할 수 있는 기능을 갖추고 있어, ESP8266이 Lambda, DynamoDB, Amplify, RDS와 같은 다른 AWS서비스들과 원활하게 연결될 수 있게 합니다. IoTRules를 통해, ESP8266에서 받은 데이터를 바탕으로 동작을 자동화 할 수 있어, 다양한 IoT 응용 프로그램 및 통합을 가능하게 합니다.

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