Search Code

ESP32 튜토리얼 48/55 - 원격 온도 모니터링 및 LED 제어 MQTT | SunFounder의 ESP32 IoT 키트

ESP32 튜토리얼 48/55 - 원격 온도 모니터링 및 LED 제어 MQTT | SunFounder의 ESP32 IoT 키트

이 튜토리얼에서는 SunFounder의 ESP32 확장 보드와 함께 ESP32 모듈을 활용하여 Adafruit IO 플랫폼을 통해 온도와 습도를 원격으로 모니터링하는 방법을 살펴보겠습니다. 또한 웹 인터페이스를 통해 LED를 제어하는 기능도 구현할 것입니다. 이 프로젝트가 끝나면 브라우저에서 실시간 온도 및 습도 데이터를 확인하고 LED를 켜고 끌 수 있게 됩니다.

이 프로젝트는 ESP32와 Adafruit IO 서비스 간의 효율적인 통신을 위해 MQTT 프로토콜을 활용합니다. MQTT는 가볍고 IoT 애플리케이션에 적합하여 센서 데이터를 쉽게 게시하고 LED 제어 명령을 구독할 수 있게 해줍니다. 코드와 배선에 대한 자세한 설명은 이 튜토리얼과 함께 제공되는 비디오(비디오 00:00 부분)를 확인하세요.

하드웨어 설명

이 프로젝트의 주요 구성 요소는 ESP32 마이크로컨트롤러, DHT11 온습도 센서, 그리고 LED입니다. ESP32는 내장 Wi-Fi 및 Bluetooth 기능을 갖춘 강력한 마이크로컨트롤러로, IoT 프로젝트에 이상적인 선택입니다. 여러 작업을 처리하고 인터넷에 원활하게 연결할 수 있습니다.

DHT11 센서는 온도와 습도를 측정하는 역할을 합니다. ESP32가 읽을 수 있는 디지털 신호를 출력합니다. LED는 표시등 역할을 하며 인터넷을 통해 장치를 관리하는 MQTT 프로토콜의 효율성을 입증하기 위해 원격으로 제어할 수 있습니다.

데이터시트 세부 정보

제조업체 Adafruit
부품 번호 DHT11
로직/IO 전압 3.3 V
공급 전압 3.3 V
출력 전류(채널당) 20 mA
피크 전류(채널당) 50 mA
PWM 주파수 가이드 해당 없음
입력 로직 임계값 0.3 V(낮음), 0.7 V(높음)
전압 강하 / RDS(on) / 포화 해당 없음
열 제한 0 ~ 50 °C
패키지 3핀
참고 사항 / 변형 더 높은 정확도를 위해 DHT22를 사용하세요.

 

  • 손상을 방지하기 위해 올바른 배선을 확인하세요.
  • 전류 제한을 위해 LED와 함께 220옴 저항을 사용하세요.
  • 필요한 경우 DHT11 데이터 핀에 풀업 저항을 사용하세요.
  • Wi-Fi 자격 증명의 대소문자 구분을 확인하세요.
  • 연결 문제 디버깅을 위해 시리얼 출력을 모니터링하세요.
  • 충돌을 피하기 위해 MQTT 주제를 고유하게 유지하세요.
  • 센서 판독값이 유효한지 테스트하세요.
  • DHT11의 응답 시간에 주의하세요. 판독값이 안정화되는 데 시간이 걸릴 수 있습니다.

LED = LED 제어; temperature = 온도 데이터 게시; humidity = 습도 데이터 게시.

배선 지침

구성 요소를 배선하려면 먼저 DHT11 센서를 연결하세요. DHT11의 왼쪽 핀을 빨간색 와이어를 사용하여 브레드보드의 3.3V 전원 레일에 연결합니다. DHT11의 중간 핀은 노란색 와이어를 사용하여 ESP32의 13번 핀에 연결해야 합니다. 마지막으로 DHT11의 오른쪽 핀을 파란색 와이어를 사용하여 접지 레일에 연결합니다.

다음으로 LED의 경우 양극(긴 다리)을 220옴 저항을 통해 ESP32의 15번 핀에 연결합니다. 음극(짧은 다리)을 브레드보드의 접지 레일에 직접 연결합니다. 모든 연결이 안전한지 확인하고 느슨한 와이어가 없는지 다시 확인하세요.

