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-এর সাথে সংযুক্ত করুন। ক্যাথোড (ছোট পা) সরাসরি ব্রেডবোর্ডের গ্রাউন্ড রেলের সাথে সংযুক্ত করুন। নিশ্চিত করুন যে সমস্ত সংযোগ নিরাপদ এবং কোনও আলগা তার আছে কিনা তা দুবার পরীক্ষা করুন।
ড্যাশবোর্ড সেটআপ করা
-
Adafruit IO-তে যান, তারপর একটি ফ্রি অ্যাকাউন্ট তৈরি করতে Start for free-এ ক্লিক করুন।

-
একটি অ্যাকাউন্ট তৈরি করতে ফর্মটি পূরণ করুন।

-
একটি Adafruit অ্যাকাউন্ট তৈরি করার পরে, আপনাকে Adafruit IO পুনরায় খুলতে হবে। Dashboards-এ ক্লিক করুন, তারপর New Dashboard-এ ক্লিক করুন।

-
একটি New Dashboard তৈরি করুন।

-
নতুন তৈরি করা Dashboard-এ প্রবেশ করুন এবং একটি নতুন ব্লক তৈরি করুন।

-
1টি Toggle ব্লক তৈরি করুন।

-
এরপর, আপনাকে এখানে একটি নতুন ফিড তৈরি করতে হবে। এই টগলটি LED নিয়ন্ত্রণ করতে ব্যবহৃত হবে, এবং আমরা এই ফিডটির নাম দেব “LED”।

-
LED ফিডটি চেক করুন, তারপর পরবর্তী ধাপে যান।

-
ব্লক সেটিংস সম্পূর্ণ করুন (মূলত Block Title, On Text এবং Off Text), তারপর শেষ করতে নীচে ডানদিকে Create block বোতামে ক্লিক করুন।

-
আমাদের এরপর দুটি Text Block তৈরি করতে হবে। সেগুলি তাপমাত্রা এবং আর্দ্রতা প্রদর্শনের জন্য ব্যবহৃত হবে। তাই, temperature এবং humidity নামে দুটি ফিড তৈরি করুন।

-
তৈরির পরে, আপনার Dashboard দেখতে এরকম কিছু হওয়া উচিত:

-
Dashboard-এ Edit Layout বিকল্প ব্যবহার করে আপনি লেআউটটি সামঞ্জস্য করতে পারেন।

-
API KEY-এ ক্লিক করুন, এবং আপনি আপনার ব্যবহারকারীর নাম এবং API KEY প্রদর্শিত দেখতে পাবেন। এগুলি লিখে রাখুন কারণ আপনার কোডের জন্য এগুলির প্রয়োজন হবে।

কোড উদাহরণ ও ব্যাখ্যা
কোডটি প্রয়োজনীয় লাইব্রেরিগুলি অন্তর্ভুক্ত করে, 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 সার্টিফিকেট আছে তা নিশ্চিত করুন (ভিডিওতে ১৫:৩০ মিনিটে)।
ভিডিও টাইমস্ট্যাম্প
- ০০:০০ শুরু
- ১:৫০ প্রকল্পের পরিচিতি
- ৩:১৬ MQTT কী
- ৬:৩৬ Adafruit IO সেটআপ
- ১১:১৩ ওয়্যারিং
- ১৩:৩৮ Arduino কোড ব্যাখ্যা
- ২২:০৩ ESP32 বোর্ড এবং COM পোর্ট নির্বাচন
- ২৩:৪৪ প্রকল্প প্রদর্শন
- ২৭:০৫ ড্যাশবোর্ড আপডেট
/***********************************************************************
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!");
}
/***********************************************************************
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!");
}
Common Course Links
Common Course Files
সম্পদ ও রেফারেন্সসমূহ
-
ডকুমেন্টেশন
ফাইলসমূহ📁
কোনো ফাইল উপলব্ধ নেই।