برد ESP8266

ارسال دما از یک ESP به ESP دیگر و نمایش بر روی سون سگمنت

send-temperature-data-with-esp8266-and-segment-display-digispark
نوشته شده توسط معین صابری

ماژول های ESP8266 یکی از پرکاربردترین ابزارها جهت انتقال بی سیم داده به شمار می روند. به کمک این ماژول ها می توانید ضمن اتصال به اینترنت، دیتا را در سطح وب تبادل نمایید. در کنار این، ماژول ها قابلیت تبادل داده به صورت محلی(LOCAL) را دارند. هم اکنون که این پروژه در حال نگارش است، مجموعه آموزش های راه اندازی و کار با ماژول ESP8266 بر روی دیجی اسپارک در حال انتشار است که با کلیک بر روی این لینک، می توانید این مجموعه آموزش را دنبال کنید. در این آموزش ما به تبادل داده به صورت بی سیم بین دو ماژول ESP می پردازیم. در این پروژه، یک ماژول ESP اطلاعات سنسور دمای DHT11 که شامل دما و رطوبت است را به ماژول ESP دیگر ارسال می کند. ماژول ESP گیرنده ضمن دریافت داده ها و نمایش بر روی سریال مانیتور، آن ها را نیز بر روی نمایشگر سون سگمنت به نمایش درخواهد آورد.  در ادامه این آموزش، با مرجع تخصصی ESP8266 به زبان فارسی، دیجی اسپارک، همراه باشید.

 


ماژول ESP8266


ماژول وای فای ESP8266، یک چیپ ارزان قیمت با قابلیت برقراری ارتباط وای فای است. به کمک این ماژول می توانید یک نقطه دسترسی(Access Point) ساخته و یا اینکه آن را به مد station برده تا به دیگر مودم های وای فای متصل سازید. همچنین این ماژول می تواند از طریق اتصال به مودم وای فای، به شبکه اینترنت متصل شده و به ارسال و دریافت داده بپردازد. یکی دیگر از قابلیت های فوق العاده ماژول های ESP8266، برنامه نویسی آن به کمک آردویینو است. به عبارت دیگر، این ماژول علاوه بر اینکه می تواند قابلیت اتصال بیسیم را فراهم کند، می تواند همانند یک برد آردویینو، برنامه های آردویینو را به سادگی اجرا کند. از طرفی، وجود سیستم عامل FREERTOS سبب می شود که بدون نگرانی از کند شدن بخش شبکه، برنامه های خود را به اجرا درآورید.

پروگرام کردن برد ESP8266 - دیجی اسپارک

 

در این پروژه ما از دو ماژول ESP جهت تبادل داده استفاده می کنیم. یک ماژول به عنوان فرستنده عمل کرده و دیتا را از سنسور دما دریافت می کند. پس از دریافت دیتا، آن را به ماژول گیرنده ارسال می کند. در سمت گیرنده نیز با دریافت داده ها، آن ها را بر روی نمایشگر سگمنت نمایش خواهیم داد. در این پروژه، یک ماژول در حالت ایستگاهی(STATION) و ماژول دیگر در مد نقطه دسترسی(AP) قرار می گیرد. در ادامه به شرح هر یک از این مد ها می پردازیم.

 


مد AP در ماژول ESP


مد نقطه دسترسی یکی از مهم ترین حالت های کاری ماژول ESP8266 است. این مد که از این به بعد آن را AP، مخفف Access Point، می نامیم ماژول ESP8266 را همانند یک مودم تعریف می کند. در این مد می توانید با تعیین نام وای فای(SSID) و کلمه عبور برای ماژول، سایر دستگاه ها نظیر تلفن همراه، لپ تاپ و دیگر ماژول های ESP8266 را به یک ماژول متصل کنید. در این حالت ماژول که در حالت AP قرار گرفته، با اتصال هر دستگاه، یک آی پی به آن تخصیص می دهد.

مد AP در ماژول ESP - دیجی اسپارک

 

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

 


تعریف مد کاری ایستگاهی STATION


مد کاری ایستگاهی که از این به بعد آن را STA می نامیم، یکی از مد های کاری اصلی در ماژول ESP8266 است. شما بارها با این مد کار کرده اید. دقیقا زمانیکه تلفن همراه خود را به مودم خانگی متصل می کنید، گوشی در حالت STA جهت دریافت آی پی از مودم قرار گرفته است. ماژول ESP8266 نیز قابلیت اتصال به مودم های خانگی و حتی تلفن همراه در حالت نقطه دسترسی(Access Point) را دارد. با اتصال به این دستگاه ها، ماژول آی پی دریافت کرده و می تواند وارد شبکه اینترنت شود. از طرفی دیگر، با ایجاد یک شبکه محلی، این ماژول قادر به اتصال به نقطه دسترسی و دریافت آی پی در شبکه محلی خواهد بود.

