Search Code

د ESP32 ټیوټوریل 48/55 - د حرارت لرې څارنه او د LED کنټرول MQTT | د SunFounder د ESP32 IoT کټ

د ESP32 ټیوټوریل 48/55 - د حرارت لرې څارنه او د LED کنټرول MQTT | د SunFounder د ESP32 IoT کټ

په دې ټیوټوریل کې به موږ وپلټو چې څنګه د ESP32 ماډل د سن فاونډر د ESP32 پراختیايي بورډ سره یوځای وکاروو ترڅو د اډافروټ IO پلیټ فارم په کارولو سره تودوخه او رطوبت له لرې څخه څارنه وکړو. سربېره پر دې، به موږ د ویب انٹرفیس له لارې د LED کنټرول فعالیت هم پلي کړو. د دې پروژې په پای کې به تاسو وکولای شئ چې د تودوخې او رطوبت ریښتیني وخت ډاټا وګورئ او د خپل براوزر څخه LED آن او آف کړئ.

دا پروژه د ESP32 او اډافروټ IO خدمت ترمنځ د اغیزمنې اړیکې لپاره د MQTT پروتوکول څخه ګټه اخلي. MQTT سپک دی او د IoT غوښتنلیکونو لپاره ښه مناسب دی، چې موږ ته اجازه راکوي په اسانۍ سره د سینسر ډاټا خپره کړو او د LED کنټرول لپاره کمانډونو ته ګډون وکړو. د کوډ او تارونو د نور روښانتیا لپاره، ډاډ ترلاسه کړئ چې د دې ټیوټوریل سره مل ویډیو وګورئ (په ویډیو کې په 00:00 کې).

هارډویر تشریح شوی

د دې پروژې اصلي اجزا کې د ESP32 مایکروکنټرولر، د DHT11 تودوخې او رطوبت سینسر، او یو LED شامل دي. ESP32 یو پیاوړی مایکروکنټرولر دی چې په کې جوړ شوي وای-فای او بلوتوث وړتیاوې لري، چې دا د IoT پروژو لپاره یو مثالی انتخاب ګرځوي. دا کولای شي ډیری دندې ترسره کړي او په بې سارۍ سره انټرنیټ سره وصل شي.

د DHT11 سینسر د تودوخې او رطوبت د اندازه کولو مسؤلیت لري. دا ډیجیټل سیګنالونه تولیدوي چې د ESP32 لخوا لوستل کیدی شي. LED د شاخص په توګه کار کوي او له لرې څخه کنټرول کیدی شي ترڅو د انټرنیټ له لارې د وسایلو په مدیریت کې د MQTT پروتوکول اغیزمنتوب وښیې.

ډیټاشیټ تفصیلات

جوړونکی اډافروټ
د پرزې شمېره DHT11
منطق/IO ولټاژ 3.3 V
د برېښنا رسولو ولټاژ 3.3 V
د تولید جریان (په هر چینل) 20 mA
د لوړ جریان (په هر چینل) 50 mA
د PWM فریکونسي لارښود N/A
د منطق داخلیدو حدونه 0.3 V (ټیټ)، 0.7 V (لوړ)
د ولټاژ کمښت / RDS(on) / سنتریشن N/A
حرارتي حدونه 0 تر 50 °C
بسته بندي 3-پن
یادښتونه / ډولونه د لوړ دقت لپاره DHT22 وکاروئ.

 

  • د زیان مخنیوي لپاره سم تارونه ډاډمن کړئ.
  • د جریان محدودولو لپاره د LED سره د 220 اوم ریزسټر وکاروئ.
  • که اړتیا وي د DHT11 ډاټا پن لپاره پل-اپ ریزسټرونه وکاروئ.
  • د وای-فای اسناد د لویو او وړو تورو حساسیت لپاره وګورئ.
  • د اړیکو ستونزو د ډیبګ کولو لپاره سیریل آوټ پټ وڅارئ.
  • د شخړو مخنیوي لپاره د 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 بلاک جوړ کړئ.

    ../../_images/sp230516_105727.png
  7. بیا، تاسو اړتیا لرئ چې دلته یو نوی فیډ جوړ کړئ. دا ټوګل د LED کنټرول لپاره به وکارول شي، او موږ به دا فیډ “LED” ونوموو.

    ../../_images/sp230516_105641.png
  8. د LED فیډ وګورئ، بیا راتلونکي ګام ته لاړ شئ.

    ../../_images/sp230516_105925.png
  9. د بلاک ترتیبات بشپړ کړئ (په عمده توګه د بلاک سرلیک، On Text، او Off Text)، بیا د پای ته رسولو لپاره په ښکته ښي اړخ کې د Create block تڼۍ باندې کلیک وکړئ.

    ../../_images/sp230516_110124.png
  10. موږ اړتیا لرو چې بیا دوه Text Blocks جوړ کړو. دوی به د تودوخې او رطوبت د ښودلو لپاره وکارول شي. نو، دوه فیډونه د temperature او humidity په نومونو جوړ کړئ.

    ../../_images/sp230516_110657.png
  11. د جوړولو وروسته، ستاسو Dashboard باید داسې څه ښکاري:

    ../../_images/sp230516_111134.png
  12. تاسو کولی شئ د Dashboard په اړه د Edit Layout اختیار په کارولو سره ترتیب تنظیم کړئ.

    ../../_images/sp230516_111240.png
  13. په API KEY باندې کلیک وکړئ، او تاسو به خپل کارن-نوم او API KEY وګورئ چې ښودل شوي. دا یادونه وکړئ ځکه چې تاسو به د خپل کوډ لپاره ورته اړتیا ولرئ.

    ../../_images/sp230516_111641.png

 

د کوډ بېلګې او ګام په ګام تشریح

کوډ د اړینو کتابتونونو په شاملولو سره پیل کیږي، د Wi-Fi اسناد تنظیموي، او د MQTT پیرامیټرې تعریفوي. کلیدي پیژندونکي لکه AIO_USERNAME او AIO_KEY د Adafruit IO خدمت سره د تایید لپاره کارول کیږي.

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

دا کرښې ستاسو د Adafruit IO کارن-نوم او کیلي تعریفوي، کوم چې د MQTT بروکر سره د نښلولو لپاره اړین دي. ډاډ ترلاسه کړئ چې دا ارزښتونه سم دي ترڅو بریالۍ اړیکه رامنځته شي.

د setup() فنکشن کې، د Wi-Fi اړیکه پیل کیږي، او د MQTT کلائنټ د خوندي اړیکو لپاره د root CA سند سره تنظیم کیږي.

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

دا کوډ ESP32 د ټاکل شوي Wi-Fi شبکې سره نښلوي او د خوندي MQTT اړیکو لپاره root 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
Language: 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)
Language: 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!");
}

Files📁

No files available.