Search Code

ESP32 Eğitimi 48/55 - Uzaktan Sıcaklık İzleme ve LED Kontrolü MQTT | SunFounder'ın ESP32 IoT Kiti

ESP32 Eğitimi 48/55 - Uzaktan Sıcaklık İzleme ve LED Kontrolü MQTT | SunFounder'ın ESP32 IoT Kiti

Bu eğitimde, ESP32 modülünü SunFounder'ın ESP32 genişletme kartıyla birlikte kullanarak Adafruit IO platformu üzerinden sıcaklık ve nemi uzaktan nasıl izleyeceğimizi keşfedeceğiz. Ayrıca, bir web arayüzü üzerinden LED kontrolü işlevini de uygulayacağız. Bu projenin sonunda, tarayıcınızdan gerçek zamanlı sıcaklık ve nem verilerini görüntüleyebilecek ve bir LED'i açıp kapatabileceksiniz.

Bu proje, ESP32 ile Adafruit IO hizmeti arasında verimli iletişim için MQTT protokolünü kullanır. MQTT hafiftir ve IoT uygulamaları için çok uygundur; sensör verilerini kolayca yayınlamamıza ve LED kontrolü için komutlara abone olmamıza olanak tanır. Kod ve bağlantıların daha iyi anlaşılması için bu eğitime eşlik eden videoyu mutlaka izleyin (videoda 00:00'da).

Donanım Açıklaması

Bu projenin ana bileşenleri ESP32 mikrodenetleyicisi, bir DHT11 sıcaklık ve nem sensörü ve bir LED'dir. ESP32, yerleşik Wi-Fi ve Bluetooth özelliklerine sahip güçlü bir mikrodenetleyicidir ve IoT projeleri için ideal bir seçimdir. Birden fazla görevi yönetebilir ve internete sorunsuz bir şekilde bağlanabilir.

DHT11 sensörü, sıcaklık ve nemi ölçmekten sorumludur. ESP32 tarafından okunabilen dijital sinyaller çıkarır. LED bir gösterge görevi görür ve MQTT protokolünün cihazları internet üzerinden yönetmedeki etkinliğini göstermek için uzaktan kontrol edilebilir.

Veri Sayfası Ayrıntıları

Üretici Adafruit
Parça numarası DHT11
Mantık/IO voltajı 3,3 V
Besleme voltajı 3,3 V
Çıkış akımı (kanal başına) 20 mA
Tepe akımı (kanal başına) 50 mA
PWM frekansı kılavuzu Yok
Giriş mantık eşikleri 0,3 V (düşük), 0,7 V (yüksek)
Gerilim düşümü / RDS(on) / doyum Yok
Termal sınırlar 0 ila 50 °C
Paket 3 pinli
Notlar / varyantlar Daha yüksek doğruluk için DHT22 kullanın.

 

  • Hasarı önlemek için doğru bağlantı yapıldığından emin olun.
  • Akım sınırlaması için LED ile 220 Ohm direnç kullanın.
  • Gerekirse DHT11 veri pini için pull-up dirençleri kullanın.
  • Wi-Fi kimlik bilgilerini büyük/küçük harf duyarlılığı açısından kontrol edin.
  • Bağlantı sorunlarını hata ayıklamak için seri çıktıyı izleyin.
  • Çakışmaları önlemek için MQTT konularını benzersiz tutun.
  • Geçerli olduklarından emin olmak için sensör okumalarını test edin.
  • DHT11'in yanıt süresine dikkat edin; okumaların stabilize olması zaman alabilir.

LED = LED'i kontrol eder; temperature = sıcaklık verilerini yayınlar; humidity = nem verilerini yayınlar.

Bağlantı Talimatları

Bileşenleri bağlamak için DHT11 sensörünü bağlayarak başlayın. DHT11'in sol pinini kırmızı bir kablo kullanarak breadboard üzerindeki 3,3V güç rayına bağlayın. DHT11'in orta pini, sarı bir kablo kullanarak ESP32 üzerindeki 13 numaralı pine bağlanmalıdır. Son olarak, DHT11'in sağ pinini mavi bir kablo kullanarak toprak rayına bağlayın.

Ardından, LED için anodu (uzun bacak) 220 Ohm direnç üzerinden ESP32'nin 15 numaralı pinine bağlayın. Katodu (kısa bacak) doğrudan breadboard üzerindeki toprak rayına bağlayın. Tüm bağlantıların güvenli olduğundan emin olun ve gevşek kablolar için çift kontrol yapın.

Kontrol Panelini Kurma

  1. Adafruit IO adresini ziyaret edin, ardından ücretsiz bir hesap oluşturmak için Start for free seçeneğine tıklayın.

    ../../_images/sp230516_102503.png
  2. Hesap oluşturmak için formu doldurun.

    ../../_images/sp230516_102629.png
  3. Bir Adafruit hesabı oluşturduktan sonra Adafruit IO'yu yeniden açmanız gerekecek. Dashboards seçeneğine tıklayın, ardından New Dashboard seçeneğine tıklayın.

    ../../_images/sp230516_103347.png
  4. Bir New Dashboard oluşturun.

    ../../_images/sp230516_103744.png
  5. Yeni oluşturulan Dashboard alanına girin ve yeni bir blok oluşturun.

    ../../_images/sp230516_104234.png
  6. 1 adet Toggle bloğu oluşturun.

    ../../_images/sp230516_105727.png
  7. Ardından, burada yeni bir feed oluşturmanız gerekecek. Bu toggle, LED'i kontrol etmek için kullanılacak ve bu feed'e “LED” adını vereceğiz.

    ../../_images/sp230516_105641.png
  8. LED feed'ini işaretleyin, ardından bir sonraki adıma geçin.

    ../../_images/sp230516_105925.png
  9. Blok ayarlarını tamamlayın (özellikle Block Title, On Text ve Off Text), ardından bitirmek için sağ alttaki Create block düğmesine tıklayın.

    ../../_images/sp230516_110124.png
  10. Ayrıca iki Text Block oluşturmamız gerekiyor. Bunlar sıcaklık ve nemi görüntülemek için kullanılacak. Bu nedenle, temperature ve humidity adında iki feed oluşturun.

    ../../_images/sp230516_110657.png
  11. Oluşturma işleminden sonra, Dashboard'unuz şuna benzer görünmelidir:

    ../../_images/sp230516_111134.png
  12. Dashboard üzerindeki Edit Layout seçeneğini kullanarak düzeni ayarlayabilirsiniz.

    ../../_images/sp230516_111240.png
  13. API KEY seçeneğine tıklayın; kullanıcı adınızı ve API KEY değerinizi göreceksiniz. Bunları not edin, çünkü kodunuz için bunlara ihtiyacınız olacak.

    ../../_images/sp230516_111641.png

 

Kod Örnekleri ve Açıklama

Kod, gerekli kütüphaneleri dahil ederek, Wi-Fi kimlik bilgilerini ayarlayarak ve MQTT parametrelerini tanımlayarak başlar. AIO_USERNAME ve AIO_KEY gibi anahtar tanımlayıcılar, Adafruit IO hizmetiyle kimlik doğrulaması yapmak için kullanılır.

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

Bu satırlar, MQTT broker'ına bağlanmak için gerekli olan Adafruit IO kullanıcı adınızı ve anahtarınızı tanımlar. Başarılı bir bağlantı kurmak için bu değerlerin doğru olduğundan emin olun.

setup() fonksiyonunda Wi-Fi bağlantısı başlatılır ve MQTT istemcisi, güvenli iletişim için kök CA sertifikasıyla yapılandırılır.

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

Bu kod, ESP32'yi belirtilen Wi-Fi ağına bağlar ve güvenli MQTT bağlantıları için kök CA'yı ayarlar. Bu bağlantıların doğru şekilde yönetilmesi, güvenilir veri iletimi için kritik öneme sahiptir.

Son olarak, loop() fonksiyonu MQTT bağlantısını yönetir ve düzenli aralıklarla sıcaklık ve nem okumalarını yayınlar.

mqtt.processPackets(5000);

Bu satır, ESP32'nin abone olunan konular için gelen mesajları işlemesine olanak tanır ve cihazın web arayüzünden gönderilen komutlara yanıt vermesini sağlar.

Tam kod için lütfen makalenin altında yüklenen programın tamamına bakın.

Gösterim / Beklentiler

Kurulum başarılı olduğunda, Adafruit IO panelinizde sıcaklık ve nem değerlerinin gerçek zamanlı güncellendiğini görmelisiniz. Ayrıca web arayüzü üzerinden LED'i açıp kapatabilirsiniz. LED beklenen şekilde tepki vermezse, bağlantılarınızı kontrol edin ve MQTT konu adlarının kodda tanımlananlarla eşleştiğinden emin olun.

Süresi dolmuş sertifikalar nedeniyle bazı MQTT bağlantı hataları oluşabileceğini unutmayın. Bu sorunları önlemek için kodunuzda en güncel kök CA sertifikasının bulunduğundan emin olun (videoda 15:30'da).

Video Zaman Damgaları

  • 00:00 Başlangıç
  • 1:50 Projeye giriş
  • 3:16 MQTT nedir
  • 6:36 Adafruit IO kurulumu
  • 11:13 Bağlantı şeması
  • 13:38 Arduino kodu açıklaması
  • 22:03 ESP32 kartı ve COM portu seçimi
  • 23:44 Proje gösterimi
  • 27:05 Panel güncelleme
849-ESP32 Tutorial 48/55- Arduino code for Remote Temperature Monitoring and LED control MQTT
Dil: 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)
Dil: 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!");
}

Dosyalar📁

Dosya mevcut değil.