تعریف مد کاری ایستگاهی STATION - دیجی اسپارک

 

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

 


مد سرور در ماژول ESP


ارتباط در شبکه اینترنت، چه به صورت محلی LOCAL و چه به صورت توزیع شده(در بستر اینترنت) به صورت مد کلاینت/سرور اجرا می گردد. در این مد، کلاینت دستگاهی است که به سرور متصل شده و درخواست های خود را به سرور ارسال می کند. سرور با دریافت درخواست های کلاینت، آن ها را اجرا می کند.

مد سرور در ماژول ESP - دیجی اسپارک

 

در این پروژه کلاینت قسمت ارسال کننده و سرور قسمت گیرنده است. به عبارت دیگر، ماژول در مد STA کلاینت و ماژول در مد AP به عنوان سرور تعریف می گردد. در نظر داشته باشید که این روال می تواند بر عکس بوده و سرور بر روی مد STA و کلاینت بر روی مد AP هم تعریف شود. مفهوم کلاینت و سرور، مفهومی جدا از AP و STA است.

 


سنسور دما DHT11


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

محدوده اندازه گیری  دما: ۰ الی ۵۰ درجه سانتی گراد با دو درجه خطا

محدوده اندازه گیری رطوبت:  ۲۰ الی ۸۰ درصد با ۵ درصد خطا

محدوده ولتاژ کاری: ۳ الی ۵ ولت

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

سنسور دما رطوبت DHT11 در برد هود آشپزخانه - دیجی اسپارک

 


نمایشگر سون سگمنت TM1637


در طراحی سیستم های مختلف همواره نمایشگرها نقشی اساسی برای تعامل با کاربر بازی می کنند. نمایشگر ها در انواع مختلف کاراکتری، گرافیکی، TFT و سون سگمنتی وجود دارند. از لحاظ اقتصادی، نمایشگرهای سگمنت جزو مناسب ترین نمایشگرها در پروژه ها به شمار می روند. اما یکی از مشکلات این نمایشگرها تعداد زیاد پایه جهت راه اندازی است. این موضوع برای استفاده در ماژول های ESP با تعداد محدود پایه های GPIO، امری چالش برانگیز خواهد بود. این در حالیست که ماژول TM1637 برای راه اندازی تنها نیاز به دو پایه داشته که از این بابت به سادگی با ماژول ESP8266 راه اندازی نیز، می شود.

ماژول نمایشگر سگمنت TM1637 و برد آردوینو - دیجی اسپارک

 

ماژول نمایشگر سون سگمنت TM1637 دارای ۴ نمایشگر(۴دیجیت) جهت نمایش داده هاست.این نمایشگر از پروتکل I2C جهت ارتباط با میکروکنترلرها استفاده می کند. راه اندازی و کار با این نمایشگر با بردهای آردوینو بسیار ساده است. از آنجاییکه برای این ماژول کتابخانه آردوینو توسعه یافته است، لذا شما می توانید به سادگی از این نمایشگر استفاده نمایید. در این پروژه  دما و رطوبت دریافتی از سوی فرستنده را بر روی این نمایشگر نمایش خواهیم داد. در این پروژه، دو رقم اول دما و دو رقم دوم رطوبت محیط را نمایش می دهد.

 


شماتیک و اتصالات پروژه


در این قسمت به بررسی شماتیک پروژه در قسمت های فرستنده و گیرنده می پردازیم. در ابتدا، شماتیک قسمت گیرنده مطابق تصویر زیر بسته می شود.

شماتیک پروژه ارسال دما با بردهای ESP8266 - دیجی اسپارک

 

مطابق تصویر فوق،  اتصالات را به صورت زیر بین ماژول ESP8266 و ماژول TM1637 انجام دهید.

TM1637 ESP8266
VCC VCC
GND GND
۴GPIO CLK
۵GPIO DIO

 

در ادامه، به شرح اتصالات در قسمت فرستنده می پردازیم. به همین منظور ابتدا به تصویر زیر توجه نمایید.

اتصال ماژول DTH11 به برد ESP8266 - دیجی اسپارک

 

مطابق تصویر فوق، اتصالات بین سنسور دما DHT11 و ماژول ESP به شرح زیر برقرار می گردد.

ESP8266 DHT11
VCC VCC
GND GND
GPIO12 SIGNAL

 


کدهای پروژه تبادل بی سیم داده بین دو ESP


در این قسمت کدهای دو بخش فرستنده و گیرنده را مشاهده می کنید. در ابتدا کد زیر مربوط به قسمت فرستنده است.

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندس‌های دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید.

 

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

 


اجرای پروژه


