Search Code

Hướng dẫn ESP32 48/55 - Giám sát nhiệt độ từ xa và điều khiển LED MQTT | Bộ kit IoT ESP32 của SunFounder

Hướng dẫn ESP32 48/55 - Giám sát nhiệt độ từ xa và điều khiển LED MQTT | Bộ kit IoT ESP32 của SunFounder

Trong hướng dẫn này, chúng ta sẽ khám phá cách sử dụng mô-đun ESP32 kết hợp với bảng mở rộng ESP32 của SunFounder để theo dõi nhiệt độ và độ ẩm từ xa bằng nền tảng Adafruit IO. Ngoài ra, chúng ta sẽ triển khai chức năng điều khiển đèn LED qua giao diện web. Khi hoàn thành dự án này, bạn sẽ có thể xem dữ liệu nhiệt độ và độ ẩm theo thời gian thực cũng như bật/tắt đèn LED từ trình duyệt của mình.

Dự án này sử dụng giao thức MQTT để giao tiếp hiệu quả giữa ESP32 và dịch vụ Adafruit IO. MQTT nhẹ và rất phù hợp cho các ứng dụng IoT, cho phép chúng ta dễ dàng xuất bản dữ liệu cảm biến và đăng ký nhận lệnh điều khiển đèn LED. Để hiểu rõ hơn về mã và cách đấu dây, hãy xem video đi kèm với hướng dẫn này (trong video tại 00:00).

Phần cứng được giải thích

Các thành phần chính cho dự án này bao gồm vi điều khiển ESP32, cảm biến nhiệt độ và độ ẩm DHT11 và một đèn LED. ESP32 là một vi điều khiển mạnh mẽ có Wi-Fi và Bluetooth tích hợp, khiến nó trở thành lựa chọn lý tưởng cho các dự án IoT. Nó có thể xử lý nhiều tác vụ và kết nối internet một cách liền mạch.

Cảm biến DHT11 chịu trách nhiệm đo nhiệt độ và độ ẩm. Nó xuất ra tín hiệu kỹ thuật số có thể được đọc bởi ESP32. Đèn LED đóng vai trò là chỉ báo và có thể được điều khiển từ xa để chứng minh hiệu quả của giao thức MQTT trong việc quản lý các thiết bị qua internet.

Chi tiết bảng dữ liệu

Nhà sản xuất Adafruit
Số bộ phận DHT11
Điện áp Logic/IO 3,3 V
Điện áp cung cấp 3,3 V
Dòng điện đầu ra (mỗi kênh) 20 mA
Dòng điện đỉnh (mỗi kênh) 50 mA
Hướng dẫn tần số PWM Không áp dụng
Ngưỡng logic đầu vào 0,3 V (thấp), 0,7 V (cao)
Điện áp rơi / RDS(on) / bão hòa Không áp dụng
Giới hạn nhiệt 0 đến 50 °C
Kiểu đóng gói 3 chân
Ghi chú / biến thể Sử dụng DHT22 để có độ chính xác cao hơn.

 

  • Đảm bảo đấu dây đúng cách để tránh hư hỏng.
  • Sử dụng điện trở 220 Ohm với đèn LED để giới hạn dòng điện.
  • Sử dụng điện trở kéo lên cho chân dữ liệu DHT11 nếu cần.
  • Kiểm tra thông tin đăng nhập Wi-Fi về phân biệt chữ hoa chữ thường.
  • Theo dõi đầu ra nối tiếp để gỡ lỗi các vấn đề kết nối.
  • Giữ các chủ đề MQTT duy nhất để tránh xung đột.
  • Kiểm tra số đọc cảm biến để đảm bảo chúng hợp lệ.
  • Thận trọng với thời gian phản hồi của DHT11; có thể mất thời gian để ổn định số đọc.

LED = điều khiển đèn LED; temperature = xuất bản dữ liệu nhiệt độ; humidity = xuất bản dữ liệu độ ẩm.

Hướng dẫn đấu dây

Để đấu dây các thành phần, hãy bắt đầu bằng cách kết nối cảm biến DHT11. Kết nối chân bên trái của DHT11 với thanh nguồn 3,3V trên bảng mạch bằng dây màu đỏ. Chân giữa của DHT11 nên được kết nối với chân 13 trên ESP32 bằng dây màu vàng. Cuối cùng, kết nối chân bên phải của DHT11 với thanh nối đất bằng dây màu xanh dương.

Tiếp theo, đối với đèn LED, kết nối cực dương (chân dài hơn) với chân 15 của ESP32 qua điện trở 220 Ohm. Kết nối cực âm (chân ngắn hơn) trực tiếp với thanh nối đất trên bảng mạch. Đảm bảo tất cả các kết nối chắc chắn và kiểm tra kỹ xem có dây nào lỏng không.

