குறியீட்டை தேடு

ESP32 பயிற்சி 48/55 - தொலைநிலை வெப்பநிலை கண்காணிப்பு மற்றும் LED கட்டுப்பாடு MQTT | SunFounder இன் ESP32 IoT கிட்

ESP32 பயிற்சி 48/55 - தொலைநிலை வெப்பநிலை கண்காணிப்பு மற்றும் LED கட்டுப்பாடு MQTT | SunFounder இன் ESP32 IoT கிட்

இந்த டுடோரியலில், ESP32 தொகுதியை SunFounder இன் ESP32 நீட்டிப்பு பலகையுடன் இணைத்து, Adafruit IO தளத்தைப் பயன்படுத்தி வெப்பநிலை மற்றும் ஈரப்பதத்தை தொலைவிலிருந்து கண்காணிப்பது எப்படி என்பதை ஆராய்வோம். கூடுதலாக, வலை இடைமுகம் வழியாக LED ஐ கட்டுப்படுத்தும் செயல்பாட்டை செயல்படுத்துவோம். இந்த திட்டத்தின் முடிவில், உங்கள் உலாவியில் இருந்து நிகழ்நேர வெப்பநிலை மற்றும் ஈரப்பத தரவைப் பார்க்கவும், LED ஐ இயக்கவும் அணைக்கவும் முடியும்.

இந்த திட்டம் ESP32 மற்றும் Adafruit IO சேவைக்கு இடையே திறமையான தொடர்புக்கு MQTT நெறிமுறையைப் பயன்படுத்துகிறது. MQTT இலகுவானது மற்றும் IoT பயன்பாடுகளுக்கு மிகவும் பொருத்தமானது, இது சென்சார் தரவை எளிதாக வெளியிடவும், LED கட்டுப்பாட்டிற்கான கட்டளைகளுக்கு சந்தா பெறவும் அனுமதிக்கிறது. குறியீடு மற்றும் வயரிங் பற்றிய மேலும் தெளிவுக்கு, இந்த டுடோரியலுடன் வரும் வீடியோவைப் பார்க்கவும் (வீடியோவில் 00:00 இல்).

வன்பொருள் விளக்கம்

இந்த திட்டத்திற்கான முக்கிய கூறுகளில் ESP32 மைக்ரோகண்ட்ரோலர், DHT11 வெப்பநிலை மற்றும் ஈரப்பத சென்சார், மற்றும் ஒரு LED ஆகியவை அடங்கும். ESP32 ஒரு சக்திவாய்ந்த மைக்ரோகண்ட்ரோலர் ஆகும், இது உள்ளமைக்கப்பட்ட Wi-Fi மற்றும் புளூடூத் திறன்களைக் கொண்டுள்ளது, இது IoT திட்டங்களுக்கு சிறந்த தேர்வாக அமைகிறது. இது பல பணிகளை கையாளவும், இணையத்துடன் தடையின்றி இணைக்கவும் முடியும்.

DHT11 சென்சார் வெப்பநிலை மற்றும் ஈரப்பதத்தை அளவிடுவதற்கு பொறுப்பாகும். இது ESP32 ஆல் படிக்கக்கூடிய டிஜிட்டல் சிக்னல்களை வெளியிடுகிறது. LED ஒரு காட்டியாக செயல்படுகிறது மற்றும் இணையத்தில் சாதனங்களை நிர்வகிப்பதில் MQTT நெறிமுறையின் செயல்திறனை நிரூபிக்க தொலைவிலிருந்து கட்டுப்படுத்த முடியும்.

தரவுத்தாள் விவரங்கள்

உற்பத்தியாளர் Adafruit
பகுதி எண் DHT11
லாஜிக்/IO மின்னழுத்தம் 3.3 V
விநியோக மின்னழுத்தம் 3.3 V
வெளியீட்டு மின்னோட்டம் (ஒரு சேனலுக்கு) 20 mA
உச்ச மின்னோட்டம் (ஒரு சேனலுக்கு) 50 mA
PWM அதிர்வெண் வழிகாட்டுதல் N/A
உள்ளீட்டு லாஜிக் வரம்புகள் 0.3 V (குறைந்த), 0.7 V (உயர்ந்த)
மின்னழுத்த வீழ்ச்சி / RDS(on) / செறிவு N/A
வெப்ப வரம்புகள் 0 முதல் 50 °C
பேக்கேஜ் 3-முள்
குறிப்புகள் / மாறுபாடுகள் அதிக துல்லியத்திற்கு DHT22 ஐப் பயன்படுத்தவும்.

 

  • சேதத்தைத் தடுக்க சரியான வயரிங் இருப்பதை உறுதிசெய்யவும்.
  • மின்னோட்டத்தை வரம்பிட LED உடன் 220 ஓம் மின்தடையத்தைப் பயன்படுத்தவும்.
  • தேவைப்பட்டால் DHT11 தரவு முள் மேல் இழு மின்தடையங்களைப் பயன்படுத்தவும்.
  • Wi-Fi சான்றுகளை எழுத்து உணர்திறனுக்காக சரிபார்க்கவும்.
  • இணைப்பு சிக்கல்களை பிழைத்திருத்த தொடர் வெளியீட்டை கண்காணிக்கவும்.
  • மோதல்களைத் தவிர்க்க MQTT தலைப்புகளை தனித்துவமாக வைத்திருங்கள்.
  • சென்சார் அளவீடுகள் செல்லுபடியாகும் என்பதை உறுதிசெய்ய சோதிக்கவும்.
  • DHT11 இன் பதில் நேரத்தில் கவனமாக இருங்கள்; அளவீடுகள் நிலைப்படுத்த சிறிது நேரம் ஆகலாம்.

