فهرست مطالب:

هاب خانه هوشمند ESP32: 11 مرحله
هاب خانه هوشمند ESP32: 11 مرحله

تصویری: هاب خانه هوشمند ESP32: 11 مرحله

تصویری: هاب خانه هوشمند ESP32: 11 مرحله
تصویری: آموزش هوشمند سازی خانه (اینترنت اشیا) || (IOT) Smart Home with using NodeMCU ESP8266 2024, نوامبر
Anonim
هاب خانه هوشمند ESP32
هاب خانه هوشمند ESP32
هاب خانه هوشمند ESP32
هاب خانه هوشمند ESP32
هاب خانه هوشمند ESP32
هاب خانه هوشمند ESP32
هاب خانه هوشمند ESP32
هاب خانه هوشمند ESP32

ایجاد سیستمی که بتواند حجم زیادی از داده های حسگر را اداره کند ، چندین خروجی داشته باشد و به اینترنت یا شبکه محلی متصل شود ، زمان زیادی می طلبد و تلاش زیادی می طلبد. اغلب اوقات ، افرادی که مایل به ایجاد شبکه های هوشمند خانگی خود هستند ، قادر به یافتن و جمع آوری اجزای سفارشی در یک سیستم بزرگتر هستند. به همین دلیل من می خواستم یک پلت فرم مدولار و غنی از ویژگی ها بسازم که ساخت سنسورها و خروجی های متصل به اینترنت اشیا را آسان کند.

با تشکر از DFRobot و PCBGOGO.com برای حمایت از این پروژه!

برای کسب اطلاعات بیشتر ، به repo Github مراجعه کنید:

تدارکات

  • DFRobot ESP32 FireBetetle

    www.dfrobot.com/product-1590.html

  • سنسور DHT22

    www.dfrobot.com/product-1102.html

  • سنسور نور و حرکت APDS9960

    www.dfrobot.com/product-1361.html

  • ماژول LCD I2C 20x4

    www.dfrobot.com/product-590.html

  • نوار LED RGB آنالوگ

    www.dfrobot.com/product-1829.html

  • DRV8825 درایورهای موتور پله ای
  • کارت خوان SD
  • استپر موتور NEMA17

مرحله 1: ویژگی ها

امکانات
امکانات
امکانات
امکانات
امکانات
امکانات

ویژگی اصلی این برد یک برد توسعه ESP32 FireBeetle است که تمام ارتباطات ، خوانش سنسورها و خروجی ها را کنترل می کند. دو درایور موتور پله ای وجود دارد که دو موتور پله ای دوقطبی را کنترل می کنند.

گذرگاه I2C نیز برای استفاده با قطعاتی مانند APDS9960 یا LCD شکسته شده است. برای خواندن دما ، پین هایی برای اتصال به سنسور DHT22 و همچنین مقاومت در برابر عکس برای خواندن سطوح نور محیط وجود دارد.

پشتیبانی از نوار نور آنالوگ روی برد ، که دارای سه MOSFET برای هدایت چراغ های LED است.

مرحله 2: PCB

PCB
PCB
PCB
PCB
PCB
PCB
PCB
PCB

من فرآیند طراحی PCB را با ایجاد یک طرح کلی در Eagle آغاز کردم. از آنجا که نتوانستم کتابخانه ESP32 FireBeetle را پیدا کنم ، فقط از دو سرآیند پین 1x18 پین استفاده کردم. سپس ، من یک مدار مدیریت قدرت ایجاد کردم که می توانست 12 ولت را از طریق جک بشکه DC پذیرفته و آن را برای تغذیه سنسورها و ESP32 به 5 ولت تبدیل کند.

پس از اتمام طرح کلی ، به طراحی خود PCB روی آوردم.

من می دانستم که شمع بشکه DC باید در قسمت جلویی صفحه باشد و خازن های صاف کننده منبع تغذیه 100uF باید به ورودی های قدرت راننده پله ای نزدیک باشد. بعد از اینکه همه چیز مشخص شد ، شروع به تعیین مسیر کردم.

در حالی که Oshpark PCB های با کیفیت عالی می سازد ، قیمت آنها بسیار بالا است. خوشبختانه ، PCBGOGO.com همچنین PCB های عالی با قیمت مناسب تولید می کند. من توانستم ده PCB را فقط با 5 دلار خریداری کنم ، به جای پرداخت 52 دلار فقط برای سه تخته از Oshpark.com.

