Search Code

ESP32 Tutoriaal 48/55 - Afstandstemperatuurmonitering en LED-beheer MQTT | SunFounder se ESP32 IoT-kit

ESP32 Tutoriaal 48/55 - Afstandstemperatuurmonitering en LED-beheer MQTT | SunFounder se ESP32 IoT-kit

In hierdie tutoriaal gaan ons ondersoek hoe om die ESP32-module saam met SunFounder se ESP32-uitbreidingsbord te gebruik om temperatuur en humiditeit op afstand te monitor deur die Adafruit IO-platform te gebruik. Daarbenewens sal ons die funksionaliteit implementeer om 'n LED via 'n webkoppelvlak te beheer. Teen die einde van hierdie projek sal jy intydse temperatuur- en humiditeitsdata kan sien en 'n LED aan en af kan skakel vanaf jou blaaier.

Hierdie projek gebruik die MQTT-protokol vir doeltreffende kommunikasie tussen die ESP32 en die Adafruit IO-diens. MQTT is liggewig en goed geskik vir IoT-toepassings, wat ons in staat stel om maklik sensordata te publiseer en op opdragte vir die LED-beheer in te teken. Vir verdere verduideliking van die kode en bedrading, maak seker dat jy die video wat hierdie tutoriaal vergesel, kyk (in video by 00:00).

Hardeware Verduidelik

Die hoofkomponente vir hierdie projek sluit die ESP32-mikrobeheerder, 'n DHT11-temperatuur- en humiditeitsensor, en 'n LED in. Die ESP32 is 'n kragtige mikrobeheerder wat ingeboude Wi-Fi- en Bluetooth-vermoëns het, wat dit 'n ideale keuse vir IoT-projekte maak. Dit kan veelvuldige take hanteer en naatloos met die internet verbind.

Die DHT11-sensor is verantwoordelik vir die meting van temperatuur en humiditeit. Dit stuur digitale seine uit wat deur die ESP32 gelees kan word. Die LED dien as 'n aanwyser en kan op afstand beheer word om die doeltreffendheid van die MQTT-protokol in die bestuur van toestelle oor die internet te demonstreer.

Datablad Besonderhede

Vervaardiger Adafruit
Deelnommer DHT11
Logika/IO-spanning 3.3 V
Toevoerspanning 3.3 V
Uitgangstroom (per kanaal) 20 mA
Piekstroom (per kanaal) 50 mA
PWM-frekwensieriglyne N/A
Insetlogikadrumpels 0.3 V (laag), 0.7 V (hoog)
Spanningval / RDS(on) / versadiging N/A
Termiese perke 0 tot 50 °C
Verpakking 3-pen
Notas / variante Gebruik DHT22 vir hoër akkuraatheid.

 

  • Verseker korrekte bedrading om skade te voorkom.
  • Gebruik 'n 220 Ohm-weerstand met die LED vir stroombeperking.
  • Gebruik optrekweerstande vir die DHT11-datapen indien nodig.
  • Kontroleer Wi-Fi-geloofsbriewe vir hooflettergevoeligheid.
  • Monitor reeksuitset vir die ontfouting van verbindingsprobleme.
  • Hou MQTT-onderwerpe uniek om konflikte te vermy.
  • Toets sensorlesings om te verseker dat hulle geldig is.
  • Wees versigtig met die DHT11 se reaksietyd; dit mag tyd neem om lesings te stabiliseer.

LED = beheer LED; temperatuur = publiseer temperatuurdata; humiditeit = publiseer humiditeitsdata.

Bedradingsinstruksies

Om die komponente te bedraad, begin deur die DHT11-sensor te verbind. Verbind die linkerpen van die DHT11 aan die 3.3V-kragspoor op die broodbord met 'n rooi draad. Die middelpen van die DHT11 moet aan pen 13 op die ESP32 verbind word met 'n geel draad. Verbind laastens die regterpen van die DHT11 aan die grondspoor met 'n blou draad.

Volgende, vir die LED, verbind die anode (langer been) aan pen 15 van die ESP32 deur 'n 220 Ohm-weerstand. Verbind die katode (korter been) direk aan die grondspoor op die broodbord. Maak seker dat alle verbindings veilig is en kontroleer dubbel vir enige los drade.

