بخش سخت‌افزار

برای مشاهده کدهای اتصال برد خود به پلتفرم الکترو، برد مورد نظر را انتخاب کنید.

آموزش جامع راه‌اندازی سیستم با ESP8266

در دنیای اینترنت اشیا (IoT)، سرعت، امنیت و پایداری حرف اول را می‌زنند. پروتکل MQTT به عنوان یک استاندارد سبک و بی‌درنگ، بهترین گزینه برای مدیریت تجهیزات است. کدی که در ادامه می‌بینید، یک سیستم جامع است که کنترل ۴ رله، خواندن سنسور DHT11، دریافت کدهای نوری RGB، شبیه‌سازی وضعیت دیجیتال و فیلتر نویز پتانسیومتر را همزمان روی داشبورد MyElectro پیاده‌سازی می‌کند.

آنچه در این آموزش یاد می‌گیرید:

  • اتصال پایدار به شبکه وای‌فای و کارگزار (Broker) اختصاصی MyElectro.
  • مکانیزم دریافت فرامین رله از سایت و نحوه آپدیتِ زنده وضعیت داشبورد.
  • پیاده‌سازی سیستم ایمنی قفل سخت‌افزاری در زمان روشن شدن دستگاه (First Boot).
  • ارسال زمان‌بندی شده دیتا (دیتالاگر) بدون قفل شدن پردازنده با millis().

قطعات سخت‌افزاری مورد نیاز:

نام قطعه تعداد نقش در پروژه
برد NodeMCU (ESP8266) ۱ عدد مغز متفکر و ارتباط با اینترنت
ماژول رله ۴ کاناله ۱ عدد کنترل وسایل برقی (روشنایی، فن و...)
سنسور DHT11 ۱ عدد پایش دما و رطوبت محیط
پتانسیومتر (ولوم خطی) ۱ عدد ارسال مقادیر ۰ تا ۱۰۰ به اسلایدرها
ESP8266_MyElectro.ino

بررسی منطق کارکرد و تشریح بخش‌های کلیدی کد

۱. دریافت فرامین و کلیدهای سایت (Subscribe)

برای اینکه برد شما متوجه شود در داشبورد وب‌سایت چه دکمه‌ای را زده‌اید، باید روی کانال یا تاپیک مربوطه اصطلاحاً Subscribe (گوش به زنگ) شود:

mqtt.subscribe((String(USER_API_KEY) + "/relays/#").c_str());

کاراکتر # در MQTT به معنی Wildcard است و باعث می‌شود برد تمام پیام‌های رله‌های ۱ تا ۴ را یکجا دریافت کند. به محض کلیک در سایت، تابع callback اجرا شده و با دستور زیر خروجی را قطع یا وصل می‌کند:

digitalWrite(R1_PIN, message == "1" ? HIGH : LOW);

۲. فرستادن اطلاعات فیزیکی به سایت (Publish)

هر زمان مقدار پتانسیومتر یا سنسورهای متصل به برد تغییر کند، باید آن را به وب‌سایت ارسال (Publish) کنیم تا داشبورد بلافاصله همگام (Sync) شود:

mqtt.publish((String(USER_API_KEY) + "/sliders/sl1").c_str(), String(mappedPot).c_str(), true);

گذاشتن مقدار true در انتهای دستور بالا، پیام را به صورت Retained (ماندگار) ذخیره می‌کند تا در صورت رفرش کردن صفحه یا باز کردن مجدد سایت، آخرین مقدار سنسور بلافاصله لود شود.

۳. حفظ ایمنی هنگام قطع و وصل برق (First Boot Security)

اگر برق قطع و وصل شود یا برد ناگهان ریست شود، ممکن است در کدهای ساده رله‌ها به اشتباه روشن بمانند. برای امنیت بیشتر، سیستم در اولین راه‌اندازی (First Boot)، وضعیت کلیدها را روی سرور صفر (خاموش) می‌کند تا همه‌چیز در ایمنی کامل استارت بخورد:

if (isFirstBoot) {
  mqtt.publish((String(USER_API_KEY) + "/relays/r1").c_str(), "0", true);
  isFirstBoot = false;
}

۴. ارسال داده بدون فریز شدن مدار (تایمر Non-blocking)

استفاده از دستور delay() در برنامه‌نویسی اینترنت اشیا یک اشتباه بزرگ است، زیرا کل پردازنده را قفل می‌کند و دکمه‌ها دیگر کار نخواهند کرد! برای حل این مشکل، از تایمرهای غیرمسدودکننده (Non-blocking) با تابع millis() استفاده می‌کنیم تا خواندن دما هر ۶۰ ثانیه انجام شود و در عین حال، دستورات کلیدها بدون هیچ تاخیری اجرا شوند:

if (now - lastMsgTime > 60000) {
  lastMsgTime = now;
  mqtt.publish((String(USER_API_KEY) + "/sensors/s1").c_str(), String(realTemp).c_str(), true);
}

۵. سیگنال اعلام حضور برد در شبکه (Heartbeat)

برای اینکه سایت متوجه شود برد شما روشن و به اینترنت وصل است، برد هر ۲۰ ثانیه یک پکت اعلام حضور (Ping) با متن online به سرور می‌فرستد. در صورت خاموش شدن برد یا قطع وای‌فای، سرور مای الکترو بعد از ۳۵ ثانیه متوجه آفلاین شدن فیزیکی دستگاه می‌شود:

if (now - lastHeartbeatTime > 20000) {
  lastHeartbeatTime = now;
  String willTopic = String(USER_API_KEY) + "/status";
  mqtt.publish(willTopic.c_str(), "online", true);
}

چالش توسعه پروژه (تمرین برای شما)

حالا که با این مفاهیم آشنا شدید، می‌توانید کدهای بالا را گسترش دهید:

  • کنترل خودکار دما (ترموستات): یک شرط بنویسید که اگر دمای سنسور از ۳۰ درجه بیشتر شد، رله ۱ به طور خودکار روشن شود و وضعیت جدید را به سایت مخابره کند تا کلید در پنل سبز شود.
  • راه‌اندازی ریسه رنگی: با اتصال پایه‌های خروجی به ماژول نوری RGB و استخراج کد رنگ‌های هگز دریافتی در کالبک، یک رقص نور بسازید.
بخش وب‌سایت

در تب شخصی‌سازی داشبورد وب، ۸ بخش قدرتمند در اختیار شماست. برای مشاهده توضیحات کامل، روی هر کدام کلیک کنید:

۱. تب‌های اتاق‌ها

برای نظم‌دهی بهتر، دستگاه‌های خود را در بخش‌های مختلف دسته‌بندی کنید.

۲. کلیدهای خروجی

دکمه‌های هوشمندی برای کنترل رله‌ها، لامپ‌ها و پمپ‌ها.

۳. سنسورهای مقادیر

داده‌های عددی را با گرافیک‌های مختلف (گیج، نمودار) نمایش دهید.

۴. وضعیت دیجیتال

خواندن سنسورهای دیجیتال (مثل سنسور تشخیص حرکت یا مگنت).

۵. ماژول نورپردازی

امکان کنترل دقیق رنگ ریسه‌های RGB با انتخابگر حرفه‌ای.

۶. پتانسیومتر خطی

ولوم نرم‌افزاری برای تنظیم مقادیر پیوسته (مثلاً ۰ تا ۱۰۰).

۷. مانیتور سریال

دیباگ از راه دور و بدون نیاز به اتصال کابل USB.

۸. استودیو چیدمان

گرفتن و رها کردن (Drag & Drop) ویجت‌ها و ساخت داشبورد اختصاصی.