Thiết lập Bảng điều khiển

  1. Truy cập Adafruit IO, sau đó nhấp vào Start for free để tạo tài khoản miễn phí.

    ../../_images/sp230516_102503.png
  2. Điền vào biểu mẫu để tạo tài khoản.

    ../../_images/sp230516_102629.png
  3. Sau khi tạo tài khoản Adafruit, bạn cần mở lại Adafruit IO. Nhấp vào Dashboards, sau đó nhấp vào New Dashboard.

    ../../_images/sp230516_103347.png
  4. Tạo một New Dashboard.

    ../../_images/sp230516_103744.png
  5. Vào Dashboard vừa tạo và tạo một khối mới.

    ../../_images/sp230516_104234.png
  6. Tạo 1 khối Toggle.

    ../../_images/sp230516_105727.png
  7. Tiếp theo, bạn cần tạo một feed mới ở đây. Toggle này sẽ được dùng để điều khiển đèn LED, và chúng ta sẽ đặt tên cho feed này là “LED”.

    ../../_images/sp230516_105641.png
  8. Chọn feed LED, sau đó chuyển sang bước tiếp theo.

    ../../_images/sp230516_105925.png
  9. Hoàn tất cài đặt khối (chủ yếu là Block Title, On Text và Off Text), sau đó nhấp vào nút Create block ở góc dưới bên phải để hoàn tất.

    ../../_images/sp230516_110124.png
  10. Chúng ta cũng cần tạo hai Text Blocks tiếp theo. Chúng sẽ được dùng để hiển thị nhiệt độ và độ ẩm. Vì vậy, hãy tạo hai feed có tên là temperaturehumidity.

    ../../_images/sp230516_110657.png
  11. Sau khi tạo xong, Dashboard của bạn sẽ trông giống như thế này:

    ../../_images/sp230516_111134.png
  12. Bạn có thể điều chỉnh bố cục bằng tùy chọn Edit Layout trên Dashboard.

    ../../_images/sp230516_111240.png
  13. Nhấp vào API KEY, bạn sẽ thấy tên người dùng và API KEY của mình được hiển thị. Ghi lại những thông tin này vì bạn sẽ cần chúng cho mã của mình.

    ../../_images/sp230516_111641.png

 

Ví dụ Mã & Hướng dẫn Chi tiết

Mã bắt đầu bằng việc bao gồm các thư viện cần thiết, thiết lập thông tin Wi-Fi và xác định các tham số MQTT. Các định danh chính như AIO_USERNAMEAIO_KEY được sử dụng để xác thực với dịch vụ Adafruit IO.

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

Các dòng này xác định tên người dùng và khóa Adafruit IO của bạn, rất cần thiết để kết nối với MQTT broker. Đảm bảo các giá trị này chính xác để thiết lập kết nối thành công.

Trong hàm setup(), kết nối Wi-Fi được khởi tạo và MQTT client được thiết lập với chứng chỉ gốc CA để giao tiếp an toàn.

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

Mã này kết nối ESP32 với mạng Wi-Fi đã chỉ định và đặt chứng chỉ gốc CA cho các kết nối MQTT an toàn. Xử lý đúng các kết nối này là rất quan trọng để truyền dữ liệu đáng tin cậy.

Cuối cùng, hàm loop() quản lý kết nối MQTT và xuất bản các chỉ số nhiệt độ và độ ẩm theo các khoảng thời gian đều đặn.

mqtt.processPackets(5000);

Dòng này cho phép ESP32 xử lý các thông điệp đến cho các chủ đề đã đăng ký, đảm bảo thiết bị luôn phản hồi các lệnh được gửi từ giao diện web.

Để có mã hoàn chỉnh, vui lòng tham khảo chương trình đầy đủ được tải bên dưới bài viết.

Trình diễn / Điều gì sẽ xảy ra

Sau khi thiết lập thành công, bạn sẽ thấy các cập nhật theo thời gian thực về nhiệt độ và độ ẩm trên bảng điều khiển Adafruit IO của mình. Bạn cũng có thể bật/tắt đèn LED thông qua giao diện web. Nếu đèn LED không phản hồi như mong đợi, hãy kiểm tra hệ thống dây điện của bạn và đảm bảo rằng tên chủ đề MQTT khớp với những tên được định nghĩa trong mã.

Lưu ý rằng một số lỗi kết nối MQTT có thể xảy ra do chứng chỉ hết hạn. Hãy đảm bảo bạn có chứng chỉ CA gốc mới nhất trong mã của mình để tránh những sự cố này (trong video ở phút 15:30).

Mốc thời gian video

  • 00:00 Bắt đầu
  • 1:50 Giới thiệu về dự án
  • 3:16 MQTT là gì
  • 6:36 Thiết lập Adafruit IO
  • 11:13 Hệ thống dây điện
  • 13:38 Giải thích mã Arduino
  • 22:03 Chọn bo mạch ESP32 và cổng COM
  • 23:44 Trình diễn dự án
  • 27:05 Cập nhật bảng điều khiển
849-ESP32 Tutorial 48/55- Arduino code for Remote Temperature Monitoring and LED control MQTT
Ngôn ngữ: 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)
Ngôn ngữ: 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!");
}

Tài nguyên & tài liệu tham khảo

Tập tin📁

Không có tệp nào khả dụng.