در این قسمت به اجرای پروژه می پردازیم. در این پروژه داده های سنسور دمای DHT11 از یک ماژول ESP8266، به ماژول ESP8266 دیگر ارسال می شود. در سمت گیرنده، پس از دریافت داده ها، مقادیر دما و رطوبت بر روی نمایشگر نمایش داده می شوند. بر روی نمایشگر، دو رقم سمت چپ مربوط به دما به سانتی گراد و دو رقم سمت راست مربوط به رطوبت(به درصد) هستند.

اتصالات پروژه ارسال دما با بردهای ESP8266 - دیجی اسپارک

 

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

نمایش اطلاعات در سریال مانیتور آردوینو - دیجی اسپارک

 


تحلیل کدهای پروژه


در این قسمت به تحلیل و بررسی کدهای پروژه تبادل بی سیم داده بین دو ESP می پردازیم. توجه داشته باشید که درون کدهای برنامه به ازای هر خط توضیح(کامنت) درج شده، اما در این جا به طور مختصر روال کار را بررسی می کنیم. در سمت گیرنده، به کمک دستور زیر ماژول را در مد نقطه دسترسی قرار می دهیم.

 

محدودیت در دسترسی کامل به این مجموعه آموزش

 

دسترسی کامل به آموزش برای اعضای دیجی اسپارک امکان پذیر است. بخش اصلی آموزش شامل سورس کدهای توسعه داده شده توسط مهندس‌های دیجی اسپارک است. به همین دلیل این آموزش خاص و یکتاست. برای استفاده از آن بایستی عضویت تهیه کنید. تبادل نظر با کاربران و پرسش سوال رایگان است و میتوانید از بخش نظرات همین آموزش اقدام کنید.

 


لوازم مورد نیاز


 

  1. مبدل سریال به USB
  2. ماژول  ESP8266-12E  (دوعدد)
  3. ماژول مبدل SMD به DIP
  4. سنسور دمای DHT11
  5. ماژول نمایشگر سون سگمنت TM1637

جمع بندی


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

 

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

 

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

معین صابری

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

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

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

