Hľadať kód

Návod ESP32 48/55 – Diaľkové monitorovanie teploty a ovládanie LED cez MQTT | SunFounder ESP32 IoT kit

Návod ESP32 48/55 – Diaľkové monitorovanie teploty a ovládanie LED cez MQTT | SunFounder ESP32 IoT kit

V tomto návode si ukážeme, ako využiť modul ESP32 v spojení s rozširujúcou doskou SunFounder ESP32 na diaľkové monitorovanie teploty a vlhkosti pomocou platformy Adafruit IO. Okrem toho implementujeme funkciu na ovládanie LED cez webové rozhranie. Po dokončení tohto projektu budete môcť z prehliadača sledovať údaje o teplote a vlhkosti v reálnom čase a zapínať a vypínať LED.

Tento projekt využíva protokol MQTT na efektívnu komunikáciu medzi ESP32 a službou Adafruit IO. MQTT je ľahký a vhodný pre IoT aplikácie, čo nám umožňuje jednoducho publikovať údaje zo senzorov a prihlásiť sa na odber príkazov na ovládanie LED. Pre lepšie pochopenie kódu a zapojenia si pozrite video, ktoré je súčasťou tohto návodu (vo videu o 00:00).

Vysvetlenie hardvéru

Hlavné komponenty tohto projektu zahŕňajú mikrokontrolér ESP32, senzor teploty a vlhkosti DHT11 a LED. ESP32 je výkonný mikrokontrolér so vstavanými funkciami Wi-Fi a Bluetooth, čo z neho robí ideálnu voľbu pre IoT projekty. Dokáže spracovávať viacero úloh a bezproblémovo sa pripájať na internet.

Senzor DHT11 je zodpovedný za meranie teploty a vlhkosti. Vydáva digitálne signály, ktoré dokáže ESP32 prečítať. LED slúži ako indikátor a možno ju diaľkovo ovládať, aby sa demonštrovala účinnosť protokolu MQTT pri správe zariadení cez internet.

Podrobnosti z datasheetu

Výrobca Adafruit
Označenie dielu DHT11
Logické/IO napätie 3,3 V
Napájacie napätie 3,3 V
Výstupný prúd (na kanál) 20 mA
Špičkový prúd (na kanál) 50 mA
Odporúčanie pre PWM frekvenciu N/A
Prahové hodnoty vstupnej logiky 0,3 V (nízka), 0,7 V (vysoká)
Pokles napätia / RDS(on) / saturácia N/A
Tepelné limity 0 až 50 °C
Puzdro 3-pinové
Poznámky / varianty Pre vyššiu presnosť použite DHT22.

 

  • Zaistite správne zapojenie, aby nedošlo k poškodeniu.
  • Použite 220 ohmový rezistor s LED na obmedzenie prúdu.
  • V prípade potreby použite pull-up rezistory pre dátový pin DHT11.
  • Skontrolujte prihlasovacie údaje Wi-Fi, či rozlišujú malé a veľké písmená.
  • Sledujte sériový výstup na ladenie problémov s pripojením.
  • Udržujte témy MQTT jedinečné, aby ste predišli konfliktom.
  • Otestujte hodnoty senzora, aby ste sa uistili, že sú platné.
  • Buďte opatrní s reakčným časom DHT11; stabilizácia hodnôt môže chvíľu trvať.

LED = ovládanie LED; temperature = publikovanie údajov o teplote; humidity = publikovanie údajov o vlhkosti.

Pokyny na zapojenie

Na zapojenie komponentov začnite pripojením senzora DHT11. Pripojte ľavý pin DHT11 k 3,3V napájacej lište na breadboarde pomocou červeného vodiča. Stredný pin DHT11 by mal byť pripojený k pinu 13 na ESP32 pomocou žltého vodiča. Nakoniec pripojte pravý pin DHT11 k uzemňovacej lište pomocou modrého vodiča.

Ďalej, pre LED, pripojte anódu (dlhšiu nožičku) k pinu 15 ESP32 cez 220 ohmový rezistor. Katódu (kratšiu nožičku) pripojte priamo k uzemňovacej lište na breadboarde. Uistite sa, že sú všetky spojenia pevné a skontrolujte, či nie sú uvoľnené vodiče.

