اینترنت اشیا IOT برد ESP8266

ساخت پلتفرم IoT اختصاصی کنترل وسایل برقی بر پایه برد ESP8266 – بخش دوم

simple-iot-platform-with-esp8266-and-cloud-server-2-digispark
نوشته شده توسط معین صابری

در قسمت پیشین، به طراحی یک وب سرویس ساده جهت دریافت داه و ارسال فرمان و پیام به قسمت سخت افزاری برای کنترل وسایل برقی پرداختیم. در طراحی یک پلتفرم اینترنت اشیا لایه سخت افزاری، یکی از مهم ترین لایه‌ها محسوب می‌شود. به طور کلی، لایه سخت افزاری را می توان به سه بخش مهم زیر، تقسیم بندی نمود:

۱-واحد سنسورها و المان های فرمان پذیر (sensors and actuators)

۲- واحد پردازنده مرکزی(mcu)

۳-واحد ارسال و دریافت داده ها

در این آموزش، در لایه سخت افزاری، هر سه تقسیم بندی فوق را برای کنترل وسایل برقی در مدار، با هم بررسی خواهیم کرد. برای قسمت سنسورها و المان ها، از یکسنسور دمای ds18b20 استفاده خواهیم کرد. همچنین، در قسمت المان های کنترل شونده، به کمک رله، یک لامپ را کنترل خواهیم نمود. از طرفی دیگر، لایه سخت افزاری مورد بحث دارای نمایشگری است که قادر است پیام های متنی ارسال شده از سوی کاربر را که از طریق پلتفرم ابری ارسال شده است، به نمایش درآورد. در قسمت پردازنده مرکزی، چنانکه پیشتر بیان گردید، از ماژول وای فایesp8266 سری ۱۲، به عنوان مثال esp8266-12e و یا esp8266-12f که قابلیت برنامه ریزی نیز دارد، می توان استفاده نمود. در صورت عدم دسترسی به این ماژول ها، می توانید از برد nodemcu، با مد نظر گرفتن مسایل مربوط به تغذیه و پروگرام، استفاده نمایید. همچنین، به کمک همین ماژول، می توانیم به یک مودم که قابلیت اتصال به شبکه اینترنت را داراست، متصل شده و به ارسال و دریافت داده با پلتفرم خود، بپردازیم. به عبارت دیگر، به کمک اینترنت و بدون محدودیت مکانی، وضعیت لامپ را کنترل نموده و دمای محیط را دریافت خواهیم نمود. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.

 


شماتیک لایه سخت افزاری


همانطور که مطلع هستید، ماژول esp8266 به کمک محیط برنامه نویسی آردویینو و یا به عبارتی دیگر، به کمک زبان آردوینو، قابلیت برنامه ریزی دارد. همچنین، تقریبا تمامی کتابخانه‌هایی که برای سنسورها و ماژول‌های آردوینو با هسته میکروکنترلر avr طراحی شده است، با توجه به معماری متفاوت ماژول‌های esp8266 که از یک پردازنده ۳۲ بیتی بهره می‌برند، قابل استفاده است. در اینجا، ما به سادگی و بدون نیاز به تغییری، سنسوردمای ds18b20 و نمایشگر oled با رابط i2c خود را به ماژول متصل نمودیم. همچنین، جهت کنترل وسایل برقی، از یک ماژول رله استفاده نموده‌ایم. در پایان، برای تغذیه سیستم، از یک آداپتور ۵ ولت ۸۰۰ میلی آمپر استفاده می‌کنیم. به کمک یک ماژول کاهنده lm2596 ، ولتاژ ۳٫۵۴ را برای سیستم، تامین نموده‌ایم. در زیر، نمایی از شماتیک اتصال قطعات را مشاهده می‌نمایید.

 


نحوه اتصالات مدار


در قسمت نمایشگر،  اتصالات به شرح زیر است:

GND->GND

VCC->3.34

SCL->GPIO5

SDA->GPIO4

سنسور دما DS18B20 به شرح زیر، به سیستم متصل شده است.

GND->GND

VCC->3.54

DATA->GPIO14

در اتصال سنسور دما، دقت نظر داشته باشید که پایه دیتای آن، می بایست به کمک یک مقاومت ۴٫۷ کیلو، پول آپ(اتصال پایه دیتا با یک مقاومت ۴٫۷ به تغذیه ۳٫۵۴) شود. ماژول رله نیز به ترتیب زیر، به ماژول esp8266 متصل شده است.

GND->GND

VCC->3.54

IN->GPIO12

هشدار: درصورتیکه آشنایی کافی با سیم کشی و برق ۲۲۰ ولت ندارید، این قسمت را حتما زیر نظر یک آگاه به امر، انجام دهید:

مطابق تصویر درج شده در شماتیک، پس از قرارگیری لامپ در سرپیچ و سیم کشی آن، یک سیم از سرپیج لامپ را به یک سیم از برق ۲۲۰ متصل نمایید. سپس سیم دیگر برق ۲۲۰ را به پایه com ماژول رله و سیم دیگر لامپ را به پایه nc ماژول رله متصل نمایید. توجه داشته باشید که در اینجا، لامپ مورد استفاده، یک لامپ ۱۰۰ وات رشته ای است. مجددا تاکید می گردد که در این بخش، حفظ ایمنی و دقت، ضروری بوده و در صورت عدم آشنایی کافی با نکات مربوط به برق ۲۲۰ ولت شهری، حتما از یک  فرد خبره کمک بگیرید. بدیهی است که مسئولیت عدم رعایت نکات فنی و ایمنی، بر عهده شخص خاطی خواهد بود.

 


کدهای ماژول Esp8266