۳۲ دیدگاه

  • سلام مهندس
    البته اگر که چند تا سنسور را به چند تا esp متصل و به عنوان چند فرستنده دما درنظر می‌گرفتیم جالب میشد
    و دما مثلاً هر ۴ فرستنده دما را روی یک نمایشگر oled نشان می‌دادیم

  • سلام مهندس
    اگه امکان داره پروژه ساخت دانگل وایفای را با ماژول node mcu بزارید چون دانگل های وای‌فای خیلی گرون هستن و بنظرم پروژه می‌تونه کاربردی باشه

    • سلام
      باید این مورد را بررسی کنم که آیا امکان پذیر هست یا خیر. ولی ایده جالبیست. حتما روی آن کار می کنم.

  • سلام ممنون از مطالب بی نظیرتون
    آیا میشه این پروژه را با nodemcu هم طراحی کرد که دیگر نیازی به مبدل ها نداشته باشیم؟
    و اینکه تا چند متر تبادل اطلاعات انجام میشه و آیا دیوار ارتباط را مختل می کند یا خیر؟

    • سلام و ممنونم از شما
      بله این پروژه کاملا باnodemcu سازگار هست. در فضای آزاد بدون انتن تا حدود ۱۰۰ متر، در فضای ساختمانی که چک کردم، تا دو طبقه بدون انتن پاسخ گرفتم

  • سلام وقتتون بخیر
    ضمن تشکر از زحمات شما
    اگر از برد node mcu استفاده بشه دیگر نیازی به مبدل ها هست؟
    و اینکه آیا محدودیت دفعات پروگرمینگ داره یا مثل آردویینو بینهایت بار میشه پروگرمش کرد؟

    • سلام و متشکرم از لطف شما
      خیر روی برد NODEMCU مبدل سریال به USB قرار دارد.
      تعداد دفعات پروگرامینگ نیز ندارد، مثل اردوینو است. البته توجه داشته باشید که کلیه میکروکنترلرها نظیر همین NODEMCU و ARDUINO و کلا هر میکروکنترلر دیگری محدودیت در دفعات پروگرامینگ دارند. اگر اشتباه نکنم، در حدود ۱۰ هزار دفعه

    • سلام
      خیر، نمی توان گفت که روشی نسبت به روش دیگر مزیتی دارد. هر روش بسته به پروژه مد نظر استفاده می شود. اما در این روش طبق استاندارد شبکه TCP/IP پیش رفته ایم. در این شبکه داده ها از امنیت بالاتری برخوردار هستند.

  • سلام مجدد
    خسته نباشید
    ببخشید من برای این پروژه میخوام از node mcu و oled و ماژول dht11 استفاده کنم .
    آیا مقاومت نیازه یا خیر ؟
    و اگر بخوام منبع تغذیه بگیرم باید چه نوعیشو بگیرم و به کدام پایه وصل میشه ؟ پایه Vin؟
    و اینکه بخوام ولتاژ مورد نیاز سنسور و نمایشگر را از برد تامین کنم تاثیری در عدد ولتاژ منبع تغذیه ام داره؟

    • سلام
      برای اطمینان می توانید از مقاومت برای اتصال DHT استفاده کنید
      از یک منبع تغذیه ۵ ولتی استفاده کنید. بله باید این منبع به پایه VIN متصل گردد. در زیر لینک آداپتور را برای شما قرار می دهم:
      لینک آداپتور ۵ ولت، کلیک کنید
      لینک فیش آداپتور، کلیک کنید
      خیر، تغذیه سنسور و نمایشگر ارتباطی به ولتاژ تغذیه ندارد، فقط از آداپتور ۵ ولت استفاده کنید.

      • مقاومت چند اهم ؟
        منظورم از منبع تغذیه باتری بود که تحقیق کردم و میخوام باتری لیتیوم کد ۴۲۱۱۲ رو بگیرم ، آیا باتری مناسبیه برای nodemcu یا خیر؟
        بعد آیا میشود از طرفی با وصل کردن باتری به Vin برد nodemcu و از طرف دیگر با وصل کردن برد به کامپیوتر باتری رو شارژ کرد ؟
        ممنون که وقت می زارید و پاسخ می دهید.

        • مقاومت ۴٫۷ کیلو اهم مناسب هست.
          اتصال این باتری به nodemcu باید تست شود. ولی به نظر می رسد که مشکلی نباشد چراکه روی برد NODEMCU رگولاتور ۳٫۳ ولت قرار گرفته است. اما از طرف دیگر برای شارژ باتری، حتما و باید از ماژول شارژر باتری(کد ۴۰۳۳۲) استفاده کنید.

  • سلام مهندس . با تشکر از شما .
    هنگام کامپایل کد مربوط به فرستنده در خط ۳۲ برنامه خطای زیر را داریم . علتش چیه ؟
    call to ‘HTTPClient::begin’ declared with attribute error: obsolete API, use ::begin(WiFiClient, url)

    • سلام و متشکرم از شما
      این خطا مربوط به نسخه های جدید هسته ESP8266 است. برای این مورد، لطفا ابتدا یک شی از کلاس WIFIClient به صورت زیر ایجاد کنید:
      WIFIClient wificlient
      سپس در تابع begin(خط ۳۲) به صورت زیر عمل کنید:
      begin(wificlient,url)

  • سلام وقت بخیر
    نمیدونم این صفحه با من چه مشکلی داره
    باتوجه به اینکه هم وارد حساب کاربری شدم و هم اینکه اشتراک دارم
    باز هم میگه وارد حساب کاربری بشید یا اشتراک خریداری کنید…

    لطفا مستندات این پروژه رو برای من بفرستید به ایمیلم

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

  • سلام خسته نباشید من یک شکلی دارم و یک راهنمایی –
    call to ‘HTTPClient::begin’ declared with attribute error: obsolete API, use ::begin(WiFiClient, url)
    من چگونه ایرن ارور رفع کنم – البته شما توضیح داده بودید ولی من متوجه نمیشم – مورد بعدی من سه سنسور حرارتی دارم میخواهم از طریق یک ESP فرستنده دیتا را به یک گیرنده ESP منتقل کنم و روی یک Oled اطلاعات نمایش بدهم باید چه تغییراتی ایجاد کنم . ممنونم راهنمایی بفرمایید

    • سلام
      دستورات زیر را جایگزین دستور فوق نمایید:
      WiFiClient wificlient
      client.begin(wificlient,”192.168.4.1″);
      توجه داشته باشید که در خط cleint.begin، عبارت client را مطابق کد خود تصحیح نمایید.

      • سلام جناب مهندس عزیز من متوجه دقیقا نمیشوم امکان داره شما همین چند خط دستور را ویرایش کنید جهت رفع مشکل – ارسال نمایید همینجا . من راهنمایی شمارا انجام دادم ولی نشد

          • سلام جناب مهندس شرمنده – با توجه به راهنمایی شما و تغییر کدها من روی ESP آپلود نمودم ولی متاسفانه دوباره ارتباط برقرار نمیشه لطفا راهنمایی بفرمایید

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

  • سلام قسمت گیرنده هنگام کامپایل خطا دارد.
    خدائیش نشد یه برنامه اپلود کنیم و هنگام کامپایل خطایی نگیرد
    no return statement in function returning non-void [-Werror=return-type]
    لطفا راهنمایی بفرمائید

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