الکترونیک

ESP8266 – یک پردازنده معمولی یا … ؟

نوشته شده توسط احسان

یک میکروکنترلر یک مدار مجتمع است که توانایی اجرای برنامه های مختلف و متنوعی را دارد. تنوع بسیار زیادی از میکروکنترلر ها از سازندگان مختلف (مانند STMicroelectronics، Atmel، Microchips، و … ) در بازار امروز وجود دارد. قیمت های این میکروکنترلرها همینطور رو به کاهش است. در بازار علاقه مندان الکترونیک، “آردوینو” که از محصولات متنوع شرکت atmel در قلب خود استفاده میکند با چندین اتصال مجزا و ابزارهای متنوع توانسته دنیای الکترونیک را از حیطه مهندسان برق به سمت کاربران علاقه مند ولی با دانش کم بیاورد. البته نمی توان آنها را با کامپیوتر های خانگی مقایسه کرد. این پردازنده ها = پروسسورها بسیار ضعیف ( در مقایسه با یک پردازنده معمولی سیستم PC هزاران بار ضعیف ) با مقادیر حافظه بسیار کم و توانایی های محدود هستند. از این رو نمیتوانند جای کامپیوترهای رو میزی یا شخصی را به این زودی ها بگیرند. برای کسانی که دنبال چالش بزرگتری هستند – و پردازش سنگینتری میخواهند – بورد Raspberry Pi یک راه حل مناسب است. با قیمت باورنکردنی حدودا ۱۵۰ هزار تومان، معماری ARM و حافظه بالا ۵۰۰ مگا بایتی ( حداکثر حافظه ۱ گیگا بایت تا زمان انتشار این مقاله عرضه شده ) و استفاده از microSD برای ذخیره اطلاعات یکی از شاهکارهای مهندسان الکترونیک برای عمومی کردن این دانش است. خب من اینجا قصد ندارم راجع به Raspberry Pi و کلاس کامپیوتر های Embedded صحبت کنم. بلکه هدف اصلی پردازنده ESP8266 است که در ادامه مورد بررسی قرار می گیرد.

WiFi Serial Transceiver Module

این میکروکنترلر ها و ساختارهای آنها بسیار عالی هستند و همیشه جایی برای استفاده آنها وجود دارد. اما، یه موضوعی وجود دارد، وآن هم نت وورکینگ است ( یا مفهموم عام آن شبکه ). این قطعات قابلیت های بسیار زیادی دارند از جمله  پین های مستقیم ورودی/خروجی – GPIO – و پشتیبانی از مدل های مختلف ارتباطات SPI, I2C, UART و بیشتر، به هر حال، هیچکدام به اندازه پشتیبانی از شبکه بی سیم – Wireless Networking – پیش نرفته اند.

هیچ شکی نیست که آردوینو توجه همگان را به خود جلب کرده است. آردوینو بر مبنای چیپ های Atmel بنا گشته که سایزهای مختلفی دارند. میکروکنترلر اصلی استفاده شده در آردوینو ATmega328 است. میتوانید این میکروکنترلر را به راحتی از بازار از فروشنده های مختلف تهیه کنید یا اینکه از طریق سایت های اینترنتی اقدام به سفارش آنها کنید. قیمت کلی یک آردوینو حدود ۱۰ تا ۲۰ برابر ارزانتر از یک Raspberry PI است. البته این بخاطر قدرت پردازش و حافظه و دیگر مزایای یکی بر دیگری است. هرچند اگر شما تصمیم داشته باشید با وسائل الکترونیکی درگیر شوید و مثلا چند LED خاموش و روشن کنید یا سوئیچ ها و سنسورهای را مدیریت کنید، سپس نیاز شما توسط یک میکروکنترلر ارزان قیمت هم قابل حل شدن میشود.

بین این دو، یعنی آردوینو و Raspberry Pi به نظر میرسد تمام نیاز ها برطرف شده است. اگر اینطور باشد، این مقاله باید همین جا تمام شود! اجازه دهید مسئله اصلی را مطرح کنیم، شبکه بی سیم. داشتن یک دستگاهی که بتوانیم با آن اسکلت یک ربات رو حرکت دهیم و کنترل کنیم یا پترن های نورانی توسط LED ها درست کنیم یا حتی نویز تولید کنیم یا اطلاعات را از سنسور(ها) خوانده و وقتی دما از حدی بالاتر رفت صدای بوق تولید کنیم همه این پروژه های ساده خوبی هستند اما ما بسیار به اینترنت توجه می کنیم. کامپیوتر های ما به اینترنت متصل اند، موبایل های ما به اینترنت متصل اند، ما از سایت های پخش آنلاین فیلم برای تماشای فیلم های مورد علاقه خود استفاده میکنیم و تلویزیون های هوشمند ما همگی به اینترنت متصل اند، ما در اینترنت کارهای اجتماعی میکنیم و خیلی چیزهای دیگر که حتی شاید فکرشم را نکنیم در بستر اینترنت اتفاق می افتند. اینترنت یک چیز بسیار ابتدایی شده که اگر کسی محصولی مانند کاپیوتر یا موبایل ارائه کند که قابلیت اتصال به اینترنت را نداشته باشد به آن می خندیم و مانند یک شوخی بی مزه می ماند!

