Wa Koodu

Èkọ́ ESP32 48/55 - Ìṣàkóso Ìwọ̀n Ooru Láti Òkèrè àti Ìdarí LED MQTT | SunFounder's ESP32 IoT kit

Èkọ́ ESP32 48/55 - Ìṣàkóso Ìwọ̀n Ooru Láti Òkèrè àti Ìdarí LED MQTT | SunFounder's ESP32 IoT kit

Nínú ẹ̀kọ́ yìí, a óò ṣàwárí bí a ṣe le lo módúùlù ESP32 pẹ̀lú bọ́ọ̀dù ìfààgùn ESP32 ti SunFounder láti ṣe àkíyèsí ìwọ̀n-otútù àti ọ̀rinrin ní ọ̀nà jíjìn nípa lílo pẹ̀pẹ̀ Adafruit IO. Pẹ̀lúpẹ̀, a óò ṣe ìmúṣẹ iṣẹ́ ṣíṣàkóso LED nípasẹ̀ ojú-ojú wẹ́bù. Ní ìparí iṣẹ́-ọwọ́ yìí, ìwọ óò ní agbára láti wo àwọn ìsọfúnni ìwọ̀n-otútù àti ọ̀rinrin ní àkókò gidi àti láti yí LED pa/tán láti inú ẹ̀rọ̀ àwàwẹ́ rẹ.

Iṣẹ́-ọwọ́ yìí lo ìlànà MQTT fún ìbánisọ̀rọ̀ tó gbéṣẹ́ láàárín ESP32 àti iṣẹ́ Adafruit IO. MQTT jẹ́ ìfẹ́rẹ̀ẹ́fẹ̀rẹ́ tí ó sì bá IoT mu dáradára, tí ó gbà wá láyè láti tẹ̀jáde ìsọfúnni sẹ́nsọ̀ àti láti ṣàmúlò àwọn àṣẹ fún ìṣàkóso LED. Fún ìṣàlàyé síwájú síi ti kóòdù àti ìsopọ̀-okun, rí i dájú pé o wo fídíò tó bá ẹ̀kọ́ yìí lọ (nínú fídíò ní 00:00).

Ohun Èlò Tí A Ṣàlàyé

Àwọn èròjà pàtàkì fún iṣẹ́-ọwọ́ yìí ní ESP32 microcontroller, sẹ́nsọ̀ ìwọ̀n-otútù àti ọ̀rinrin DHT11, àti LED kan. ESP32 jẹ́ microcontroller alágbára tí ó ní Wi-Fi àti Bluetooth tó wà nínú rẹ̀, tí ó mú un di yíyan fún àwọn iṣẹ́ IoT. Ó lè ṣe ọ̀pọ̀lọpọ̀ iṣẹ́ ní àkókò kan náà tí ó sì lè sopọ̀ mọ́ Íńtánẹ́ẹ̀tì láìṣìṣẹ̀.

Sẹ́nsọ̀ DHT11 ni ó ṣe iṣẹ́ wíwọn ìwọ̀n-otútù àti ọ̀rinrin. Ó máa ń jáde àwọn àmì oní nọ́ńbà tí ESP32 lè kà. LED náà sì ń ṣiṣẹ́ gẹ́gẹ́ bí àmì ìtọ́ka tí a lè ṣàkóso láti ọ̀nà jíjìn láti fi hàn bí ìlànà MQTT ṣe gbéṣẹ́ nínú ṣíṣàkóso àwọn ẹ̀rọ lórí Íńtánẹ́ẹ̀tì.

Àwọn Àlàyé Datasheet

Olùṣe Adafruit
Nọ́ńbà apá DHT11
Fóltì Logic/IO 3.3 V
Fóltì ìpèsè 3.3 V
Ìwọ̀n-ìjàde lọ́wọ́ (fún ikanni) 20 mA
Ìwọ̀n-ìjàde tó ga jùlọ (fún ikanni) 50 mA
Ìtọ́sọ́nà PWM Kò sí
Àwọn ìpele ìṣàkóso ìwọ̀n-ìkọ̀wé 0.3 V (rẹ̀lẹ̀), 0.7 V (ga)
Ìdìndì fóltì / RDS(on) / ìkún-ọ̀nà Kò sí
Àwọn ìwọ̀n-ìgbóná tó pọ̀ jù 0 sí 50 °C
Àpótí 3-pin
Àwọn àkíyèsí / àwọn ìyàtọ̀ Lo DHT22 fún ìwọ̀n tó péye jù.

 

  • Rí i dájú pé ìsopọ̀-okun tọ́ láti má ba à bàjẹ́.
  • Lo resistor 220 Ohm pẹ̀lú LED fún ìdínà ìwọ̀n-ìjàde.
  • Lo àwọn resistor ìfà-oke fún pin ìsọfúnni DHT11 bí ó bá pọn dandan.
  • Ṣàyẹ̀wò àwọn ìsọfúnni Wi-Fi fún ìmú-ọ̀rọ̀-ńlá.
  • Ṣàkíyèsí ìjàde serial fún ṣíṣàtúnṣe àwọn ìṣòro ìsopọ̀.
  • Jẹ́ kí àwọn kókó-ọ̀rọ̀ MQTT yàtọ̀ láti yẹra fún ìforígbárí.
  • Dán an sẹ́nsọ̀ wò láti rí i dájú pé àwọn ìwọ̀n tọ́.
  • Ṣọ́ra fún àkókò ìdáhùn DHT11; ó lè gba àkókò láti mú àwọn ìwọ̀n dúró.

