제품리뷰

ESP32-WROOM AWS IoT MQTT 실습

젊은우산 2020. 1. 28. 10:08
반응형

 

필요한 라이브러리 다운받기

ESP32 AWS IoT 라이브러리 https://github.com/ExploreEmbedded/Hornbill-Examples

DHT 온습도센서 라이브러리 https://github.com/adafruit/DHT-sensor-library

다운 받은 후 알집을 푼다. 아두이노 라이브러리 폴더에 첨부한다.

AWS에서 증명서와 정책 가져오기

 https://aws.amazon.com/ko/iot/

 

AWS IoT 애플리케이션 및 솔루션

가정, 공장, 유정, 병원, 자동차를 비롯해 그 밖에 수많은 곳에서 사용되는 디바이스는 셀 수 없이 많습니다. 디바이스의 확산으로 이제는 디바이스를 서로 연결한 후 데이터를 수집하고, 저장하고, 분석할 수 있는 솔루션의 필요성이 점차 커지고 있습니다. AWS IoT는 엣지 영역부터 클라우드에 이르기까지 광범위하고 심층적인 기능을 제공하므로 다양한 디바이스에서 거의 모든 사용 사례에 적합한 IoT 솔루션을 개발할 수 있습니다. 또한 AWS IoT 서비스가

aws.amazon.com

AWS/IoT 시작하기를 눌러 콘솔화면으로 넘어간다.

인증서를 제작하고 crt, public key, private key 3개 다운 그리고 CA 1 1개 다운
- A certificate for this thing

- A private key

- Activate눌러서 CA 키를 받아야함.

(중간에 퍼블릭키는 안받아도됨 )

이후에 정책을만들어서(Topic) 인증서에 점3개누르고 정책 연결

아두이노 스케치 수정

AWS_IoT 라이브러리에서 aws_iot_certficates.c 수정해야하는데 이곳에 위에서 가져온

증명서와 정책에 각 줄에 \n\을 추가하고 복사 붙여넣기 해서 저장해놓는다.

관리자권한이 필요할 수 있기에 다른곳에서 수정한후 다시 가져다 놓는것을 추천함.

ESP32의

#include <AWS_IOT.h>

#include <WiFi.h>

char WIFI_SSID[]="Wifi_name";

char WIFI_PASSWORD[]="Wifi_password";

char HOST_ADDRESS[]="xxxxxxxxxxxx.ats.iot.us-west-2.amazonaws.com";

char CLIENT_ID[]= "ESP32_name";

char TOPIC_NAME[]= "$aws/things/ESP32_IoT_MQTT/shadow/update";#include 

int status = WL_IDLE_STATUS;
int tick=0,msgCount=0,msgReceived = 0;
char payload[512];
char rcvdPayload[512];


void setup() {
    
    Serial.begin(115200);
    delay(2000);

    while (status != WL_CONNECTED)
    {
        Serial.print("Attempting to connect to SSID: ");
        Serial.println(WIFI_SSID);
        // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
        status = WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

        // wait 5 seconds for connection:
        delay(5000);
    }

    Serial.println("Connected to wifi");

    if(aws.connect(HOST_ADDRESS,CLIENT_ID)== 0) // Connect to AWS using Host Address and Cliend ID
    {
        Serial.println("Connected to AWS");
        delay(1000);
    }
    else
    {
        Serial.println("AWS connection failed, Check the HOST Address");
        while(1);
    }

    delay(2000);

}


void loop() {

    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    float h = 11.11;
    // Read temperature as Celsius (the default)
    float t = 22.22;
    // Read temperature as Fahrenheit (isFahrenheit = true)
    float f = 33.33;

    // Check if any reads failed and exit early (to try again).
    if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println("Failed to read from DHT sensor!");
    }
    else
    {
        sprintf(payload,"Humidity:%f  Temperature:%f'C",h,t); // Create the payload for publishing
        
        if(aws.publish(TOPIC_NAME,payload) == 0)   // Publish the message(Temp and humidity)
        {        
            Serial.print("Publish Message:");   
            Serial.println(payload);
        }
        else
        {
            Serial.println("Publish failed");
        }
        // publish the temp and humidity every 5 seconds.
        vTaskDelay(5000 / portTICK_RATE_MS);     



     
    } 

}

 

AWS-IoT 에 사물관리에 들어가서, 상호작용에 MQTT의 토픽을 받을 수 있는 섀도우 업데이트 코드를 위의 TOPIC_NAME에 넣고, HTTPS의 Rest API 엔드포인트를 HOST_ADDRESS에 넣는다.

클라이언트 아이디는 아무렇게나해도되는듯?

AWS에서 테스트/구독

ESP32에 코드를 업로드한후, AWS-IoT로 들어가서 테스트 클릭.

구독 주제에 TOPIC-NAME의 토픽주소를 복사한뒤 설정사항 설정후 구독..

ESP32 코드업로드 데이터 로깅 데모

반응형