حالا تصور کنید که یک میکروکنترلر بتواند به اینترنت متصل شود چه کارهایی که نمی تواند بکند؟ این میتواند یک پردازنده با تمام قابلیت های یک آردوینو باشد و حتی بهتر از آن، که علاوه بر GPIO و پشتیبانی از پروتکل های ارتباطی مختلف، حافظه RAM و Flash خوبی هم داشته باشد، بعلاوه قابلیت جذاب اتصال به اینترنت را در خود داشته باشد تا بتواند همزمان با تمام قابلیت های معمولی یک میکروکنترلر ساده ما را به دنیای پر از عجایب اینترنت هم اتصال دهد! و آن، چیزی نیست جز ESP8266، یک پردازنده با قابلیت شبکه بی سیم داخلی! این پردازنده تمام قابلیت های اشاره شده برای میکروکنترلرها را دارد بعلاوه قابلیت WiFi و TCP/IP (Transmission Control Protocol / Internet Protocol ) در آن تعبیه شده است. جذابیت بیشتر موضوع این است که قیمت آن با یک میکروکنترلر رده متوسط در بازار برابری می کند!

ESP8266

esp8266

ESP8266 نام یک میکروکنترلر طراحی شده توسط Espressif Systems است. Espressif یک کمپانی چینی است که در شانگهای چین شکل گرفته است. ESP8266 از خود به عنوان یک راه حل برای ارتباطات WiFi یاد میکند، همچنین که تمام قابلیت های یک میکروکنترلر معمولی را به شما ارائه می دهد.

تولید انبوه این مدار مجتمع کوچک ( اندازه آن نیم سانت در نیم سانت است ) تا سال ۲۰۱۴ ( حدود ۲ سال پیش ) آغاز نشده بود که به این معنی است که در زمره پردازنده های جدید قرار دارد و در دنیای گرسنه تکنولوژی ما، جدید به معنی جذاب است. مدتی بعد از عرضه آی سی، کمپانی های واسط این آی سی ها را روی ماژول های مختلف کردند و با ماژول هایی را عرضه کردند که امروزه در بازار ایران به راحتی یافت می شوند. اگر من به شما یکی از ESP8266 های خام را بدهم که مستقیم از کارخانه خارج شده، مسلما ما به نقطه ای میرسیم که از کار با این آی سی جذاب منصرف شویم! اینها بسیار کوچک و با چشم بسیار ریز هستند که برای یک علاقه مند الکترونیک بتواند سیم ها را به آی سی متصل کند یا اینکه روی یک بورد تبدیل مونتاژ کند. خوشبختانه، ماژول های ابتدایی این آی سی در دسترس است و تفاوت قیمت چندان با خود آی سی ندارند.

بوردهای مختلفی وجود دارند، اما دو بوردی که من در اینجا قصد تمرکز روی آنها را دارم ESP-1 و ESP-12 هستند. این نکته مهم است که بدانید فقط یک ESP8266 وجود دارد و این بورد ها همگی از آن استفاده می کنند و تنها تفاوت سیم کشی و حافظه خارجی اضافه شده برای آی سی به علاوه نوع آنتن است که برای آنها در نظر گرفته شده است. از دید برنامه نویسی برای آنها، همگی یکسان هستند.

بلوغ

ESP8266 قطعه جدیدی در حوزه خود است. عرضه شده در تابستان ۲۰۱۴ و کماکان ده ها میلیون نسخه از آن در دنیا مصرف می شود. همه کس و همه چیز باید از جایی شروع شوند. یعنی بسیاری از قابلیت ها و ایده ها و توانایی های ناشناخته در این حوزه وجود دارد که نیاز با کار دارند تا کشف شده و عملی شوند. دست پایین قضیه این است که آموزش های کافی و لازم وجود ندارند، مثال ها و ویدئو هایی که برای میکروکنترلرهای معمول به وفور یافت میشوند برای ESP8266 وجود ندارند. مستندات بسیار ناقصی از آی سی در دسترس است که بسیاری سوال های اساسی را پاسخ نمی دهند و هنوز علاقه مندان در جال اکتشاف هستند!