대시보드 설정

  1. Adafruit IO를 방문한 다음, Start for free를 클릭하여 무료 계정을 만드세요.

    ../../_images/sp230516_102503.png
  2. 양식을 작성하여 계정을 만드세요.

    ../../_images/sp230516_102629.png
  3. Adafruit 계정을 만든 후, Adafruit IO를 다시 열어야 합니다. Dashboards를 클릭한 다음, New Dashboard를 클릭하세요.

    ../../_images/sp230516_103347.png
  4. New Dashboard를 만드세요.

    ../../_images/sp230516_103744.png
  5. 새로 만든 Dashboard에 들어가서 새 블록을 만드세요.

    ../../_images/sp230516_104234.png
  6. Toggle 블록 1개를 만드세요.

    ../../_images/sp230516_105727.png
  7. 다음으로, 여기에서 새 피드를 만들어야 합니다. 이 토글은 LED를 제어하는 데 사용되며, 이 피드의 이름을 “LED”로 지정하겠습니다.

    ../../_images/sp230516_105641.png
  8. LED 피드를 선택한 다음, 다음 단계로 이동하세요.

    ../../_images/sp230516_105925.png
  9. 블록 설정(주로 Block Title, On Text, Off Text)을 완료한 다음, 오른쪽 하단의 Create block 버튼을 클릭하여 마칩니다.

    ../../_images/sp230516_110124.png
  10. 또한 두 개의 Text Blocks도 만들어야 합니다. 이 블록들은 온도와 습도를 표시하는 데 사용됩니다. 따라서 temperaturehumidity라는 이름의 피드 두 개를 만드세요.

    ../../_images/sp230516_110657.png
  11. 생성 후, 대시보드는 다음과 비슷하게 보일 것입니다:

    ../../_images/sp230516_111134.png
  12. 대시보드의 Edit Layout 옵션을 사용하여 레이아웃을 조정할 수 있습니다.

    ../../_images/sp230516_111240.png
  13. API KEY를 클릭하면 사용자 이름과 API KEY가 표시됩니다. 코드에 필요하므로 이 값을 기록해 두세요.

    ../../_images/sp230516_111641.png

 

코드 예제 및 설명

코드는 필요한 라이브러리를 포함하고, Wi-Fi 자격 증명을 설정하며, MQTT 매개변수를 정의하는 것으로 시작합니다. AIO_USERNAMEAIO_KEY와 같은 주요 식별자는 Adafruit IO 서비스에 인증하는 데 사용됩니다.

#define AIO_USERNAME "YourUsername"
#define AIO_KEY "YourKey"

이 줄들은 Adafruit IO 사용자 이름과 키를 정의하며, 이는 MQTT 브로커에 연결하는 데 필수적입니다. 성공적인 연결을 위해 이 값들이 정확한지 확인하세요.

setup() 함수에서 Wi-Fi 연결이 초기화되고, 보안 통신을 위해 루트 CA 인증서로 MQTT 클라이언트가 설정됩니다.

WiFi.begin(WLAN_SSID, WLAN_PASS);
client.setCACert(adafruitio_root_ca);

이 코드는 ESP32를 지정된 Wi-Fi 네트워크에 연결하고 보안 MQTT 연결을 위한 루트 CA를 설정합니다. 이러한 연결을 올바르게 처리하는 것은 안정적인 데이터 전송에 중요합니다.

마지막으로, loop() 함수는 MQTT 연결을 관리하고 정기적인 간격으로 온도 및 습도 판독값을 게시합니다.

mqtt.processPackets(5000);

이 줄은 ESP32가 구독한 주제에 대한 수신 메시지를 처리할 수 있게 하여, 웹 인터페이스에서 보낸 명령에 장치가 응답할 수 있도록 합니다.

전체 코드는 기사 아래에 로드된 전체 프로그램을 참조하세요.

시연 / 기대 효과

설정이 성공적으로 완료되면 Adafruit IO 대시보드에서 온도와 습도의 실시간 업데이트를 확인할 수 있습니다. 또한 웹 인터페이스를 통해 LED를 켜고 끌 수도 있습니다. LED가 예상대로 반응하지 않으면 배선을 확인하고 MQTT 토픽 이름이 코드에 정의된 것과 일치하는지 확인하세요.

만료된 인증서로 인해 특정 MQTT 연결 오류가 발생할 수 있습니다. 이러한 문제를 피하려면 코드에 최신 루트 CA 인증서가 있는지 확인하세요(영상 15:30 참조).

영상 타임스탬프

  • 00:00 시작
  • 1:50 프로젝트 소개
  • 3:16 MQTT란 무엇인가
  • 6:36 Adafruit IO 설정
  • 11:13 배선
  • 13:38 Arduino 코드 설명
  • 22:03 ESP32 보드 및 COM 포트 선택
  • 23:44 프로젝트 시연
  • 27:05 대시보드 업데이트
849-ESP32 Tutorial 48/55- Arduino code for Remote Temperature Monitoring and LED control MQTT
언어: C++
/***********************************************************************
  Adafruit MQTT Library ESP32 Adafruit IO SSL/TLS example

  Use the latest version of the ESP32 Arduino Core:
    https://github.com/espressif/arduino-esp32

  Works great with Adafruit Huzzah32 Feather and Breakout Board:
    https://www.adafruit.com/product/3405
    https://www.adafruit.com/products/4172

  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Tony DiCola for Adafruit Industries.
  Modified by Brent Rubell for Adafruit Industries
  MIT license, all text above must be included in any redistribution
 **********************************************************************/


