آموزش ESP32 48/55 - نظارت بر دما از راه دور و کنترل LED MQTT | کیت IoT ESP32 سن_founder
در این آموزش، ما بررسی خواهیم کرد که چگونه میتوان از ماجیول ESP32 به همراه برد توسعه ESP32 سنفاندور برای نظارت بر دما و رطوبت بهطور از راه دور با استفاده از پلتفرم Adafruit IO استفاده کرد. علاوه بر این، ما قابلیت کنترل یک LED از طریق یک رابط وب را پیادهسازی خواهیم کرد. در پایان این پروژه، شما قادر خواهید بود دادههای دما و رطوبت را بهطور زنده مشاهده کنید و یک LED را از مرورگر خود روشن و خاموش کنید.
این پروژه از پروتکل MQTT برای ارتباط مؤثر بین ESP32 و سرویس Adafruit IO استفاده میکند. MQTT سبکوزن است و برای برنامههای IoT مناسب است و به ما این امکان را میدهد که به راحتی دادههای حساس(حس کننده) را منتشر کنیم و به دستورات کنترل LED مشترک شویم. برای توضیح بیشتر در مورد شِفر (کود) و سیمکشی، حتماً ویدیوی همراه با این آموزش را بررسی کنید (در ویدیو در 00:00).
توضیح سختافزار
اجزای اصلی این پروژه شامل میکروکنترلر ESP32، حساس(حس کننده) دما و رطوبت DHT11 و یک LED است. ESP32 یک میکروکنترلر قدرتمند است که ویژگیهای Wi-Fi و بلوتوث داخلی را داراست و آن را به گزینهای ایدهآل برای پروژههای IoT تبدیل میکند. این میکروکنترلر قادر است چندین کار را همزمان پردازش کرده و به اینترنت بهطور بیوقفه متصل شود.
حساس(حس کننده) DHT11 مسئول اندازهگیری دما و رطوبت است. این حساس(حس کننده) سیگنالهای دیجیتالی را خروجی میدهد که میتوانند توسط ESP32 خوانده شوند. LED به عنوان یک نشانگر عمل میکند و میتوان آن را بهصورت از راه دور کنترل کرد تا کارایی پروتکل MQTT در مدیریت دستگاهها از طریق اینترنت را نشان دهد.
جزئیات ورق داده
| تولیدکننده | ادافرادیت |
|---|---|
| شماره قطعه | دیتاهای DHT11 |
| ولتاژ منطق/ورودی و خروجی | ۳.۳ ولت |
| ولتاژ منبع | ۳.۳ ولت |
| جریان خروجی (به ازای هر کانال) | ۲۰ میلیآمپر |
| جریان اوج (برای هر کانال) | 50 میلی آمپر |
| راهنمایی فرکانس PWM | N/A |
| آستانههای منطقی ورودی | ۰.۳ ولت (کم)، ۰.۷ ولت (زیاد) |
| افت ولتاژ / RDS(on)/ اشباع | N/A |
| محدودیتهای حرارتی | ۰ تا ۵۰ درجه سلسیوس |
| بسته | سه پایه |
| یادداشتها / انواع | از DHT22 برای دقت بالاتر استفاده کنید. |
- مطمئن شوید که سیمکشی به درستی انجام شده باشد تا از آسیب جلوگیری شود.
- از یک مقاومت 220 اهمی همراه LED برای محدود کردن جریان استفاده کنید.
- در صورت لزوم از مقاومتهای کششی برای پایه داده DHT11 استفاده کنید.
- مجوزهای Wi-Fi را از نظر حساسیت به حروف بزرگ و کوچک بررسی کنید.
- خروجی سریال را برای اشکالزدایی مشکلات اتصال زیر نظر داشته باشید.
- تضمین کنید که موضوعات MQTT منحصر به فرد باشند تا از بروز تعارضات جلوگیری شود.
- خوانشهای حساس را آزمایش کنید تا اطمینان حاصل شود که معتبر هستند.
- به زمان پاسخگویی DHT11 توجه داشته باشید؛ ممکن است مدتی طول بکشد تا قرائتها پایدار شوند.
LED= کنترل LED؛temperatureدادههای دما را منتشر کنید;humidity= انتشار دادههای رطوبت.
دستورالعملهای سیمکشی
برای سیمکشی اجزا، با اتصال حساس(حس کننده) DHT11 شروع کنید. پایه چپ DHT11 را با استفاده از یک سیم قرمز به ریل تغذیه ۳.۳ ولت روی برد برد متصل کنید. پایه وسط DHT11 باید با استفاده از یک سیم زرد به پایه ۱۳ روی ESP32 متصل شود. در نهایت، پایه راست DHT11 را با استفاده از یک سیم آبی به ریل زمین متصل کنید.
سپس، برای LED، پایانه آَنُدی (پایانه بلندتر) را از طریق یک مقاومت ۲۲۰ اهم به پایه ۱۵ ESP32 متصل کنید. پایانه کاتدی (پایانه کوتاهتر) را مستقیماً به ریل زمین روی برد بُرد متصل کنید. اطمینان حاصل کنید که تمام اتصالات محکم هستند و دوباره برای هر گونه سیم شل بررسی کنید.
راهاندازی داشبورد
-
بازدیدآدافروت آیاوسپس روی کلیک کنیدبرای شروع رایگان ثبتنام کنیدبرای ایجاد یک حساب کاربری رایگان.