در این قسمت، کدهای ماژول esp8266 را برای کنترل وسایل برقی مشاهده می‌نمایید. همانطور که پیشتر اعلام شد، ماژول esp8266 این توانایی را دارد که علاوه بر برقراری ارتباط بی سیم در استاندارد wifi، به اجرای برنامه نیز بپردازد. همچنین، این ماژول این قبلیت رادارد تا کدهای زبان آردوینو را به سادگی و بدون تغییر در ساختار، به اجرا درآورد. برای پروگرام کردن این ماژول، ضوابط خاصی در نظر است که چنانچه با آن آشنایی ندارید، به پستی که همکارم در این زمینه منتشر کرده است، توجه نمایید. آموزش آپلود کدها روی ماژول وای فای با تراشه ESP8266 نسخه ۱۲X در ادامه، کدهای ماژول esp8266 را روی برد آپلود کنید. چنانچه روش آپلود این کدها را نمیدانید به آموزشی که در خط بالا لینک شده است، مراجعه کنید.

 

جهت دسترسی به این بخش، اشتراک اسپارکر پلاس تهیه کنید.

 

 


تحلیل کدهای ماژول Esp8266


در قسمت برنامه سخت افزار، روال کلی به این صورت است که ابتدا ماژول در تلاش است تا برای کنترل وسایل برقی به یک مودم متصل شود. پس از آماده سازی باس سخت افزاری i2c برای نمایشگر و باس یک سیمه جهت دریافت داده های سنسور ds18b20، وارد حلقه اصلی برنامه و یا همان loop می شویم. در این قسمت ابتدا با درخواست داده از سنسور، آماده دریافت داده از سنسور می شویم. پس از آن، می بایست به ارسال داده به سرور و دریافت جواب از سرور که بیانگر پیام متنی و وضعیت رله است بپردازیم. در این قسمت، ابتدا یک شی از کتابخانه HTTPClient  می سازیم. سپس به کمک تابع begin، آدرس url به همراه فایلی که قرار است داده ها را به آن ارسال نماییم(همان برنامه سمت سرور که داده دریافتی یا همان دما را دریافت و ذخیره می نمود و سپس وضعیت رله و پیام ومتنی را در جواب، پاسخ می داد). در گامل بعدی، از آنجاییکه می بایست داده ها تحت متد post ارسال شوند، از تابع addHeader استفاده خواهیم نمود که هدرهای مربوط به متد post در ورودی این تابع قرار می گیرد. برای اطلاع از جزییات بیشتر، به جستجوی در رابطه با فرمت متد post، در سطح اینترنت بپردازید. در قدم بعدی، به کمک تابع post، داده ای که قصد ارسال آن را داریم، به سرور ارسال می نماییم. نکته بسیار مهم تابع post، ورودی آن است. از آنجاییکه که ما قصد ارسال داده، تحت متد post را داریم، می بایست داده خود را مطابق فرمت این متد، یعنی به شکل زیر، ارسال نماییم:

field1=value1&field2=value2

بنابراین، از آنجایی که در سمت سرور، دیتای دریافتی می بایست درون متغیری به نام tmp قرار گیرد، میبایست داده خود را درون این متغیر ذخیره نماییم. به عبارت دیگر، داده خود را میبایست به صورت زیر، به سرور ارسال نماییم:

tmp=25

بدین ترتیب، ابتدا متغیر از نوع رشته، به نام tmp تعریف نمودیم و در ابتدا، عبارت “tmp” را در آن قرار می دهیم. در ادامه، عدد خوانده شده از سنسور را به رشته تبدیل نموده به متغیر tmp، اضافه می نماییم.

 


دریافت فرمان رله و پیام متنی از سرور


در این قسمت، به بررسی بخش مهمی از پروژه، یعنی دریافت فرمان رله و پیام متنی از سرور، می پردازیم. همانطور که در بخش طراحی پلتفرم ابری مشاهده نمودیم، یکی از وظایف صفحه data_st.php پس از دیافت و ذخیره سازی دما، ارسال وضعیت رله و پیام متنی به ماژول بود. فرمت ارسالی داده هم به صورت کاراکتر نخست وضعیت رله، شامل ۰ برای خاموش و یک برای روشن و باقی پیام متنی، تعیین گردید. در این قسمت، به کمک تابع getString، داده مورد نظر خود را از سرور، دریافت نموده و در متغیر payload ذخیره می نماییم. همانطور که پیشتر گفته شد، کاراکتر نخست این رشته بیانگر وضعیت رله است که به کمک تابع charAt مقدار آن را خوانده و با توجه به وضعیت آن، وضعیت رله تعیین می گردد.

 

درگام بعدی، نوبت به دریافت پیام متنی می رسد. در این قسمت، با توجه به اینکه پیام متنی از کاراکتر اول به بعد شروع میگردد، به کمک تابع substring، متن را از داده دریافتی استخراج نموده و سپس به کمک تابع u8g2.print، آن را در نمایشگر oled، به نمایش در خواهیم آورد.

 

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

 

درباره نویسنده

معین صابری

کارشناسی ارشد رشته معماری سیستم های کامپیوتری

مالي که ز تو کس نستاند، علم است
حرزي که تو را به حق رساند، علم است
جز علم طلب مکن تو اندر عالم
چيزي که تو را ز غم رهاند، علم است
(شیخ بهایی)

تبادل نظر و رفع عیب با ثبت دیدگاه

۲ دیدگاه

  • سلام میشه راه اندازی یه پروژه با esp انجام بدید که رو یه سرور واقعی انجام شه…مثلا به از هر جا به اون ای پی متصل بشیم و چراغ خاموش روشن کنیم

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