Search Code

Poradnik ESP32 48/55 - Zdalne monitorowanie temperatury i sterowanie diodą LED przez MQTT | Zestaw IoT SunFounder ESP32

Poradnik ESP32 48/55 - Zdalne monitorowanie temperatury i sterowanie diodą LED przez MQTT | Zestaw IoT SunFounder ESP32

W tym samouczku dowiemy się, jak wykorzystać moduł ESP32 wraz z płytką rozszerzającą SunFounder do zdalnego monitorowania temperatury i wilgotności za pomocą platformy Adafruit IO. Dodatkowo zaimplementujemy funkcję sterowania diodą LED przez interfejs webowy. Po ukończeniu tego projektu będziesz mógł przeglądać dane temperatury i wilgotności w czasie rzeczywistym oraz włączać i wyłączać diodę LED z poziomu przeglądarki.

Ten projekt wykorzystuje protokół MQTT do wydajnej komunikacji między ESP32 a usługą Adafruit IO. MQTT jest lekki i dobrze nadaje się do zastosowań IoT, umożliwiając łatwe publikowanie danych z czujników i subskrybowanie poleceń do sterowania diodą LED. Aby uzyskać dalsze wyjaśnienia dotyczące kodu i podłączeń, zapoznaj się z filmem towarzyszącym temu samouczkowi (na filmie w 00:00).

Omówienie sprzętu

Główne komponenty tego projektu obejmują mikrokontroler ESP32, czujnik temperatury i wilgotności DHT11 oraz diodę LED. ESP32 to wydajny mikrokontroler z wbudowaną obsługą Wi-Fi i Bluetooth, co czyni go idealnym wyborem do projektów IoT. Może obsługiwać wiele zadań i bezproblemowo łączyć się z internetem.

Czujnik DHT11 odpowiada za pomiar temperatury i wilgotności. Wysyła sygnały cyfrowe, które mogą być odczytywane przez ESP32. Dioda LED służy jako wskaźnik i może być sterowana zdalnie, aby zademonstrować skuteczność protokołu MQTT w zarządzaniu urządzeniami przez internet.

Szczegóły z karty katalogowej

Producent Adafruit
Numer części DHT11
Napięcie logiczne/IO 3,3 V
Napięcie zasilania 3,3 V
Prąd wyjściowy (na kanał) 20 mA
Prąd szczytowy (na kanał) 50 mA
Zalecenia dotyczące częstotliwości PWM Nie dotyczy
Progi logiczne wejściowe 0,3 V (niski), 0,7 V (wysoki)
Spadek napięcia / RDS(on) / nasycenie Nie dotyczy
Limity termiczne 0 do 50 °C
Obudowa 3-pinowa
Uwagi / warianty Użyj DHT22 dla większej dokładności.

 

  • Upewnij się, że podłączenia są prawidłowe, aby zapobiec uszkodzeniom.
  • Użyj rezystora 220 omów z diodą LED do ograniczenia prądu.
  • W razie potrzeby użyj rezystorów podciągających dla pinu danych DHT11.
  • Sprawdź, czy dane logowania do Wi-Fi są uwzględniane z wielkością liter.
  • Monitoruj wyjście szeregowe w celu debugowania problemów z połączeniem.
  • Utrzymuj unikalne tematy MQTT, aby uniknąć konfliktów.
  • Przetestuj odczyty czujnika, aby upewnić się, że są prawidłowe.
  • Zachowaj ostrożność co do czasu odpowiedzi DHT11; stabilizacja odczytów może zająć trochę czasu.

LED = sterowanie diodą LED; temperature = publikowanie danych temperatury; humidity = publikowanie danych wilgotności.

Instrukcje podłączenia

Aby podłączyć komponenty, zacznij od podłączenia czujnika DHT11. Podłącz lewy pin DHT11 do szyny zasilania 3,3 V na płytce stykowej za pomocą czerwonego przewodu. Środkowy pin DHT11 należy podłączyć do pinu 13 na ESP32 za pomocą żółtego przewodu. Na koniec podłącz prawy pin DHT11 do szyny masy za pomocą niebieskiego przewodu.

Następnie, dla diody LED, podłącz anodę (dłuższą nóżkę) do pinu 15 ESP32 przez rezystor 220 omów. Podłącz katodę (krótszą nóżkę) bezpośrednio do szyny masy na płytce stykowej. Upewnij się, że wszystkie połączenia są pewne i sprawdź, czy nie ma luźnych przewodów.