/// ref: https://www.electronicwings.com/esp32/esp32-mqtt-client

#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

/************************* WiFi Access Point *********************************/

#define WLAN_SSID "SSID"
#define WLAN_PASS "PASSWORD"

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER "io.adafruit.com"

// Using port 8883 for MQTTS
#define AIO_SERVERPORT 8883

// Adafruit IO Account Configuration
// (to obtain these values, visit https://io.adafruit.com and click on Active Key)
// #define AIO_USERNAME "YOUR_ADAFRUIT_IO_USERNAME"
// #define AIO_KEY      "YOUR_ADAFRUIT_IO_KEY"

#define AIO_USERNAME "JimmyKernel"
#define AIO_KEY "aio_Mxiv12i74b5jKfKNSKLYjlhPmoHC"

/************ Global State (you don't need to change this!) ******************/

// WiFiFlientSecure for SSL/TLS support
WiFiClientSecure client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);


// io.adafruit.com root CA
const char* adafruitio_root_ca = \
      "-----BEGIN CERTIFICATE-----\n"
      "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
      "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
      "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
      "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
      "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
      "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
      "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
      "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
      "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
      "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
      "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
      "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
      "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
      "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
      "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
      "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
      "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
      "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
      "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
      "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
      "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
      "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
      "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
      "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
      "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
      "-----END CERTIFICATE-----\n";


/****************************** Feeds ***************************************/

// Setup a feed called 'test' for publishing and 'test2' for subscription.
// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
Adafruit_MQTT_Publish humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");

/*************************** Sketch Code ************************************/

// set pin numbers
const int ledPin = 15;  // the number of the led pin

#include "DHT.h"

#define DHTPIN 13      // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11  // DHT 11

DHT dht(DHTPIN, DHTTYPE);

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

  Serial.println(F("Adafruit IO MQTTS (SSL/TLS) Example"));

  // Connect to WiFi access point.
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WLAN_SSID);

  delay(1000);

  WiFi.begin(WLAN_SSID, WLAN_PASS);
  delay(2000);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // Set Adafruit IO's root CA
  client.setCACert(adafruitio_root_ca);

  // register callback for feed
  LED.setCallback(ledCallback);
  // Setup MQTT subscription for time feed.
  mqtt.subscribe(&LED);

  // initialize the LED pin as an output
  pinMode(ledPin, OUTPUT);

  // Initialize the dht11
  dht.begin();
}

// uint32_t x=0;


void loop() {

  // Ensure the connection to the MQTT server is alive (this will make the first
  // connection and automatically reconnect when disconnected).  See the MQTT_connect
  // function definition further below.
  MQTT_connect();

  indicatorPublish();

  // wait 10 seconds for subscription messages
  mqtt.processPackets(5000);

  // wait a couple seconds to avoid rate limit
  //delay(2000);
}

void ledCallback(char* message, uint16_t len) {
  char messageBuffer[40];
  snprintf(messageBuffer, sizeof(messageBuffer), "LED status is :: %s, len :: %u", message, len);
  Serial.println(messageBuffer);
  if (strcmp(message, "ON") == 0) {
    Serial.println("Turning ON LED");
    digitalWrite(ledPin, HIGH);
  } else {
    Serial.println("Turning OFF LED");
    digitalWrite(ledPin, LOW);
  }
}

void indicatorPublish() {

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
  float humValue = dht.readHumidity();
  float tempValue = dht.readTemperature();

  if (isnan(humValue) || isnan(tempValue)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  if (!temperature.publish(tempValue)) {
    Serial.println(F("Failed"));
  } else {
    Serial.print("Temperature: ");
    Serial.println(tempValue);
  }
  if (!humidity.publish(humValue)) {
    Serial.println(F("Failed"));
  } else {
    Serial.print("Humidity: ");
    Serial.println(humValue);
  }
}

// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
  int8_t ret;
  // Stop if already connected.
  if (mqtt.connected()) {
    return;
  }
  Serial.print("Connecting to MQTT... ");
  uint8_t retries = 3;
  while ((ret = mqtt.connect()) != 0) {  // connect will return 0 for connected
    Serial.println(mqtt.connectErrorString(ret));
    Serial.println("Retrying MQTT connection in 5 seconds...");
    mqtt.disconnect();
    delay(5000);  // wait 5 seconds
    retries--;
    if (retries == 0) {
      // basically die and wait for WDT to reset me
      while (1)
        ;
    }
  }
  Serial.println("MQTT Connected!");
}
850-ESP32 Tutorial 48/55- Basic Adafruit MQTT code (watch video)
언어: C++
/***********************************************************************
  Adafruit MQTT Basic lesson 1
Watch video instruction for this code on YouTube https://youtu.be/M9BQweAsHJM
Resource page for this lesson and code:
📚⬇️ Download and resource page https://robojax.com/RJT670
Tutoril by https://youTube.com/@robojax

  Adafruit MQTT Library ESP32 Adafruit IO SSL/TLS example

  Use the latest version of the ESP32 Arduino Core:
    https://github.com/espressif/arduino-esp32

  Works great with Adafruit Huzzah32 Feather and Breakout Board:
    https://www.adafruit.com/product/3405
    https://www.adafruit.com/products/4172

  Adafruit invests time and resources providing this open source code,
  please support Adafruit and open-source hardware by purchasing
  products from Adafruit!

  Written by Tony DiCola for Adafruit Industries.
  Modified by Brent Rubell for Adafruit Industries
  MIT license, all text above must be included in any redistribution
 **********************************************************************/


