કોડ શોધો

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માં પ્રવેશ કરો અને નવો બ્લોક બનાવો.

    ../../_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 જોડાણ શરૂ કરવામાં આવે છે, અને સુરક્ષિત સંચાર માટે રૂટ CA પ્રમાણપત્ર સાથે MQTT ક્લાયંટ સેટ કરવામાં આવે છે.

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!");
}

સંસાધનો અને સંદર્ભો

ફાઇલો📁

કોઈ ફાઇલો ઉપલબ્ધ નથી.