ESP32 ٹیوٹوریل 48/55 - ریموٹ درجہ حرارت کی نگرانی اور LED کنٹرول MQTT | سن فاؤنڈر کا 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 |
| لاجک/آئی او وولٹیج | 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 Blocks بھی بنانے ہیں۔ وہ درجہ حرارت اور نمی ظاہر کرنے کے لیے استعمال ہوں گے۔ لہذا، 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 کنکشن شروع کیا جاتا ہے، اور 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 ڈیش بورڈ اپڈیٹ کرنا
/***********************************************************************
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
وسائل اور حوالہ جات
-
دستاویزات
فائلیں📁
کوئی فائلیں دستیاب نہیں ہیں۔