Search Code

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 ቪ
የአቅርቦት ቮልቴጅ 3.3 ቪ
የውጤት ጅረት (በአንድ ቻናል) 20 ሚኤ
ከፍተኛ ጅረት (በአንድ ቻናል) 50 ሚኤ
የPWM ድግግሞሽ መመሪያ የለም
የግቤት ሎጂክ ገደቦች 0.3 ቪ (ዝቅተኛ)፣ 0.7 ቪ (ከፍተኛ)
የቮልቴጅ ጠብታ / RDS(on) / ሳቹሬሽን የለም
የሙቀት ገደቦች 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 ይግቡ እና አዲስ ብሎክ ይፍጠሩ።

    ../../_images/sp230516_104234.png
  6. 1 Toggle ብሎክ ይፍጠሩ።

    ../../_images/sp230516_105727.png
  7. በመቀጠል፣ እዚህ አዲስ ፊድ መፍጠር ያስፈልግዎታል። ይህ ቶግል 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 ለተመዘገቡ ርዕሶች የሚመጡ መልዕክቶችን እንዲያስኬድ ያስችለዋል፣ ይህም መሣሪያው ከድር በይነገጽ ለተላኩ ትዕዛዞች ምላሽ የሚሰጥ መሆኑን ያረጋግጣል።

ለተሟላ ኮድ፣ እባክዎ ከጽሑፉ በታች የተጫነውን ሙሉ ፕሮግራም ይመልከቱ።

ማሳያ / ምን እንደሚጠበቅ

በተሳካ ሁኔታ ከተዋቀረ በኋላ፣ በአዳፍሩት አይኦ ዳሽቦርድዎ ላይ የሙቀት እና የእርጥበት መጠን የቅጽበት ማሻሻያዎችን ማየት ይኖርብዎታል። እንዲሁም ኤልኢዲውን በድር በይነገጽ በኩል ማብራት እና ማጥፋት ይችላሉ። ኤልኢዲው እንደተጠበቀው ምላሽ ካልሰጠ፣ የእርስዎን ሽቦ ያረጋግጡ እና የMQTT ርዕስ ስሞች በኮዱ ውስጥ ከተገለጹት ጋር መዛመዳቸውን ያረጋግጡ።

ያስተውሉ፣ ጊዜው ያለፈባቸው የምስክር ወረቀቶች በመኖራቸው የተወሰኑ የMQTT ግንኙነት ስህተቶች ሊከሰቱ ይችላሉ። እነዚህን ችግሮች ለማስወገድ የቅርብ ጊዜውን የስር ሲኤ ሰርተፍኬት በኮድዎ ውስጥ እንዳለዎት ያረጋግጡ (በቪዲዮው 15፡30 ላይ)።

የቪዲዮ የጊዜ ማህተሞች

  • 00፡00 መጀመሪያ
  • 1፡50 ለፕሮጀክቱ መግቢያ
  • 3፡16 MQTT ምንድን ነው
  • 6፡36 የአዳፍሩት አይኦ ማዋቀር
  • 11፡13 ሽቦ መገጣጠም
  • 13፡38 የአርዱኖ ኮድ ተብራርቷል
  • 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!");
}

ምንጮች እና ምንጮች

ፋይሎች📁

አንድ ፋይል የለም።