مرحله 3: مونتاژ

مونتاژ
مونتاژ
مونتاژ
مونتاژ
مونتاژ
مونتاژ

به طور کلی ، مونتاژ تخته بسیار آسان بود. من با لحیم کاری اجزای نصب شده روی سطح ، و سپس اتصال کانکتور و تنظیم کننده جک بشکه شروع کردم. بعد ، من در سربرگ های پین برای اجزایی مانند درایورهای موتور و FireBeetle لحیم کردم.

پس از اتمام لحیم کاری ، با قرار دادن مولتی متر در حالت اندازه گیری مقاومت و بررسی اینکه آیا مقاومت بیش از مقدار مشخص شده است ، برد را برای اتصال کوتاه آزمایش کردم. برد از بین رفت ، بنابراین من سپس توانستم هر جزء را وصل کنم.

مرحله 4: مرور برنامه نویسی

من می خواستم کد این برد مدولار و آسان برای استفاده باشد. این به معنای داشتن چندین کلاس است که عملکردهای خاصی را اداره می کند ، به همراه یک کلاس بزرگتر که شامل عملکردهای کوچکتر است.

مرحله 5: ورودی ها

ورودی ها
ورودی ها
ورودی ها
ورودی ها
ورودی ها
ورودی ها

برای مدیریت ورودی ها ، یک کلاس به نام "Hub_Inputs" ایجاد کردم ، که به هاب خانه اجازه می دهد با APDS9960 ارتباط برقرار کند ، همراه با ایجاد و مدیریت دکمه ها و رابط های لمسی خازنی. این شامل توابع زیر است:

دکمه ایجاد کنید

دریافت کنید اگر دکمه فشار داده شده است

دریافت تعداد فشار دکمه ها

دریافت آخرین ژست

مقدار لمس خازنی را دریافت کنید

دکمه ها به عنوان یک ساختار ذخیره می شوند و دارای سه ویژگی هستند: is_pressed ، numberPresses و pin. هنگام ایجاد ، هر دکمه به یک وقفه متصل می شود. هنگامی که وقفه ایجاد می شود ، روال سرویس وقفه (ISR) از نشانگر آن دکمه (به عنوان آدرس حافظه آن در آرایه دکمه نشان داده می شود) می گذرد و تعداد فشارهای دکمه را افزایش می دهد ، به همراه به روز رسانی مقدار is_pressed Boolean.

مقادیر لمس خازنی بسیار ساده تر است. با انتقال پین لمسی به عملکرد () touchRead بازیابی می شوند.

آخرین ژست با نظرسنجی از APDS9960 و بررسی اینکه آیا ژست جدیدی شناسایی شده است ، بررسی می شود و اگر یکی از آنها تشخیص داده شد ، متغیر اشاره خصوصی را بر روی آن حرکت تنظیم کنید.

مرحله 6: خروجی ها

خروجی ها
خروجی ها
خروجی ها
خروجی ها
خروجی ها
خروجی ها

هاب خانه هوشمند دارای چندین روش برای خروج اطلاعات و تغییر چراغ است. پین هایی وجود دارد که گذرگاه I2C را از بین می برد و به کاربران اجازه می دهد تا یک LCD را وصل کنند. تا کنون ، تنها یک اندازه LCD پشتیبانی می شود: 20 * 4. با استفاده از عملکرد "hub.display_message ()" ، کاربران می توانند با عبور از یک شیء رشته ای پیام ها را روی LCD نمایش دهند.

همچنین یک سرآیند پین برای اتصال رشته ای از LED های آنالوگ وجود دارد. فراخوانی تابع "hub.set_led_strip (r، g، b)" ، رنگ نوار را تعیین می کند.

دو موتور پله ای با استفاده از یک جفت برد راننده DRV8825 حرکت می کنند. تصمیم گرفتم از کتابخانه BasicStepper برای کنترل موتور استفاده کنم. هنگامی که برد بوت می شود ، دو شیء پله ای ایجاد می شود و هر دو موتور فعال می شوند. برای حرکت هر موتور ، از تابع "hub.step_motor (motor_id، steps)" استفاده می شود ، که در آن شناسه موتور 0 یا 1 است.