/// ref: https://www.electronicwings.com/esp32/esp32-mqtt-client

#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

/************************* WiFi Access Point *********************************/

#define WLAN_SSID "dars"
#define WLAN_PASS "5152535455"

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER "io.adafruit.com"

// Using port 8883 for MQTTS
#define AIO_SERVERPORT 8883

// Adafruit IO Account Configuration
// (to obtain these values, visit https://io.adafruit.com and click on Active Key)
// #define AIO_USERNAME "YOUR_ADAFRUIT_IO_USERNAME"
// #define AIO_KEY      "YOUR_ADAFRUIT_IO_KEY"

#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_wCyL33EVKLcGoAotGNEQ4dGQYOLZ"

/************ Global State (you don't need to change this!) ******************/

// WiFiFlientSecure for SSL/TLS support
WiFiClientSecure client;

// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);


// io.adafruit.com root CA
const char* adafruitio_root_ca =
  "-----BEGIN CERTIFICATE-----\n"
  "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"
  "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
  "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n"
  "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n"
  "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
  "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n"
  "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n"
  "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n"
  "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n"
  "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n"
  "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n"
  "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n"
  "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n"
  "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n"
  "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n"
  "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n"
  "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n"
  "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"
  "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"
  "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"
  "-----END CERTIFICATE-----\n";

/****************************** Feeds ***************************************/

// Setup a feed called 'test' for publishing and 'test2' for subscription.
// Notice MQTT paths for AIO follow the form: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
//Adafruit_MQTT_Publish humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
//Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");

/*************************** Sketch Code ************************************/

// set pin numbers
const int ledPin = 15;  // the number of the led pin



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

  Serial.println(F("Adafruit IO MQTTS (SSL/TLS) Example"));

  // Connect to WiFi access point.
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WLAN_SSID);

  delay(1000);

  WiFi.begin(WLAN_SSID, WLAN_PASS);
  delay(2000);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // Set Adafruit IO's root CA
  client.setCACert(adafruitio_root_ca);

  // register callback for feed
  LED.setCallback(ledCallback);
  // Setup MQTT subscription for time feed.
  mqtt.subscribe(&LED);

  // initialize the LED pin as an output
  pinMode(ledPin, OUTPUT);


}

// uint32_t x=0;


void loop() {

  // Ensure the connection to the MQTT server is alive (this will make the first
  // connection and automatically reconnect when disconnected).  See the MQTT_connect
  // function definition further below.
  MQTT_connect();

 // indicatorPublish();

  // wait 10 seconds for subscription messages
  mqtt.processPackets(10000);

  // wait a couple seconds to avoid rate limit
  //delay(2000);
}

void ledCallback(char* message, uint16_t len) {
  char messageBuffer[40];
  snprintf(messageBuffer, sizeof(messageBuffer), "LED status is :: %s, len :: %u", message, len);
  Serial.println(messageBuffer);
  if (strcmp(message, "ON") == 0) {
    Serial.println("Turning ON LED");
    digitalWrite(ledPin, LOW);
  } else {
    Serial.println("Turning OFF LED");
    digitalWrite(ledPin, HIGH);
  }
}



// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
  int8_t ret;
  // Stop if already connected.
  if (mqtt.connected()) {
    return;
  }
  Serial.print("Connecting to MQTT... ");
  uint8_t retries = 3;
  while ((ret = mqtt.connect()) != 0) {  // connect will return 0 for connected
    Serial.println(mqtt.connectErrorString(ret));
    Serial.println("Retrying MQTT connection in 5 seconds...");
    mqtt.disconnect();
    delay(5000);  // wait 5 seconds
    retries--;
    if (retries == 0) {
      // basically die and wait for WDT to reset me
      while (1)
        ;
    }
  }
  Serial.println("MQTT Connected!");
}

파일📁

파일이 없습니다.