LED = ṣàkóso LED; temperature = tẹ̀jáde ìsọfúnni ìwọ̀n-otútù; humidity = tẹ̀jáde ìsọfúnni ọ̀rinrin.

Àwọn Ìtọ́sọ́nà Ìsopọ̀-okun

Láti sopọ̀ àwọn èròjà, bẹ̀rẹ̀ nípa ṣíṣopọ̀ sẹ́nsọ̀ DHT11. Sopọ̀ pin òsì ti DHT11 sí ọ̀nà agbára 3.3V lórí breadboard nípa lílo okun pupa. Pin àárín ti DHT11 yẹ kí ó sopọ̀ sí pin 13 lórí ESP32 nípa lílo okun ofeefee. Ní ìparí, sopọ̀ pin ọ̀tún ti DHT11 sí ọ̀nà ilẹ̀ nípa lílo okun bulúù.

Lẹ́yìn náà, fún LED, sopọ̀ anode (ẹsẹ̀ tó gùn) sí pin 15 ti ESP32 nípasẹ̀ resistor 220 Ohm. Sopọ̀ cathode (ẹsẹ̀ kúkúrú) tààrà sí ọ̀nà ilẹ̀ lórí breadboard. Rí i dájú pé gbogbo àwọn ìsopọ̀ ṣe dáradára kí o sì ṣàyẹ̀wò fún àwọn okun tí kò lè dí.

Ṣíṣètò Dashboard náà

  1. Ṣàbẹ̀wò Adafruit IO, lẹ́yìn náà tẹ Start for free láti ṣẹ̀dá àkọọ́lẹ̀ ọ̀fẹ́.

    ../../_images/sp230516_102503.png
  2. Kún fọ́ọ̀mù náà láti ṣẹ̀dá àkọọ́lẹ̀.

    ../../_images/sp230516_102629.png
  3. Lẹ́yìn tí o bá ṣẹ̀dá àkọọ́lẹ̀ Adafruit, o ní láti tún Adafruit io ṣí. Tẹ Dashboards, lẹ́yìn náà tẹ New Dashboard.

    ../../_images/sp230516_103347.png
  4. Ṣẹ̀dá New Dashboard.

    ../../_images/sp230516_103744.png
  5. Wọ inú Dashboard tuntun tí o ṣẹ̀dá, kí o sì ṣẹ̀dá àkọ́sílẹ̀ tuntun kan.

    ../../_images/sp230516_104234.png
  6. Ṣẹ̀dá àkọ́sílẹ̀ Toggle kan.

    ../../_images/sp230516_105727.png
  7. Ní ìgbà tí ó tẹ̀lé, o ní láti ṣẹ̀dá feed tuntun kan níbí. Toggle yìí ni a ó lò láti ṣàkóso LED, a ó sì pe feed yìí ní “LED”.

    ../../_images/sp230516_105641.png
  8. Ṣàmìsí feed LED, lẹ́yìn náà lọ sí ìgbésẹ̀ tí ó tẹ̀lé.

    ../../_images/sp230516_105925.png
  9. Parí àwọn ètò àkọ́sílẹ̀ (ní pàtàkì Block Title, On Text, àti Off Text), lẹ́yìn náà tẹ bọ́tìnnì Create block ní ìsàlẹ̀ ọ̀tún láti parí.

    ../../_images/sp230516_110124.png
  10. A tún ní láti ṣẹ̀dá àwọn Text Blocks méjì ní ìgbà tí ó tẹ̀lé. Wọ́n yóò ṣe àfihàn ìwọ̀n-otútù àti ọ̀rinrin. Nítorí náà, ṣẹ̀dá àwọn feed méjì tí a pè ní temperature àti humidity.

    ../../_images/sp230516_110657.png
  11. Lẹ́yìn ìṣẹ̀dá, Dashboard rẹ yóò dà bí èyí:

    ../../_images/sp230516_111134.png
  12. O lè ṣàtúnṣe ìrísí nípa lílo àṣàyàn Edit Layout lórí Dashboard.

    ../../_images/sp230516_111240.png
  13. Tẹ API KEY, o yóò sì rí orúkọ-ìṣàmúlò rẹ àti API KEY tí a fihàn. Kọ wọ́n sílẹ̀ nítorí wọ́n yóò ṣe pàtàkì fún kóòdù rẹ.

    ../../_images/sp230516_111641.png

 