مرحله 7: ورود به سیستم

ورود به سیستم
ورود به سیستم
ورود به سیستم
ورود به سیستم
ورود به سیستم
ورود به سیستم

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

برای شروع ثبت نام ، یک فایل جدید با "hub.create_log (نام فایل ، سرصفحه)" ایجاد می شود ، جایی که از سربرگ برای ایجاد یک ردیف فایل CSV که ستون ها را نشان می دهد استفاده می شود. ستون اول همیشه یک زمان بندی در ساعت ماه روز سال است: فرمت حداقل: ثانیه. برای بدست آوردن زمان ، تابع hub.log_to_file () با تابع basic_functions.get_time () زمان می گیرد. سپس ساختار زمان tm با ارجاع به تابع ورود به سیستم ، همراه با داده و نام فایل منتقل می شود.

مرحله 8: وزوز

وزوز
وزوز

اگر نمی توانید موسیقی پخش کنید ، تخته اینترنت اشیا چه فایده ای دارد؟ به همین دلیل من یک زنگ با عملکرد پخش صداها را وارد کردم. فراخوانی "hub.play_sounds (ملودی ، مدت زمان ، طول)" شروع به پخش آهنگ می کند ، با ملودی آرایه ای از فرکانس های نت ، مدت زمان به عنوان یک آرایه از مدت زمان نت ها و طول به عنوان تعداد نت ها.

مرحله 9: ادغام خارجی IoT

ادغام خارجی IoT
ادغام خارجی IoT
ادغام خارجی IoT
ادغام خارجی IoT
ادغام خارجی IoT
ادغام خارجی IoT

این هاب در حال حاضر از webhook های IFTTT پشتیبانی می کند. آنها را می توان با فراخوانی تابع Hub_IoT.publish_webhook (url ، داده ، رویداد ، کلید) یا Hub_IoT.publish_webhook (url ، داده) فعال کرد. این یک درخواست POST به آدرس داده شده با داده های پیوست شده به همراه نام رویداد در صورت لزوم ارسال می کند. برای راه اندازی یکپارچه سازی IFTTT ، ابتدا یک برنامه کاربردی جدید ایجاد کنید. سپس سرویس webhook که هنگام دریافت درخواست فعال می شود را انتخاب کنید.

در مرحله بعد ، رویداد را "high_temp" صدا کنید و آن را ذخیره کنید. سپس ، سرویس Gmail را برای قسمت "That" انتخاب کرده و گزینه "Send a email to my" را انتخاب کنید. در تنظیمات سرویس ، "درجه حرارت بالا است!" را قرار دهید. برای موضوع ، و سپس "اندازه گیری دمای {{ارزش 1}} را در {{OccurredAt}}" قرار می دهم ، که دمای اندازه گیری شده و زمان شروع رویداد را نشان می دهد.

پس از راه اندازی آن ، به سادگی آدرس webhook را که توسط IFTTT ایجاد شده است بچسبانید و "high_temp" را در قسمت رویداد قرار دهید.

مرحله 10: استفاده

استفاده
استفاده
استفاده
استفاده
استفاده
استفاده
استفاده
استفاده

برای استفاده از Smart Home Hub ، کافی است هرگونه عملکرد مورد نیاز را در setup () یا loop () فراخوانی کنید. من قبلاً نمونه ای از فراخوانی های عملکردی ، مانند چاپ زمان فعلی و فراخوانی رویداد IFTTT را قرار داده ام.

مرحله 11: برنامه های آینده

سیستم Smart Home Hub برای اتوماسیون ساده خانه و کارهای جمع آوری داده ها بسیار خوب عمل می کند. تقریباً می تواند برای هر چیزی استفاده شود ، مانند تنظیم رنگ نوار LED ، نظارت بر دمای اتاق ، بررسی روشن بودن چراغ و تعداد زیادی از پروژه های احتمالی دیگر. در آینده ، من می خواهم عملکرد را بیشتر گسترش دهم. این می تواند شامل افزودن یک وب سرور قوی تر ، میزبانی فایل محلی و حتی بلوتوث یا mqtt باشد.

توصیه شده: