
خانه هوشمندت رو خودت بساز: راهنمای جامع ESPHome + مثال عملی
انقلاب خانه هوشمند در دستان تو
خانههای هوشمند دیگر رویای آینده نیستند، اما هزینهها و پیچیدگی راهحلهای تجاری، بسیاری را از ورود به این دنیا بازمیدارد. تصور کن با چند قطعه ارزان، بدون نیاز به برنامهنویسی سنگین، بتوانی سنسورها، کلیدها و دستگاههای اختصاصی خودت را بسازی و مستقیماً به پلتفرمهایی مثل Home Assistant متصل کنی! این دقیقاً معجزه ESPHome است. در این راهنما، تو را قدم به قدم با این ابزار قدرتمند آشنا کرده و یک پروژه عملی ساده را باهم اجرا میکنیم.
فصل ۱: ESPHome چیست؟ فراتر از یک ابزار
ESPHome یک فریمورک متنباز (Open-Source) است که روی بردهای توسعه مقرونبهصرفه مانند ESP32 و ESP8266 اجرا میشود. قدرت اصلی آن در سادهسازی ارتباط بین سختافزار و نرمافزارهای خانه هوشمند (بهویژه Home Assistant) است.
چرا ESPHome انقلابی است؟
ESPHome بدون نیاز به کدنویسی پیچیده، امکان ساخت دستگاههای هوشمند را تنها با چند خط پیکربندی YAML فراهم میکند. دیگر نیازی به یادگیری C++ یا کار با Arduino نیست. یکی از بزرگترین مزایای ESPHome، یکپارچگی کامل آن با Home Assistant است؛ بهطوریکه دستگاهها بهصورت خودکار شناسایی میشوند و تنها کافی است برد را روشن کنید. همچنین قابلیتهایی مانند خواب عمیق برای صرفهجویی در مصرف انرژی و بهروزرسانی بیسیم (OTA) باعث شده کنترل کاملی روی دستگاهها داشته باشید.
از سوی دیگر، ESPHome از صدها قطعه سختافزاری مانند سنسورها، نمایشگرها، LEDها و رلهها پشتیبانی میکند و مستندات کاملی برای آنها در دسترس است. امنیت نیز در اولویت قرار دارد و ارتباطات بهصورت پیشفرض رمزنگاری میشوند. جامعه کاربران فعال، انجمنهای پشتیبان و مثالهای آمادهی بیشمار، شروع کار با ESPHome را برای هر کسی سادهتر کردهاند.
معماری ESPHome: ساده اما قدرتمند
در قلب هر پروژه ESPHome، یک برد ESP قرار دارد؛ ESP8266 برای پروژههای سادهتر و ESP32 برای نیازهای پیشرفتهتر. پیکربندی دستگاهها با یک فایل YAML انجام میشود که دقیقاً مشخص میکند چه قطعاتی به برد متصل هستند و چگونه باید عمل کنند. این روش، فرایند طراحی را بسیار ساده و قابلفهم کرده است.
پس از نگارش فایل YAML، کامپایلر ESPHome کد مخصوص برد را تولید میکند و توسط Flasher روی برد آپلود میشود. پس از آن، دستگاه میتواند از طریق API یا مستقیماً با Home Assistant ارتباط برقرار کرده و دادهها را بهصورت بیسیم ارسال یا دریافت کند. این معماری ساده در عین حال انعطافپذیر، به کاربران اجازه میدهد تا پروژههای هوشمند خود را با کمترین پیچیدگی پیادهسازی کنند.
- برد ESP: مغز الکترونیکی پروژه (ESP8266 برای پروژههای ساده، ESP32 برای نیازهای قویتر).
- فایل پیکربندی (YAML): قلب ESPHome! مشخص میکند کدام قطعات وصل شدهاند و چگونه رفتار کنند.
- کامپایلر ESPHome: کد مخصوص بردت را از فایل YAML میسازد.
- Flasher: کد کامپایل شده را روی بردت آپلود میکند.
- Home Assistant / API: ارتباط بیسیم و نمایش دادهها.
YAML چیست و چه کاربردی دارد؟
YAML یک زبان ساده و قابلفهم برای نوشتن تنظیمات برنامهها و سیستمهاست. هدف اصلی آن این است که انسانها بتوانند بهراحتی تنظیمات را بخوانند و ویرایش کنند، بدون اینکه نیاز به دانستن زبانهای برنامهنویسی پیچیده داشته باشند. برخلاف زبانهایی مثل XML یا JSON، در YAML خبری از پرانتزها و علائم اضافی نیست و ساختار دادهها تنها با استفاده از تورفتگی (فاصله) مشخص میشود.
در YAML اطلاعات به صورت «کلید و مقدار» نوشته میشوند. برای مثال، اگر بخواهید یک چراغ را در سیستم خانه هوشمند تعریف کنید، میتوانید بهراحتی مشخص کنید که چراغ به کدام پایه متصل است و چه نامی داشته باشد. به همین دلیل، YAML در ابزارهایی مانند ESPHome و Home Assistant بسیار پرکاربرد است؛ چون اجازه میدهد تنها با چند خط پیکربندی ساده، رفتار یک دستگاه یا سنسور را مشخص کرد، بدون اینکه نیازی به برنامهنویسی باشد.
این زبان در بسیاری از پروژههای مدرن بهویژه در حوزه اینترنت اشیا (IoT)، DevOps و سیستمهای خودکارسازی استفاده میشود. YAML بهدلیل خوانایی بالا و سادگی در ساختار، انتخاب محبوبی برای توسعهدهندگان و کاربران حرفهای شده است. اگر به دنبال راهی ساده برای تنظیم پروژههای هوشمند خود هستید، YAML یکی از بهترین گزینههاست.
فصل ۲: آمادهسازی (پیشنیازها)
قبل از شروع عملی، این ابزارها را آماده کن:
سختافزار:
- یک برد ESP8266 یا ESP32: (برای شروع، ESP8266 مثل NodeMCU یا D1 Mini بسیار مقرونبهصرفه و کافی است).
- کابل USB به Micro-USB: برای اتصال برد به کامپیوتر و برنامهریزی اولیه.
- یک کامپیوتر: ویندوز، مک یا لینوکس.
- اتصال به اینترنت و روتر وایفای: برد باید به شبکه وایفای تو وصل شود.
نرمافزار:
- نصب Python (3.7 یا جدیدتر): پایه اصلی ESPHome است. از سایت python.org دانلود کن.
- نصب ESPHome: بعد از نصب Python، دستور زیر را در Terminal (CMD در ویندوز) اجرا کن:
12pip install esphome - ویرایشگر متن: برای ویرایش فایلهای YAML. VS Code (با افزونه YAML) یا حتی Notepad++ گزینههای خوبی هستند.
فصل ۳: پروژه عملی گام به گام: ساخت یک چراغ هوشمند ساده (LED کنترل از راه دور)
هدف: با فشار یک دکمه در اپ Home Assistant، یک LED متصل به برد ESP8266 را روشن/خاموش کنیم.
وسایل مورد نیاز:
- برد ESP8266 (مثلاً NodeMCU V3)
- یک LED (هر رنگی)
- یک مقاومت 220 اهم تا 1 کیلواهم (برای محافظت از LED)
- سیمهای جامپر (نر-مادگی یا نر-نری)
- برد بورد (Breadboard) – اختیاری ولی توصیه میشود
مراحل سیمکشی:
- پایه بلندتر LED (آند) را با یک مقاومت به یکی از پینهای خروجی دیجیتال (GPIO) ESP وصل کن (مثلاً
D1
که معادل GPIO5 است). دقت کن پین را یادداشت کنی! - پایه کوتاهتر LED (کاتد) را به پین GND (زمین) برد ESP وصل کن.
- برد را با کابل USB به کامپیوتر وصل کن.
مراحل نرمافزاری: ساختن اولین فایل پیکربندی (YAML)
- ساخت فایل پیکربندی:
- ترمینال را باز کن.
- به دایرکتوری (پوشه) مورد نظرت برو (مثلاً
cd documents/esphome
). - دستور زیر را اجرا کن تا فایل اولیه ساخته شود (
my_first_light
نام پروژه ماست):
12esphome my_first_light.yaml wizard
- پیکربندی اولیه با ویزارد:
- اسم دستگاه (Device Name):
my-first-light
(بهتر است کوچک و با خط تیره باشد). - نام بورد (Platform):
ESP8266
را انتخاب کن. - نوع برد (Board): مدل خودت را انتخاب کن (مثلاً
nodemcuv2
). - نام شبکه وایفای (SSID) و رمز عبور (Password) را وارد کن.
- در مرحله
Advanced
، میتوانی یک رمزعبور API هم برای امنیت بیشتر تنظیم کنی (اختیاری). - ویزارد فایل
my_first_light.yaml
را میسازد.
- اسم دستگاه (Device Name):
- ویرایش فایل YAML برای اضافه کردن LED:
فایلmy_first_light.yaml
را با ویرایشگر متن باز کن. حالا باید بخش مربوط به خروجی (Output) و سوئیچ (Switch) را اضافه کنیم. محتوای فایل چیزی شبیه این خواهد بود (با تغییرات):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# نسخه ESPHome esphome: name: my-first-light platform: ESP8266 board: nodemcuv2 # تنظیمات وایفای wifi: ssid: "نام شبکه وایفای شما" password: "رمز عبور وایفای شما" # اختیاری: آدرس ثابت IP # manual_ip: # static_ip: 192.168.1.100 # gateway: 192.168.1.1 # subnet: 255.255.255.0 # فعال کردن API و کشف خودکار برای Home Assistant api: password: "یک رمز قوی برای API اینجا بگذار" # اختیاری اما توصیه میشود # فعال کردن لاگگیری در سریال logger: # فعال کردن بهروزرسانی بیسیم (OTA) ota: password: "یک رمز برای OTA اینجا بگذار" # اختیاری اما توصیه میشود # ********** اینجا بخشهای جدید را اضافه میکنیم ********** # 1. تعریف یک "خروجی" (Output) از نوع GPIO برای کنترل LED output: - platform: gpio pin: D1 # همان پینی که LED را به آن وصل کردی (مثلاً D1 معادل GPIO5) id: gpio_led # یک شناسه منحصر به فرد برای ارجاع در بخشهای بعدی # 2. تعریف یک "سوئیچ" (Switch) که از خروجی بالا استفاده میکند switch: - platform: output name: "چراغ هوشمند اتاق من" # اسمی که در Home Assistant نمایش داده میشود output: gpio_led # ارجاع به خروجی تعریف شده بالا id: my_light_switch # شناسه داخلی (اختیاری) |
output:
: این بخش تعریف میکند که یک سیگنال الکتریکی چگونه کنترل شود. ما از نوعgpio
استفاده کردیم.platform: gpio
: مشخصات پلتفرم خروجی (پین دیجیتال).pin: D1
: پین فیزیکی روی برد که LED به آن وصل است (مطمئن شو با سیمکشی تطابق دارد).id: gpio_led
: یک نام داخلی (ID) به این خروجی میدهیم تا بعداً بتوانیم به آن اشاره کنیم.
switch:
: این بخش یک کلید مجازی (سوئیچ) در ESPHome و Home Assistant ایجاد میکند که کاربر با آن تعامل دارد.platform: output
: میگوید این سوئیچ مستقیماً یک خروجی (Output) را کنترل میکند.name: "چراغ هوشمند اتاق من"
: اسم دلخواهی که در داشبورد Home Assistant نشان داده میشود.output: gpio_led
: به خروجیای که قبلاً تعریف کردیم (gpio_led
) اشاره میکند. یعنی این سوئیچ همان خروجی را روشن/خاموش میکند.id: my_light_switch
: یک شناسه داخلی برای این سوئیچ (در پروژههای پیچیدهتر کاربرد دارد).
- کامپایل و آپلود (Flash) کردن:
- ترمینال را در پوشهای که فایل YAML قرار دارد باز کن.
- دستور زیر را اجرا کن:
12esphome my_first_light.yaml run - چه اتفاقی میافتد؟
- ESPHome فایل YAML را میخواند.
- کد مخصوص برد ESP8266 را کامپایل میکند.
- از تو میپرسد که چگونه کد را روی برد آپلود کند (معمولاً از طریق پورت USB).
- پورت سریال بردت را انتخاب کن (مثلاً COM3 در ویندوز یا /dev/ttyUSB0 در لینوکس/مک).
- روند آپلود شروع میشود. چند دقیقه صبر کن تا کامل شود. در پایان، برد ریستارت میشود.
- اتصال به وایفای و کشف خودکار:
- بعد از آپلود موفق، برد ESP از کابل USB جدا میشود و میتوانی آن را به یک منبع تغذیه (مثلاً شارژر موبایل) وصل کنی.
- برد به شبکه وایفای تو متصل میشود.
- وارد داشبورد Home Assistant خود شو.
- به Settings > Devices & Services برو.
- در تب Integrations، باید یک دستگاه جدید با نام
my-first-light
بهصورت خودکار پیدا شده باشد (اگر ESPHome Integration از قبل اضافه شده باشد). - روی Configure کلیط کن و مراحل را دنبال کن (معمولاً تأیید رمز API یا کلیک روی Submit). اگر رمز API در فایل YAML گذاشته بودی، همان را وارد کن.
- لحظه جادویی: کنترل LED در Home Assistant!
- به صفحه اصلی (Overview) داشبورد Home Assistant برگرد.
- روی Edit Dashboard کلیک کن.
- Add Card را بزن.
- کارت Switch (یا Button) را انتخاب کن.
- در قسمت
Entity
، شروع به تایپ نام دستگاه (my-first-light
) یا اسم سوئیچ (چراغ هوشمند اتاق من
) کن. آن را انتخاب کن. - روی Save کلیک کن.
- حالا یک کارت سوئیچ جدید در داشبورد میبینی با نام “چراغ هوشمند اتاق من”.
- روی آن کلیک کن! باید ببینی LED متصل به برد ESP8266 روشن و خاموش میشود!
فصل ۴: فراتر از یک LED: دنیای بیانتهای ESPHome
پس از ساخت اولین دستگاه با ESPHome، حالا وارد مرحلهای میشوید که میتوانید امکانات بسیار متنوعتری را به پروژههای خود اضافه کنید. سنسورها یکی از جذابترین بخشهای این مسیر هستند. از سنسورهای سادهای مانند DHT11 و DHT22 برای اندازهگیری دما و رطوبت گرفته تا سنسورهای دقیقتری مثل BME280 که فشار هوا را هم اندازه میگیرند. همچنین میتوان از سنسورهای حرکتی (PIR)، سنسورهای گاز و دود (MQ-2/MQ-5)، نورسنجها (LDR)، دماسنجهای ضدآب (DS18B20) و حتی فاصلهسنجهای اولتراسونیک برای کاربردهای متنوع استفاده کرد. راهاندازی این سنسورها در ESPHome بسیار ساده است و معمولاً تنها با افزودن چند خط کد YAML انجام میشود.
در کنار سنسورها، میتوانید دستگاههای قدرتمندتری را نیز کنترل کنید. با استفاده از رلهها، امکان روشن و خاموش کردن لامپهای اصلی، پمپها یا وسایل پرمصرف دیگر فراهم میشود. کنترل موتورهای DC یا سروو نیز مسیر را برای ساخت پروژههایی مانند پردهبرقی یا درب گاراژ باز میکند. نوارهای LED هوشمند (مانند WS2812B) نیز با جلوههای نوری زیبا قابل پیادهسازی هستند. برای نمایش اطلاعات نیز میتوان از نمایشگرهای OLED یا LCD استفاده کرد. همچنین قابلیتهایی مانند خواب عمیق (Deep Sleep) برای کاهش مصرف انرژی و اتوماسیونهای داخلی زمانبندیشده، به شما اجازه میدهد پروژههایی کاملاً مستقل و بهینه بسازید. اگر به امکانات خاصتری نیاز دارید، حتی میتوانید کدهای سفارشی C++ بنویسید یا از وبسرور داخلی برای مشاهده وضعیت دستگاه بهره بگیرید.
- سنسورها:
- DHT11/DHT22: دما و رطوبت.
- BME280: دما، رطوبت و فشار هوا.
- PIR Sensor: تشخیص حرکت.
- MQ-2/MQ-5: تشخیص گاز و دود.
- Photoresistor (LDR): تشخیص نور محیط.
- DS18B20: دماسنج آببند (برای بیرون یا آکواریوم).
- Ultrasonic (HC-SR04): فاصلهسنج.
- افزودن سنسور معمولاً فقط نیاز به اضافه کردن یک بلاک
sensor:
در YAML و تعریف پین دارد.
- کنترلگرهای قویتر:
- رلهها: کنترل دستگاههای پرمصرف مثل لامپهای اصلی، پمپ، کولر.
- موتورهای DC/Servo: ساخت پردهبرقی، بازکن درب گاراژ ساده.
- درایور LED (مثل WS2812B): ساخت نوارهای LED RGB هوشمند با افکتهای جذاب.
- شیلدهای کاربردی: شیلد رله ۴ کاناله، شیلد موتور.
- نمایش اطلاعات:
- OLED Display: نمایش دما، رطوبت، وضعیت دستگاهها.
- LCD Character: نمایش متن ساده.
- بهینهسازی انرژی:
- Deep Sleep: خواب عمیق برای ماهها کارکرد با باتری (ایدهآل برای سنسورهای بیسیم).
- Wake on Interrupt: بیدار شدن با رویداد (مثلاً فشردن دکمه یا تشخیص حرکت).
- پیشرفتهتر:
- Custom Components: نوشتن قطعات سفارشی با C++ (اگر نیاز خاصی داشته باشی).
- Time-Based Automation: اتوماسیونهای زمانبندی شده مستقل در خود ESP (مثلاً روشن کردن LED در ساعت خاص).
- Web Server داخلی: داشتن یک صفحه وب ساده برای کنترل/مشاهده وضعیت دستگاه.
فصل ۵: نکات طلایی و عیبیابی
- مستندات عالی: https://esphome.io/ همیشه اولین مرجع تو باشد. تقریباً برای هر سنسور و پلتفرمی مثال دارد.
- کابل USB خوب: کابلهای معیوب یا فقط شارژری، بزرگترین عامل شکست در آپلود اولیه هستند!
- پینهای صحیح: مطمئن شو همیشه پین درست را در YAML استفاده میکنی. دیتاشیت بردت را چک کن.
- مقاومت برای LED: فراموش کردن مقاومت سریعاً LED را میسوزاند!
- رمزهای عبور: رمز API و OTA را در فایل YAML قرار بده و از رمزهای قوی استفاده کن.
- OTA عیبیاب: اگر بعد از اولین آپلود، OTA کار نکرد:
- مطمئن شو رمز OTA در YAML درست است.
- برد را با کابل USB دوباره فلش کن (
esphome run
). - فاصله برد از روتر را کم کن.
- کشف خودکار کار نکرد: در Home Assistant:
- مطمئن شو Integration مربوط به ESPHome فعال است.
- IP برد را در روتر پیدا کن و مستقیماً در مرورگر وارد کن
http://<IP-برد>:6053
(باید صفحه وضعیت ESPHome باز شود). - لاگهای ESPHome (دستور
esphome logs my_first_light.yaml
) و Home Assistant را چک کن.
- جامعه (Community): از انجمنهای Home Assistant و ESPHome در ردیت یا دیسکورد کمک بگیر.
نتیجهگیری: تو اکنون یک سازنده خانه هوشمند هستی!
ESPHome قدرت خلق دستگاههای سفارشی، مقرونبهصرفه و یکپارچه برای خانه هوشمند را بهطور شگفتانگیزی در دستان تو قرار میدهد. از یک چراغ ساده LED تا سیستمهای پیچیده نظارت و اتوماسیون، همه با یک هسته مشترک سادهسازی شدهاند. پروژه اولیه ما فقط نوک کوه یخ بود. حالا نوبت توست:
- آزمایش کن: LED را با یک رله عوض کن و یک لامپ واقعی را کنترل کن.
- اندازهگیری کن: یک سنسور دما/رطوبت (مثل DHT22) اضافه کن.
- بهینه کن: حالت
deep_sleep
را برای یک سنسور باتریخور امتحان کن. - اتوماسیون بساز: در Home Assistant یک اتوماسیون ایجاد کن که اگر دمای اتاق از ۲۵ درجه بیشتر شد، چراغ قرمز LED روشن شود!
- کاوش کن: مستندات ESPHome را ورق بزن و با دنیای قطعات پشتیبانیشده شگفتزده شو.
خانه هوشمند رویایی تو، دیگر یک رویا نیست. با ESPHome و کمی کنجکاوی، آن را دقیقاً همانطور که میخواهی، از صفر میسازی!