Àwọn Àpẹẹrẹ Kóòdù & Ìtọ́sọ́nà

Kóòdù náà bẹ̀rẹ̀ nípa fífi àwọn àkójọpọ̀ kóòdù tí a nílò sílẹ̀, ṣíṣètò àwọn ìsọfúnni Wi-Fi, àti ṣíṣàlàyé àwọn àwọn ètò MQTT. Àwọn ìdámọ̀ pàtàkì bíi AIO_USERNAME àti AIO_KEY ni a lò láti fi ìdánilójú pẹ̀lú iṣẹ́ Adafruit IO.

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

Àwọn ìlà wọ̀nyí ṣàlàyé orúkọ-ìṣàmúlò àti bọ́tìnnì Adafruit IO rẹ, èyí tí ó ṣe pàtàkì fún ìsopọ̀ mọ́ MQTT broker. Rí i dájú pé àwọn iye wọ̀nyí péye láti fi ìdásílẹ̀ ìsopọ̀ tí ó yọrí sí rere.

Nínú iṣẹ́ setup(), ìsopọ̀ Wi-Fi ni a bẹ̀rẹ̀, a sì ṣètò MQTT client pẹ̀lú root CA certificate fún ìbánisọ̀rọ̀ tí ó ní ààbò.

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

Kóòdù yìí so ESP32 pọ̀ mọ́ nẹ́tíwọ̀ọ́kì Wi-Fi tí a yàn, ó sì ṣètò root CA fún àwọn ìsopọ̀ MQTT tí ó ní ààbò. Mímú àwọn ìsopọ̀ wọ̀nyí ṣiṣẹ́ dáradára ṣe pàtàkì fún gbígbé ìsọfúnni tí ó gbára lé.

Ní ìparí, iṣẹ́ loop() ń ṣàkóso ìsopọ̀ MQTT, ó sì ń tẹ̀jade àwọn ìwọ̀n-otútù àti ọ̀rinrin ní àwọn àkókò tí a yàn.

mqtt.processPackets(5000);

Ìlà yìí jẹ́ kí ESP32 ṣe ìmúṣẹ àwọn ìsẹ̀yìn tí ó wọlé fún àwọn kókó-ọ̀rọ̀ tí a ṣàmìsí, ní ríri dájú pé ẹ̀rọ náà ń fèsì sí àwọn àṣẹ tí a rán láti ojú òpó wẹ́ẹ̀bù.

Fún kóòdù pípé, jọ̀wọ́ tọ́ka sí ètò kíkún tí a gbé sí ìsàlẹ̀ àpilẹ̀kọ yìí.

Ìfihàn / Ohun Tí O Lè Retí

Lẹ́yìn tí o bá ṣètò dáradára, o yẹ kí o rí àwọn ìmúdójúìwọ̀n gidi-àkókò ti ìwọ̀n-otútù àti ọ̀rinrin lórí àpótí Adafruit IO rẹ. O tún lè yí LED náà sí orí àti pa nípasẹ̀ ojú-ojú wẹ́ẹ̀bù. Bí LED kò bá fèsì gẹ́gẹ́ bí a ṣe retí, ṣàyẹ̀wò ìsopọ̀ rẹ kí o sì rí i dájú pé àwọn orúkọ kókó-ọ̀rọ̀ MQTT bá àwọn tí a ṣàlàyé nínú kóòdù mu.

Kí o mọ̀ pé àwọn àṣìṣe ìsopọ̀ MQTT kan lè wáyé nítorí àwọn ìwé-ẹ̀rí tí ó ti parí. Rí i dájú pé o ní ìwé-ẹ̀rí CA gbòǹgbò tuntun jùlọ nínú kóòdù rẹ láti yẹra fún àwọn ìṣòro wọ̀nyí (nínú fídíò ní 15:30).

Àwọn Àsìkò Fídíò

  • 00:00 Ìbẹ̀rẹ̀
  • 1:50 Ìfihàn sí iṣẹ́-ọnà náà
  • 3:16 Kí ni MQTT
  • 6:36 Ìṣètò Adafruit IO
  • 11:13 Ìsopọ̀-okun
  • 13:38 Àlàyé kóòdù Arduino
  • 22:03 Yíyàn bọ́ọ̀dù ESP32 àti èbúté COM
  • 23:44 Ìfihàn iṣẹ́-ọnà
  • 27:05 Ìmúdójúìwọ̀n àpótí
849-ESP32 Tutorial 48/55- Arduino code for Remote Temperature Monitoring and LED control MQTT
Ede: 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)
Ede: 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!");
}

Fáìlìs📁

Ko si awọn faili ti o wa.