مشخصات

ولتاژ۳٫۳ ولت
مصرف جریان۱۰ میکرو تا ۱۷۰ میلی آمپر ( تفاوت چشمگیری است! )
اتصال حافظه Flashحداکثر ۱۶ مگابایت ( ۵۱۲ کیلوبایت بصورت عادی )
پردازندهTensilica L106 32bit
سرعت پردازنده۸۰ تا ۱۶۰ مگاهرتز
حافظه RAM۳۲ کیلو + ۸۰ کیلو بایت
GPIO ها۱۷ ( با قابلیت های دیگر هم مالتی پلکس شده اند )
آنالوگ به دیجیتال ( A2D )۱ ورودی با دقت ۱ به ۱۰۲۴
پشتیبانی ۸۰۲٫۱۱b/g/n/d/e/i/k/r
حداکثر اتصلات TCP بصورت همزمان۵

این سوال که ESP8266 چه مقدار میتواند با باتری کار کند سوال جالبی است. مصرف جریان این آی سی بسیار متفاوت است. هنگامی که در حداکثر توان کار میکند، تا ۱۷۰ میلی آمپر جریان نیاز دارد، اما زمانی که در حالت خواب عمیق – Deep Sleep – قرار دارد تنها ۱۰ میکرو آمپر جریان نیاز دارد. بسیار تفاوت چشمگیری است و متقاعد کننده است که برای محاسبه میزان حدودی و نه حتی دقیق مصرف باتری باید بیشتر به نحوه عملکرد در طول زمان توجه داشته باشیم.

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

ماژول های ESP8266

آی سی های ESP8266 در پکیج های بسیار کوچک در حد ۵ میلی متر عرضه می شوند. متاسفانه اگر شما یک مونتاژ کار حرفه ای نباشید یا تجهیزات درست و مناسب نداشته باشید نمی توانید به آی سی ها را خودتان مونتاژ کنید. برای همین استفاده از ماژول های آماده – حداقل برای شروع یادگیری – توصیه می شود. اینجا لیستی از ماژول های در دسترس ارائه می شوند.

ESP-12

محبوبترین و قابل انعطاف ترین ماژول فعلی کنونی ESP-12 نام دارد. این ماژول بیشترین GPIO را برای استفاده ارائه می دهد و برای اتصال به برد بورد نیاز به یک Expander دارد.

esp12

ترتیب پین های خروجی esp-12 به شکل زیر است:

esp12 pinout

ESP-12 دارای یک LED آبی رنگ در بالا سمت راست خود است. این LED زمانی که ترافیک UART برقرار باشد چشمک میزند.

توضیحات پین ها:

VCC۳٫۳ ولت تغذیه
GPIO13همچنین بعنوان MOSI برای ارتباط سریال استفاده می شود
GPIO 12همچنین بعنوان MISO برای ارتباط سریال استفاده می شود
GPIO 14بعنوان Clock برای ارتباط سریال استفاده می شود
GPIO 16ورودی/خروجی معمولی
CH_PD یا EN، برای عملکرد معمولی باید High باشد
۰ – غیر فعال
۱ – فعال
ADCورودی آنالوگ به دیجیتال
REST – RSTریست خارجی
۰ – ریست
۱ – عادی
TXDارسال UART0
RXDدریافت UART0
GPIO 4ورودی/خروجی معمولی
GPIO 5ورودی/خروجی معمولی
GPIO 0در زمان شروع – boot – باید high باشد، برای بروزرسانی Flash باید low باشد
GPIO 2در زمان شروع باید high باشد
GPIO 15در زمان شروع باید low باشد برای هر دو حالت boot و flash
GNDپایه زمین

نقشه شماتیک نحوه اتصال ماژول ESP-12 برای شروع کار با ماژول

esp-12 shcematic

ESP-1

این ماژول یک ماژول ۸ پایه است که به راحتی به میکرو متصل می شود و بدون هیچ دردسری میتوانید به سرعت با این ماژول کار کنید. البته GPIO های بسیار کمتری در دسترس شما قرار دارند و ارتباط محدودی با خود esp8266 خواهید داشت.

esp-1

شماتیک نحوه اتصال ماژول به پروگرمر FTDI ( یا اتصال مستقیم به RS232 کامپیوتر در صورت وجود )

esp-1 schematic

اتصال به ESP8266