Opstel van die Paneelbord

  1. Besoek Adafruit IO, en klik dan op Start for free om 'n gratis rekening te skep.

    ../../_images/sp230516_102503.png
  2. Vul die vorm in om 'n rekening te skep.

    ../../_images/sp230516_102629.png
  3. Nadat jy 'n Adafruit-rekening geskep het, moet jy Adafruit IO weer oopmaak. Klik op Dashboards, en klik dan op New Dashboard.

    ../../_images/sp230516_103347.png
  4. Skep 'n New Dashboard.

    ../../_images/sp230516_103744.png
  5. Gaan die nuutgeskepte Dashboard binne en skep 'n nuwe blok.

    ../../_images/sp230516_104234.png
  6. Skep 1 Toggle-blok.

    ../../_images/sp230516_105727.png
  7. Vervolgens moet jy hier 'n nuwe feed skep. Hierdie toggle sal gebruik word om die LED te beheer, en ons sal hierdie feed “LED” noem.

    ../../_images/sp230516_105641.png
  8. Merk die LED-feed, en gaan dan na die volgende stap.

    ../../_images/sp230516_105925.png
  9. Voltooi die blokinstellings (hoofsaaklik Block Title, On Text en Off Text), en klik dan op die Create block-knoppie regs onder om te voltooi.

    ../../_images/sp230516_110124.png
  10. Ons moet ook twee Text Blocks volgende skep. Hulle sal gebruik word om temperatuur en humiditeit te vertoon. Skep dus twee feeds genaamd temperature en humidity.

    ../../_images/sp230516_110657.png
  11. Na skepping behoort jou Dashboard iets soos dit te lyk:

    ../../_images/sp230516_111134.png
  12. Jy kan die uitleg aanpas deur die Edit Layout-opsie op die Dashboard te gebruik.

    ../../_images/sp230516_111240.png
  13. Klik op API KEY, en jy sal jou gebruikersnaam en API KEY vertoon sien. Let hierop neer aangesien jy dit vir jou kode sal nodig hê.

    ../../_images/sp230516_111641.png

 

Kode Voorbeelde & Deurloop

Die kode begin deur die nodige biblioteke in te sluit, die Wi-Fi-geloofsbriewe op te stel, en die MQTT-parameters te definieer. Sleutel-identifiseerders soos AIO_USERNAME en AIO_KEY word gebruik om met die Adafruit IO-diens te verifieer.

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

Hierdie reëls definieer jou Adafruit IO-gebruikersnaam en -sleutel, wat noodsaaklik is om met die MQTT-broker te verbind. Maak seker dat hierdie waardes akkuraat is om 'n suksesvolle verbinding te bewerkstellig.

In die setup()-funksie word die Wi-Fi-verbinding geïnisialiseer, en die MQTT-kliënt word opgestel met die wortel-CA-sertifikaat vir veilige kommunikasie.

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

Hierdie kode verbind die ESP32 met die gespesifiseerde Wi-Fi-netwerk en stel die wortel-CA in vir veilige MQTT-verbindings. Behoorlike hantering van hierdie verbindings is kritiek vir betroubare data-oordrag.

Laastens bestuur die loop()-funksie die MQTT-verbinding en publiseer temperatuur- en humiditeitlesings op gereelde intervalle.

mqtt.processPackets(5000);

Hierdie reël laat die ESP32 toe om inkomende boodskappe vir geabonneerde onderwerpe te verwerk, wat verseker dat die toestel responsief bly op opdragte wat vanaf die webkoppelvlak gestuur word.

Vir die volledige kode, verwys asseblief na die volledige program wat onder die artikel gelaai is.

Demonstrasie / Wat om te Verwag

By suksesvolle opstelling behoort jy intydse opdaterings van temperatuur en humiditeit op jou Adafruit IO-kontroleskerm te sien. Jy kan ook die LED aan- en afskakel deur die webkoppelvlak. As die LED nie reageer soos verwag nie, kontroleer jou bedrading en maak seker dat die MQTT-onderwerpname ooreenstem met dié wat in die kode gedefinieer is.

Wees bewus daarvan dat sekere MQTT-verbindingsfoute kan voorkom as gevolg van vervalde sertifikate. Maak seker dat jy die nuutste wortel-CA-sertifikaat in jou kode het om hierdie probleme te vermy (in video by 15:30).

Video-tydstempels

  • 00:00 Begin
  • 1:50 Inleiding tot projek
  • 3:16 Wat is MQTT
  • 6:36 Adafruit IO-opstelling
  • 11:13 Bedrading
  • 13:38 Arduino-kode verduidelik
  • 22:03 Kies ESP32-bord en COM-poort
  • 23:44 Projekdemonstrasie
  • 27:05 Opdatering van kontroleskerm
849-ESP32 Tutorial 48/55- Arduino code for Remote Temperature Monitoring and LED control MQTT
Taal: 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)
Taal: 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!");
}

Lêers📁

Geen lêers beskikbaar.