-
فرم را پر کنید تا یک حساب کاربری ایجاد کنید.

-
پس از ایجاد یک حساب کاربری Adafruit، لازم است دوباره وارد Adafruit io شوید. بر رویداشبوردهاسپس روی کلیک کنیدداشبورد جدید.

-
یک را ایجاد کنیدداشبورد جدید.

-
وارد کنید تازه ایجاد شدهداشبوردو یک بلوک جدید ایجاد کنید.

-
1 را ایجاد کنیدتغییر وضعیتبلوک.

-
سپس، شما نیاز دارید که یک فید جدید اینجا ایجاد کنید. این کلید برای کنترل LED استفاده خواهد شد و ما این فید را "LED" نامگذاری خواهیم کرد.

-
بررسی کنیددیود ساطع کننده نورتغذیه کنید، سپس به مرحله بعدی بروید.

-
تنظیمات بلوک را کامل کنید (در درجه اول عنوان بلوک، متن روشن و متن خاموش)، سپس رویایجاد بلوکدکمه در گوشه پایین右 برای اتمام.

-
ما همچنین باید دو تا ایجاد کنیمبلوکهای متنیبعدی. آنها برای نمایش دما و رطوبت استفاده خواهند شد. بنابراین، دو خوراک به نامدماورطوبت.

-
پس از ایجاد، داشبورد شما باید به این شکل باشد:

-
شما میتوانید طرح را با استفاده ازویرایش طرحگزینه در داشبورد.

-
کلیک کنید بر رویکلید API، و شما نام کاربری خود را مشاهده خواهید کرد وکلید APIاین موارد را یادداشت کنید زیرا برای شِفر (کود) شما به آنها نیاز خواهید داشت.