ESP8266 یک دستگاه WiFi است و ما معمولا با پروتکل های WiFi به آن متصل می شویم اما برخی تنظیمات از قبل لازم است تا انجام شوند. ESP8266 نمی داند به چه شبکه ای متصل شود، چه پسوردی را باید استفاده کند و همچنین بقیه پارامترهای دیگری که باید تعریف شوند. البته پیش فرض این است که ما به عنوان Station در شبکه WiFi هستیم. اگر بخوایم AP یا نقطه دسترسی – Access Point باشیم، داستان پیچیده تر می شود. برای تنظیم ماژول نیازمند ارتباط دیگری هستیم که آن ارتباط سریال UART است. ESP8266 یک جفت پین مجزا برای ارتباط سریال دارد و آنها RX و TX هستند. پین TX برای انتقال از ماژول و پین RX برای انتقال دیتا به ماژول استفاده می شود. این پین ها را میتوان به سیستم هدایت کننده که میتواند میکروکنترلر باشد یا کامپیوتر شخصی متصل کرد. اگر کامپیوتر شما هم مانند من پورت سریال ندارد میتوانید از مبدل های USB به سریال استفاده کنید. توجه کنید پروتکل سریال شامل پین های دیگری برای کنترل و تست ارتباط هم هست ولی برای ارتباط با ماژول تنها ۲ پین RX و TX به علاوه پین GND استفاده می شود.

برنامه ریزی ماژول توسط دستورات AT یا AT Commands صورت میگیرد که یک استاندارد است و میتوانید مشابه این دستورات را در ماژول های دیگر ارتباط سریال مانند SIM900 ببینید.

نکته مهم دیگر نرخ انتقال دیتا است که معمولا ۱۱۵۲۰۰ است، اگر نبود ۹۶۰۰ را امتحان کنید.

در دستورات AT میتوانید برخی دستورات مهم را همراه با توضیح مشاهده کنید.

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

احسان

یه علاقمند به حوزه علم و فناوری که دوست داره با به اشتراک گذاشتن دانشش قدم کوچکی برای کمک به جامعه فنی برداره :)

۹ نظر

  • سلام من ماژول ESP8266 را به صورت web server راه اندازی کردم. بطور مثال از طریق موبایل فرمان میدهم تا یک LED روشن شود. مشکل من اینست که وقتی برق قطع و وصل میشود آن LED را که قبلا فرمان داده بودم روشن شود دیگر روشن نیست. و دوباره باید فرمان دهم تا روشن شود. انگار وقتی برق قطع و وصل میشود ماژول ریست میشود و کد ها را دوباره از اول میخواند. من میخواهم هر فرمانی را که به ماژول میدهم در حافظه اش ذخیره شود به طوری که وقتی برق قطع و وصل شد ماژول همان فرمان هایی را که قبلا از طریق موبایل بهش داده بودم دوباره اجرا کند.

    • برای اینکار چند راه حل وجود داره:
      یکی اینکه شما حالت فعلی سیستم رو(چه وضعیت LED ها باشه، چه هر وضعیت حال حاضری) رو روی حافظه ای مثل eeprom مثلا سری ۲۴c ذخیره کنید و پس از هربار قطع و وصل شدن برق یا ریست اتفاقی بتونید دوباره وضعیت قبل رو برگردونید( restore ).
      راه حل دوم استفاده از یک باتری پشتیبان هست، و قیمت بسیار مناسبی هم داره و مثل روش اول احتیاج به کد اضافه نداره.

  • من یه شیلد وای فای گرفتم که روش ماژول esp هستش از نظر شما چند بار میتونم روی اون برنامه بریزم. چطوری میشه اونو erase کرد.

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

    • سلام دوست عزیز
      اکو (echo) تو ماژول های AT و کلا سریال (UART) بیشتر جنبه تایید دریافت رو بازی میکنن. به این صورت که وقتی شما کاراکتر یا کاراکترهایی رو برای ماژول میفرستید، ماژول دیتای دریافتی که همون کاراکتر های شما باشه رو میگیره و دوباره برای شما میفرسته. شما با گرفتن و تحلیلش میتونین متوجه بشین که نرخ دیتا (baud-rate) رو درست تنظیم کردین و همچنین ماژول روشنه و داره دیتای شما رو دریافت میکنه.

    • شما هر کاراکتری برای ماژول بفرستین ماژول اون رو برمیگردونه یا به اصطلاح اکو میکنه. این یه قابلیت برای اکثر ماژول های ارتباط سریاله.
      برای اینکه خاموشش/روشنش کنین باید دستورات مربوطه رو ارسال کنین. میتونین این دستورات رو تو صفحه مربوط به “دستورات AT” مشاهده کنین.

نظر بگذارید