Nastavenie dashboardu

  1. Navštívte Adafruit IO a potom kliknite na Start for free a vytvorte si bezplatný účet.

    ../../_images/sp230516_102503.png
  2. Vyplňte formulár a vytvorte si účet.

    ../../_images/sp230516_102629.png
  3. Po vytvorení účtu Adafruit budete musieť znova otvoriť Adafruit IO. Kliknite na Dashboards a potom na New Dashboard.

    ../../_images/sp230516_103347.png
  4. Vytvorte New Dashboard.

    ../../_images/sp230516_103744.png
  5. Vstúpte do novo vytvoreného Dashboard a vytvorte nový blok.

    ../../_images/sp230516_104234.png
  6. Vytvorte 1 blok Toggle.

    ../../_images/sp230516_105727.png
  7. Ďalej tu budete musieť vytvoriť nový feed. Tento prepínač sa použije na ovládanie LED a tento feed nazveme “LED”.

    ../../_images/sp230516_105641.png
  8. Začiarknite feed LED a potom prejdite na ďalší krok.

    ../../_images/sp230516_105925.png
  9. Dokončite nastavenia bloku (hlavne Block Title, On Text a Off Text) a potom kliknite na tlačidlo Create block vpravo dole pre dokončenie.

    ../../_images/sp230516_110124.png
  10. Tiež musíme vytvoriť dva Text Blocks. Budú použité na zobrazenie teploty a vlhkosti. Preto vytvorte dva feedy s názvami temperature a humidity.

    ../../_images/sp230516_110657.png
  11. Po vytvorení by váš Dashboard mal vyzerať asi takto:

    ../../_images/sp230516_111134.png
  12. Rozloženie môžete upraviť pomocou možnosti Edit Layout na Dashboard.

    ../../_images/sp230516_111240.png
  13. Kliknite na API KEY a uvidíte zobrazené vaše používateľské meno a API KEY. Poznačte si ich, pretože ich budete potrebovať pre svoj kód.

    ../../_images/sp230516_111641.png

 

Príklady kódu a vysvetlenie

Kód začína zahrnutím potrebných knižníc, nastavením Wi-Fi prihlasovacích údajov a definovaním MQTT parametrov. Kľúčové identifikátory ako AIO_USERNAME a AIO_KEY sa používajú na autentifikáciu so službou Adafruit IO.

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

Tieto riadky definujú vaše používateľské meno a kľúč Adafruit IO, ktoré sú nevyhnutné na pripojenie k MQTT brokeru. Uistite sa, že tieto hodnoty sú presné, aby sa vytvorilo úspešné pripojenie.

Vo funkcii setup() sa inicializuje Wi-Fi pripojenie a MQTT klient sa nastaví s koreňovým CA certifikátom pre bezpečnú komunikáciu.

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

Tento kód pripojí ESP32 k zadanému Wi-Fi siete a nastaví koreňový CA pre bezpečné MQTT pripojenia. Správne spracovanie týchto pripojení je kritické pre spoľahlivý prenos dát.

Nakoniec funkcia loop() spravuje MQTT pripojenie a publikuje hodnoty teploty a vlhkosti v pravidelných intervaloch.

mqtt.processPackets(5000);

Tento riadok umožňuje ESP32 spracovávať prichádzajúce správy pre odoberané témy, čím sa zabezpečí, že zariadenie zostane citlivé na príkazy odoslané z webového rozhrania.

Pre kompletný kód si pozrite celý program načítaný nižšie v článku.

Demonštrácia / Čo očakávať

Po úspešnom nastavení by ste mali na svojom Adafruit IO dashboarde vidieť aktualizácie teploty a vlhkosti v reálnom čase. LED diódu môžete tiež zapínať a vypínať cez webové rozhranie. Ak LED dióda nereaguje podľa očakávania, skontrolujte zapojenie a uistite sa, že názvy MQTT tém sa zhodujú s tými, ktoré sú definované v kóde.

Upozorňujeme, že pri pripájaní cez MQTT môže dôjsť k určitým chybám v dôsledku expirovaných certifikátov. Uistite sa, že máte v kóde najnovší koreňový certifikát CA, aby ste sa vyhli týmto problémom (vo videu o 15:30).

Časové značky videa

  • 00:00 Začiatok
  • 1:50 Úvod do projektu
  • 3:16 Čo je MQTT
  • 6:36 Nastavenie Adafruit IO
  • 11:13 Zapojenie
  • 13:38 Vysvetlenie kódu pre Arduino
  • 22:03 Výber dosky ESP32 a COM portu
  • 23:44 Ukážka projektu
  • 27:05 Aktualizácia dashboardu
849-ESP32 Tutorial 48/55- Arduino code for Remote Temperature Monitoring and LED control MQTT
Jazyk: 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)
Jazyk: 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!");
}

Súbory📁

Žiadne súbory nie sú k dispozícii.