LED = LED கட்டுப்பாடு; temperature = வெப்பநிலை தரவை வெளியிடு; humidity = ஈரப்பத தரவை வெளியிடு.

வயரிங் வழிமுறைகள்

கூறுகளை வயர் செய்ய, DHT11 சென்சாரை இணைப்பதன் மூலம் தொடங்கவும். DHT11 இன் இடது முள் ஒரு சிவப்பு கம்பியைப் பயன்படுத்தி பிரெட்போர்டில் உள்ள 3.3V மின்சார ரெயிலுடன் இணைக்கவும். DHT11 இன் நடு முள் ஒரு மஞ்சள் கம்பியைப் பயன்படுத்தி ESP32 இன் முள் 13 உடன் இணைக்கப்பட வேண்டும். இறுதியாக, DHT11 இன் வலது முள் ஒரு நீல கம்பியைப் பயன்படுத்தி தரை ரெயிலுடன் இணைக்கவும்.

அடுத்து, LED க்கு, அனோடை (நீண்ட கால்) 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 ஐ உள்ளிட்டு, புதிய தொகுதியை (block) உருவாக்கவும்.

    ../../_images/sp230516_104234.png
  6. 1 Toggle தொகுதியை உருவாக்கவும்.

    ../../_images/sp230516_105727.png
  7. அடுத்து, இங்கே ஒரு புதிய ஃபீடை (feed) உருவாக்க வேண்டும். இந்த டாக்கிள் LED ஐ கட்டுப்படுத்தப் பயன்படும், மேலும் இந்த ஃபீட்டிற்கு “LED” என்று பெயரிடுவோம்.

    ../../_images/sp230516_105641.png
  8. LED ஃபீட்டைத் தேர்வுசெய்து, அடுத்த படிக்குச் செல்லவும்.

    ../../_images/sp230516_105925.png
  9. தொகுதி அமைப்புகளை முடிக்கவும் (முக்கியமாக Block Title, On Text, மற்றும் Off Text), பின்னர் கீழ் வலதுபுறத்தில் உள்ள Create block பொத்தானைக் கிளிக் செய்து முடிக்கவும்.

    ../../_images/sp230516_110124.png
  10. அடுத்து, இரண்டு Text Blocks உருவாக்க வேண்டும். அவை வெப்பநிலை மற்றும் ஈரப்பதத்தைக் காட்டப் பயன்படும். எனவே, temperature மற்றும் humidity என்ற பெயரில் இரண்டு ஃபீட்களை உருவாக்கவும்.

    ../../_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 கிளையன்ட் ரூட் CA சான்றிதழுடன் அமைக்கப்படுகிறது.

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

இந்த குறியீடு ESP32 ஐ குறிப்பிட்ட Wi-Fi நெட்வொர்க்குடன் இணைக்கிறது மற்றும் பாதுகாப்பான MQTT இணைப்புகளுக்கு ரூட் CA ஐ அமைக்கிறது. நம்பகமான தரவு பரிமாற்றத்திற்கு இந்த இணைப்புகளை சரியாகக் கையாள்வது முக்கியமானது.

இறுதியாக, loop() செயல்பாடு MQTT இணைப்பை நிர்வகிக்கிறது மற்றும் வெப்பநிலை மற்றும் ஈரப்பத அளவீடுகளை சீரான இடைவெளியில் வெளியிடுகிறது.

mqtt.processPackets(5000);

இந்த வரி ESP32 ஐ சந்தா செய்யப்பட்ட தலைப்புகளுக்கான உள்வரும் செய்திகளை செயலாக்க அனுமதிக்கிறது, இதனால் சாதனம் வலை இடைமுகத்திலிருந்து அனுப்பப்படும் கட்டளைகளுக்கு பதிலளிக்கக்கூடியதாக இருப்பதை உறுதி செய்கிறது.

முழுமையான குறியீட்டிற்கு, கட்டுரையின் கீழே ஏற்றப்பட்ட முழு நிரலைப் பார்க்கவும்.

செயல்விளக்கம் / என்ன எதிர்பார்க்கலாம்

வெற்றிகரமாக அமைத்த பிறகு, உங்கள் Adafruit IO டாஷ்போர்டில் வெப்பநிலை மற்றும் ஈரப்பதத்தின் நேரடி புதுப்பிப்புகளைக் காண வேண்டும். வலை இடைமுகம் மூலம் LED-ஐ இயக்கவும் அணைக்கவும் முடியும். LED எதிர்பார்த்தபடி பதிலளிக்கவில்லை என்றால், உங்கள் வயரிங்கைச் சரிபார்த்து, 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!");
}

வளங்கள் மற்றும் மேற்கோள்கள்

கோப்புகள்📁

கோப்புகள் கிடைக்கவில்லை.