مثالهای شِفر (کود) و راهنما
شِفر (کود) با گنجاندن کتابخانههای لازم آغاز میشود، اعتبارنامههای 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 مشخص شده متصل کرده و CA ریشه را برای اتصالات MQTT امن تنظیم میکند. مدیریت صحیح این اتصالات برای انتقال دادههای قابل اعتماد حیاتی است.
در نهایت، الloop()عملکرد اتصال MQTT را مدیریت کرده و دما و رطوبت را در فواصل منظم منتشر میکند.
mqtt.processPackets(5000);این خط به ESP32 اجازه میدهد تا پیامهای وارد شده برای موضوعات مشترک را پردازش کند و اطمینان حاصل کند که دستگاه به دستورات ارسال شده از رابط وب پاسخگو باقی بماند.
برای شِفر (کود) کامل، لطفاً به برنامه کامل بارگذاریشده در زیر مقاله مراجعه کنید.
نمایشگاه / چه انتظاری داشته باشیم
پس از راهاندازی موفق، باید بهروزرسانیهای بلادرنگ دما و رطوبت را در داشبورد Adafruit IO خود مشاهده کنید. همچنین میتوانید LED را از طریق رابط وب روشن و خاموش کنید. اگر LED بهطور مورد انتظار پاسخ نمیدهد، اتصالات خود را بررسی کنید و مطمئن شوید که نامهای موضوع MQTT با آنچه در شِفر (کود) تعریف شده هماهنگ هستند.
به خاطر داشته باشید که ممکن است برخی از خطاهای اتصال MQTT به دلیل گواهینامههای منقضی شده رخ دهند. اطمینان حاصل کنید که جدیدترین گواهی ریشه CA را در شِفر (کود) خود دارید تا از بروز این مشکلات جلوگیری کنید (در ویدیو در ساعت ۱۵:۳۰).
زمانبندی ویدیو
- ۰۰:۰۰ شروع
- مقدمه به پروژه 1:50
- 3:16 MQTT چیست
- تنظیمات Adafruit IO 6:36
- 11:13 سیم کشی
- شِفر (کود) آردوینو توضیح داده شده: ۱۳:۳۸
- انتخاب برد ESP32 و پورت COM :03
- ۲۳:۴۴ نمایش پروژه
- بهروزرسانی داشبورد ۲۷:۰۵
/*
* کتابخانه MQTT آدافرویت ESP32 مثال آدافرویت IO SSL/TLS
*
* از آخرین نسخه هسته آردوینو ESP32 استفاده کنید:
* https://github.com/espressif/arduino-esp32
*
* با بردهای آدافرویت Huzzah32 Feather و Breakout Board فوقالعاده کار میکند:
* https://www.adafruit.com/product/3405
* https://www.adafruit.com/products/4172
*
* آدافرویت زمان و منابع خود را به ارائه این شِفر (کود) منبع باز اختصاص میدهد،
* لطفاً از آدافرویت و سختافزار منبع باز با خرید محصولات آدافرویت حمایت کنید!
*
* نوشته شده توسط تونی دیکولا برای صنایع آدافرویت.
* تغییر یافته توسط برنت روبل برای صنایع آدافرویت
* مجوز MIT، تمام متن بالا باید در هر توزیع مجدد شامل شود
* /
*
* /// مرجع: https://www.electronicwings.com/esp32/esp32-mqtt-client
*/
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/*
* نقطه دسترسی WiFi *********************************/
*
* #define WLAN_SSID "SSID"
* #define WLAN_PASS "PASSWORD"
*
* /************************* راهاندازی Adafruit.io
*/
#define AIO_SERVER "io.adafruit.com"
// استفاده از پورت ۸۸۸۳ برای MQTTS
#define AIO_SERVERPORT 8883
// تنظیم حساب کاربری Adafruit IO
// برای بهدستآوردن این مقادیر، به https://io.adafruit.com مراجعه کرده و بر روی کلید فعال کلیک کنید.
// #define AIO_USERNAME "نام_کاربری_آدافرایت_شما"
// #define AIO_KEY "کلید آدافرویت آی او شما"
#define AIO_USERNAME "JimmyKernel"
#define AIO_KEY "aio_Mxiv12i74b5jKfKNSKLYjlhPmoHC"
/*
* وضعیت جهانی (شما نیازی به تغییر این ندارید!) ******************/
*
* // WiFiClientSecure برای پشتیبانی از SSL/TLS
* WiFiClientSecure client;
*
* // راهاندازی کلاس مشتری MQTT با انتقال مشتری WiFi و جزئیات سرور و ورود MQTT.
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // ریشه CA io.adafruit.com
* 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";
*/
// فید به نام 'test' برای انتشار و 'test2' برای اشتراکگذاری راهاندازی کنید.
// مسیرهای MQTT برای AIO به شکل زیر است: <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");
/*
* درس پایه MQTT آدافروت ۱
* برای آموزش ویدیویی این شِفر (کود) در یوتیوب مشاهده کنید https://youtu.be/M9BQweAsHJM
* صفحه منابع برای این درس و شِفر (کود):
* 📚⬇️ دانلود و صفحه منابع https://robojax.com/RJT670
* آموزش توسط https://youTube.com/@robojax
*
* کتابخانه MQTT آدافروت مثال SSL/TLS ESP32 آدافروت IO
*
* از آخرین نسخه هسته آردوینو ESP32 استفاده کنید:
* https://github.com/espressif/arduino-esp32
*
* با آدافروت Huzzah32 Feather و برد Breakout عملکرد عالی دارد:
* https://www.adafruit.com/product/3405
* https://www.adafruit.com/products/4172
*
* آدافروت زمان و منابعی را برای ارائه این شِفر (کود) منبع باز سرمایهگذاری کرده است،
* لطفاً با خرید محصولات از آدافروت از آدافروت و سختافزار منبع باز حمایت کنید!
*
* نوشته شده توسط تونی دیکولا برای صنایع آدافروت.
* تغییر یافته توسط برنت روبل برای صنایع آدافروت
* مجوز MIT، تمام متن بالا باید در هر توزیع مجدد گنجانده شود
* /
*
* /// مرجع: https://www.electronicwings.com/esp32/esp32-mqtt-client
*/
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/*
* نقطه دسترسی WiFi *********************************/
*
* #define WLAN_SSID "dars"
* #define WLAN_PASS "5152535455"
*
* /************************* راهاندازی Adafruit.io
*/
#define AIO_SERVER "io.adafruit.com"
// استفاده از پورت ۸۸۸۳ برای MQTTS
#define AIO_SERVERPORT 8883
// پیکربندی حساب Adafruit IO
// برای دستیابی به این مقادیر، به https://io.adafruit.com مراجعه کرده و بر روی Active Key کلیک کنید.
// #define AIO_USERNAME "نام_کاربری_آدافرات_آیاوی_شما"
// #undef AIO_KEY "YOUR_ADAFRUIT_IO_KEY"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_wCyL33EVKLcGoAotGNEQ4dGQYOLZ"
/*
* وضعیت جهانی (نیازی به تغییر این نیست!) ******************/
*
* // WiFiFlientSecure برای پشتیبانی از SSL/TLS
* WiFiClientSecure client;
*
* // راهاندازی کلاس کلاینت MQTT با ارسال کلاینت WiFi و جزئیات سرور و ورود MQTT.
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // CA ریشه io.adafruit.com
* 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";
*/
// یک فید به نام 'test' برای انتشار و 'test2' برای اشتراک راهاندازی کنید.
// مسیرهای MQTT برای AIO به صورت زیر هستند: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
// آدافرود_MQTT_انتشار رطوبت = آدافرود_MQTT_انتشار(&mqtt, نام_کاربری_AIO "/خوراکها/رطوبت");
// ادافruit_MQTT_Publish دما = ادافruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");
Common Course Links
Common Course Files
منابع و مراجع
-
مستندات
فایلها📁
هیچ فایلی موجود نیست.