Search Code

ESP32 Оқулық 48/55 - Қашықтан температураны бақылау және MQTT арқылы LED басқару | SunFounder ESP32 IoT жинағы

ESP32 Оқулық 48/55 - Қашықтан температураны бақылау және MQTT арқылы LED басқару | SunFounder ESP32 IoT жинағы

Бұл оқулықта біз SunFounder компаниясының ESP32 кеңейту платасымен бірге ESP32 модулін Adafruit IO платформасы арқылы температура мен ылғалдылықты қашықтан бақылау үшін қалай пайдалану керектігін қарастырамыз. Сонымен қатар, веб-интерфейс арқылы жарықдиодты басқару функциясын жүзеге асырамыз. Осы жобаның соңында сіз браузеріңізден нақты уақыттағы температура мен ылғалдылық деректерін көре аласыз және жарықдиодты қосу/өшіру мүмкіндігіне ие боласыз.

Бұл жоба ESP32 мен Adafruit IO қызметі арасында тиімді байланыс үшін MQTT протоколын пайдаланады. MQTT жеңіл және IoT қолданбаларына өте ыңғайлы, бұл бізге сенсор деректерін оңай жариялауға және жарықдиодты басқаруға арналған пәрмендерге жазылуға мүмкіндік береді. Код пен сымдарды қосу туралы қосымша түсініктеме алу үшін осы оқулыққа қоса берілген бейнені міндетті түрде қараңыз (бейнеде 00:00).

Аппараттық құралдар түсіндірмесі

Бұл жобаның негізгі компоненттеріне ESP32 микроконтроллері, DHT11 температура мен ылғалдылық сенсоры және жарықдиод кіреді. ESP32 - кіріктірілген Wi-Fi және Bluetooth мүмкіндіктері бар қуатты микроконтроллер, бұл оны IoT жобалары үшін тамаша таңдау етеді. Ол бірнеше тапсырманы орындай алады және интернетке үздіксіз қосыла алады.

DHT11 сенсоры температура мен ылғалдылықты өлшеуге жауапты. Ол ESP32 арқылы оқылатын цифрлық сигналдарды шығарады. Жарықдиод индикатор ретінде қызмет етеді және MQTT протоколының құрылғыларды интернет арқылы басқару тиімділігін көрсету үшін қашықтан басқарыла алады.

Деректер парағының мәліметтері

Өндіруші Adafruit
Бөлшек нөмірі DHT11
Логика/IO кернеуі 3.3 В
Қоректендіру кернеуі 3.3 В
Шығыс тогы (арнаға) 20 мА
Ең жоғары ток (арнаға) 50 мА
PWM жиілігі бойынша нұсқаулар Жоқ
Кіріс логикалық шектері 0.3 В (төмен), 0.7 В (жоғары)
Кернеудің төмендеуі / RDS(on) / қанығу Жоқ
Жылулық шектеулер 0-ден 50 °C-қа дейін
Қаптама 3 істікшелі
Ескертулер / нұсқалар Жоғары дәлдік үшін DHT22 пайдаланыңыз.

 

  • Зақымдануды болдырмау үшін сымдардың дұрыс қосылғанын қамтамасыз етіңіз.
  • Токты шектеу үшін жарықдиодпен 220 Ом резисторды пайдаланыңыз.
  • Қажет болса, DHT11 деректер істікшесі үшін жоғары тарту резисторларын пайдаланыңыз.
  • Wi-Fi тіркелгі деректерін регистрге сезімталдыққа тексеріңіз.
  • Қосылым ақауларын жою үшін сериялық шығысты бақылаңыз.
  • Қақтығыстарды болдырмау үшін MQTT тақырыптарын бірегей етіп сақтаңыз.
  • Сенсор көрсеткіштерінің жарамды екеніне көз жеткізу үшін оларды тексеріңіз.
  • DHT11 жауап беру уақытына абай болыңыз; көрсеткіштердің тұрақтануы уақыт алуы мүмкін.

LED = жарықдиодты басқару; temperature = температура деректерін жариялау; humidity = ылғалдылық деректерін жариялау.

Сымдарды қосу нұсқаулары

Компоненттерді қосу үшін алдымен DHT11 сенсорын қосыңыз. DHT11 сол жақ істікшесін қызыл сым арқылы макет тақтасындағы 3.3В қоректендіру шинасына қосыңыз. DHT11 ортаңғы істікшесі сары сым арқылы ESP32-дегі 13 істікшеге қосылуы керек. Соңында, DHT11 оң жақ істікшесін көк сым арқылы жер шинасына қосыңыз.

Әрі қарай, жарықдиод үшін анодты (ұзын аяқ) 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. 1 Toggle блогын жасаңыз.

    ../../_images/sp230516_105727.png
  7. Әрі қарай, осы жерде жаңа feed жасау қажет. Бұл toggle LED-ді басқару үшін қолданылады және біз бұл feed-ті “LED” деп атаймыз.

    ../../_images/sp230516_105641.png
  8. LED feed-ін белгілеп, келесі қадамға өтіңіз.

    ../../_images/sp230516_105925.png
  9. Блок параметрлерін толтырыңыз (негізінен Block Title, On Text және Off Text), содан кейін аяқтау үшін төменгі оң жақтағы Create block түймесін басыңыз.

    ../../_images/sp230516_110124.png
  10. Сондай-ақ, бізге екі Text Block жасау қажет. Олар температура мен ылғалдылықты көрсету үшін қолданылады. Сондықтан temperature және humidity деп аталатын екі feed жасаңыз.

    ../../_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 бақылау тақтасында температура мен ылғалдылықтың нақты уақыттағы жаңартуларын көруіңіз керек. Сондай-ақ веб-интерфейс арқылы жарықдиодты қосуға және өшіруге болады. Егер жарықдиод күтілгендей жауап бермесе, қосылымдарды тексеріңіз және 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!");
}

Ресурстар мен сілтемелер

Файлдар📁

Файлдар жоқ.