Konfiguracja pulpitu nawigacyjnego

  1. Odwiedź Adafruit IO, a następnie kliknij Start for free, aby utworzyć darmowe konto.

    ../../_images/sp230516_102503.png
  2. Wypełnij formularz, aby utworzyć konto.

    ../../_images/sp230516_102629.png
  3. Po utworzeniu konta Adafruit musisz ponownie otworzyć Adafruit IO. Kliknij na Dashboards, a następnie na New Dashboard.

    ../../_images/sp230516_103347.png
  4. Utwórz Nowy Dashboard.

    ../../_images/sp230516_103744.png
  5. Wejdź do nowo utworzonego Dashboardu i utwórz nowy blok.

    ../../_images/sp230516_104234.png
  6. Utwórz 1 blok Toggle (przełącznik).

    ../../_images/sp230516_105727.png
  7. Następnie musisz tutaj utworzyć nowy feed. Ten przełącznik będzie używany do sterowania diodą LED, a ten feed nazwiemy „LED”.

    ../../_images/sp230516_105641.png
  8. Zaznacz feed LED, a następnie przejdź do następnego kroku.

    ../../_images/sp230516_105925.png
  9. Uzupełnij ustawienia bloku (głównie tytuł bloku, tekst włączania i tekst wyłączania), a następnie kliknij przycisk Create block w prawym dolnym rogu, aby zakończyć.

    ../../_images/sp230516_110124.png
  10. Musimy również utworzyć dwa bloki tekstowe. Będą one używane do wyświetlania temperatury i wilgotności. Utwórz więc dwa feedy o nazwach temperature i humidity.

    ../../_images/sp230516_110657.png
  11. Po utworzeniu Twój Dashboard powinien wyglądać mniej więcej tak:

    ../../_images/sp230516_111134.png
  12. Możesz dostosować układ, korzystając z opcji Edit Layout na Dashboardzie.

    ../../_images/sp230516_111240.png
  13. Kliknij na API KEY, a zobaczysz swoją nazwę użytkownika i API KEY. Zapisz je, ponieważ będą potrzebne do Twojego kodu.

    ../../_images/sp230516_111641.png

 

Przykłady kodu i omówienie

Kod zaczyna się od dołączenia niezbędnych bibliotek, skonfigurowania danych logowania do Wi-Fi oraz zdefiniowania parametrów MQTT. Kluczowe identyfikatory, takie jak AIO_USERNAME i AIO_KEY, są używane do uwierzytelniania w usłudze Adafruit IO.

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

Te linie definiują Twoją nazwę użytkownika i klucz Adafruit IO, które są niezbędne do połączenia z brokerem MQTT. Upewnij się, że te wartości są dokładne, aby nawiązać pomyślne połączenie.

W funkcji setup() inicjalizowane jest połączenie Wi-Fi, a klient MQTT jest konfigurowany z certyfikatem głównym CA dla bezpiecznej komunikacji.

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

Ten kod łączy ESP32 z określoną siecią Wi-Fi i ustawia główny certyfikat CA dla bezpiecznych połączeń MQTT. Prawidłowe zarządzanie tymi połączeniami jest kluczowe dla niezawodnej transmisji danych.

Na koniec funkcja loop() zarządza połączeniem MQTT i publikuje odczyty temperatury i wilgotności w regularnych odstępach czasu.

mqtt.processPackets(5000);

Ta linia pozwala ESP32 na przetwarzanie przychodzących wiadomości dla subskrybowanych tematów, zapewniając, że urządzenie pozostaje responsywne na polecenia wysyłane z interfejsu internetowego.

Pełny kod znajdziesz w kompletnym programie zamieszczonym poniżej artykułu.

Demonstracja / Czego się spodziewać

Po pomyślnej konfiguracji powinieneś widzieć aktualizacje temperatury i wilgotności w czasie rzeczywistym na swoim pulpicie Adafruit IO. Możesz również włączać i wyłączać diodę LED za pomocą interfejsu internetowego. Jeśli dioda LED nie reaguje zgodnie z oczekiwaniami, sprawdź swoje połączenia i upewnij się, że nazwy tematów MQTT odpowiadają tym zdefiniowanym w kodzie.

Należy pamiętać, że niektóre błędy połączenia MQTT mogą wystąpić z powodu wygasłych certyfikatów. Upewnij się, że masz najnowszy certyfikat głównego urzędu certyfikacji w swoim kodzie, aby uniknąć tych problemów (na filmie w 15:30).

Znaczniki czasowe filmu

  • 00:00 Start
  • 1:50 Wprowadzenie do projektu
  • 3:16 Co to jest MQTT
  • 6:36 Konfiguracja Adafruit IO
  • 11:13 Podłączanie
  • 13:38 Wyjaśnienie kodu Arduino
  • 22:03 Wybór płytki ESP32 i portu COM
  • 23:44 Prezentacja projektu
  • 27:05 Aktualizacja pulpitu
849-ESP32 Tutorial 48/55- Arduino code for Remote Temperature Monitoring and LED control MQTT
Język: 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)
Język: 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!");
}

Pliki📁

Brak dostępnych plików.