برد ESP8266 خانه هوشمند میکروکنترلر AVR

مدیریت ماژول ESP8266 از طریق موبایل با AVR و نرم افزار کدویژن Codevision

ESP8266-AVR-Atmega8-codevision-tutorial-with-mobile-app-digispark
نوشته شده توسط علی زاهدی

امروزه ماژول ESP8266 کاربرد بسیار زیادی در هوشمند سازی و کنترل از راه دور دارد. برنامه نویسی برای ماژول ESP8266 با AVR توسط تراشه Atmega8 بسیار جداب خواهد بود. یکی از انواع میکروکنترلرهای پرمصرف مربوط به شرکت ATMEL با نام خانواده AVR می‌باشد. این میکروکنترلر ۸ بیتی به دلیل قابلیت برنامه نویسی توسط کامپایلر با زبان‌های سطح بالا (HLL) بسیار مورد توجه قرار گرفته‌اند. میکروکنترلر AVR از معماری RISC بهره می‌برد. شرکت ATMEL سعی نموده با استفاده از معماری پیشرفته و دستورات بهینه، حجم کد تولید شده را کم و سرعت انجام دستورات را بالا ببرد. در این آموزش قصد داریم با استفاده از میکروکنترلر Atmega8 ، ماژول esp8266 را بصورت سرور راه اندازی و با استفاده از موبایل یک LED را روشن و خاموش کنیم. در ادامه این آموزش با مرجع تخصصی امبدد سیستم‌ها به زبان فارسی، دیجی اسپارک همراه باشید.

 


۱ – برد وای فای ESP8266


مشخصات ماژول esp8266

برد esp8266 یک ماژول Wifi بسیار ارزان قیمت و مناسب برای انواع پروژه‌های کاربردی است. ساخت شرکت چینی Espressif می‌باشد. از کاربردهای اصلی ماژول ESP8266 می توان به کنترل ربات‌ها و وسایل به صورت Wifi، هوشمند سازی ساختمان ، سیستم‌های IOT و بسیاری کاربرد دیگر اشاره کرد. پروتکل ارتباطی برای ماژول درگاه سریال است که همین امر باعث سادگی استفاده و محبوبیت esp8266 شده است .این ماژول جهت فراهم کردن ارتباط بی سیم Wifi به اینترنت می باشد و از طریق پروتکل سریال با میکروکنترلر ها و بردهای کنترلی همچون آردوینو و رزبری پای ارتباط برقرار می کند. با استفاده از این ماژول می توانید پروژه ی خود را مجهز Wi-Fi کنید.

شماتیک پایه‌های ماژول esp8266 اتصال به آردوینو - دیجی اسپارک

 

اتصالات مدار

  1. پایه‌های VCC و CH_PD ماژول وایفای به ولتاژ مثبت ۳٫۳ ولت
  2. پایه ۹ و ۱۰ میکروکنترلر به کریستال ۱۱٫۰۵۹۲ مگاهرتز
  3. TX ماژول وایفای به پایه ۲ میکروکنترلر (RX)
  4. پایه ۷ میکروکنترلر به ولتاژ مثبت ۵ ولت
  5. پایه ۸ میکروکنترلر به منفی مدار
  6. GND ماژول به منفی مدار
  7. RX ماژول وایفای (با استفاده از دو مقاومت طبق نقشه) به پایه ۳ میکروکنترلر (TX)
  8. پایه ۱۴ میکروکنترلر با استفاده از یک مقاومت ۴۷۰ اهم به آند LED و کاتد LED به منفی مدار

(اتصال vcc ماژول وایفای حتما به ۳.۳v باشد)

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

 


۲ – کدنویسی AVR برای ESP8266


کد AVR در CodeVision

جهت ایجاد پروژه جدید در نرم افزار کدویژن ابتدا نرم افزار را باز کنید و از منو فایل گزینه New را انتخاب کنید. کریستال را روی ۱۱٫۰۵۹۲ مگاهرتز تنظیم کنید. کدهای زیر را کپی کرده و آنحا وارد کنید. سپس از منوی Project گزینه‌ی compile را انتخاب کنید. اگر error مشاهده نکردید، گزینه OK را انتخاب کنید و از همان منو project گزینه Build All را انتخاب کنید. حال برنامه به زبان ماشین ترجمه شده و آن در پوشه‌ای به نام exe در جایی که انتخاب کردید با پسوند hex ذخیره شده است.

 

مهمان گرامی، جهت دسترسی به کدهای این پروژه، اسپارکر شوید.

 

 


۳ – تحلیل کد AVR ESP8266


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

ابتدا کتابخانه مربوط به پردازنده را اضافه کردیم. سپس کتابخانه تاخیرها و کتابخانه دستورات مربوط به پیکربندی رشته‌های ارسالی یه ماژول وایفای اضافه شدند. سپس یک متغیر نوع char برای دریافت اطلاعات از ماژول و یک رشته از نوع char برای ارسال اطلاعات به ماژول تعریف کرده‌ایم. خط بعدی مربوط به وقفه دریافت از پروتکل UART میکروکنترلر می‌باشد. زمانی که اطلاعاتی از سوی ماژول ESP8266 به میکروکنترلر ارسال شود؛ برنامه به این قسمت پرش می‌کند. کاراکتر دریافتی را داخل متغیر data دخیره می‌کند. تابع main تابع اصلی برنامه در زبان C می‌باشد. در ابتدای این تابع تنطیماتی همچون تعریف ورودی یا خروجی بودن پورت‌ها و فعال کردن پروتکل‌های میکروکنترلر انجام می‌شود. در این بخش پایه ۱۴ میکروکنترلر را بعنوان خروجی تعریف کرده و پروتکل UART میکروکنترلر را با باودریت ۱۱۵۲۰۰ فعال کرده‌ایم. سپس دستورات مربوط به ساخت سرور را به ماژول وایفای ارسال می‌کنیم. جهت اشنایی با این دستورات می‌توانید به آموزش کار با دستورات At Command برد Esp8266 ماژول Wifi مراجعه کنید. (“asm(“sei# مربوط به فعال کردن وقفه‌ی سراسری می‌باشد. در حلقه‌ی بی‌نهایت مدار شرطی برای دریافت کد هگز ۰۱ تعریف شده است. زمانی که از موبایل این کد ارسال شود وضعیت پایه ۱۴ تغییر می‌کند. توجه داشته باشد درهنگام پروگرام کردن کد روی میکروکنترلر AVR ، فیوزبیت‌ها بر روی کریستال خارجی تنظیم شود.

 


۴- مدیریت ESP8266 با موبایل


اپلیکیشن Socket Protocol

اپلیکیشن برای ارتیاط با ماژول ESP8266 وای فای می‌باشد. این برنامه را می‌توانید از طریق همین لینک از گوگل پلی دانلود و نصب کنید. ابتدا وایفای موبایل خود را روشن کنید و وارد بخش تنظیمات وایفای شوید. به Wifi ماژول که در حالت پیش فرض به نام AI-THINKER است متصل شوید. سپس وارد اپلیکیشن socket protocol شده و به بخش CLIENT رفته و کادرهای IP و PORT را به ترتیب با ۱۹۲٫۱۶۸٫۴٫۱ و ۸۸۸۸ پر کنید. بخش Hex را فعال کرده و ۰۱ را ارسال کنید. کاربرانی که دارای سیستم عامل IOS می باشند می‌توانند با استفاده از این لینک نرم افزار مشابه socket protocol را دانلود و استفاده کنند.

 

اپلیکیشن Socket protocol برای مدیریت ماژول ESP8266 با AVR - Digispark

 


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


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

  1. ماژول وایفای مدل esp8266-01
  2. میکروکنترلر ATmega8
  3. کابل فلت
  4. کریستال ۱۱٫۰۵۹۲
  5. LED یا دیود نورانی
  6. مقاومت ۴۷۰ اهم و ۲۲۰ اهم

 

 

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

 


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


برای دریافت بن خرید از دانشجو کیت، کاربران بایستی با استفاده از وسایل این آموزش، پروژه را اجرا کرده و یا حتی مدار جدیدی تعریف کنید. سپس از اجرای کار فیلم گرفته و در شبکه‌های اجتماعی از جمله آپارات و اینستگرام، با هشتگ‌های دیجی_اسپارک و دانشجوکیت  و digispark  و  daneshjookit منتشر کنند. سپس از طریق بخش نظرات در ادامه همین آموزش، جهت دریافت بن خرید ارسال رایگان به ارزش ۱۰۳۰۰ تومان از دانشجو کیت، لینک را زیر همین پست ارسال کنید.

 

در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی , از وبسایت دیجی اسپارک حمایت کنید.

 

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

علی زاهدی

دانشجو ی رشته الکترونیک
عاشق یادگیری و به اشتراک گذاشتن اطلاعاتم.

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

۸ دیدگاه

  • سلام.
    این ماژول من رو روانی کرده.
    می خوام وقتی عبارت Temp رو به ماژول می فرستم، عبارت ارسالی با IPD,0,6:Test+ مقایسه بشه و اگه همین بود، فلان کار رو انجام بده.
    دریافت رو با وقفه و چک کردن عبارت ارسالی هم با تابعی جداگانه انجام میدم، ولی هیچ جوره نمیشه.
    ممنون میشم راهنمایی کنید.
    کد رو در یک کامنت دیگه می فرستم.

    • سلام باتشکر از توجه شما،
      شما باید کد های داخل وقفه ی USART را پاک کرده و کد رو به صورت زیر بنویسید:

      interrupt [USART_RXC] void usart_rx_isr(void)
      {
      [۱۳]char receive,data;
      int i;
      receive=UDR;
      data[i]=receive;
      i++;
      if(receive==0x0A)i=0;
      }
      و داخل حلقه ی اصلی کد رو بصورت زیر:
      while(1)
      {
      if(data[9]==’T’&&data[10]==’e’&&data[11]==’e’&&data[12]==’t’)دستور مورد نظر;

  • flash unsigned char req_str[]=”+IPD,0,6:Test\r\n”;

    char rx_buffer[15];

    unsigned char rx_index;

    // USART Receiver interrupt service routine
    interrupt [USART_RXC] void usart_rx_isr(void)
    {
    char data;
    data=UDR;
    rx_buffer[rx_index]=data;
    if (++rx_index==15) rx_index=0;
    }

    int req_chk()
    {
    static unsigned char comp;
    #asm(“cli”)
    comp=strcmpf(rx_buffer,req_str);
    #asm(“sei”)
    if (comp==0) return 0;
    else return 1;
    }

    void main(void)
    {
    // Declare your local variables here
    int req;

    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud Rate: 9600
    UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
    UCSRB=(1<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (1<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
    UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
    UBRRH=0x00;
    UBRRL=0x67;

    // Global enable interrupts
    #asm("sei")

    while (1)
    {
    // Place your code here
    req=req_chk();
    if (req==0)
    {
    PORTD.7=0;
    delay_ms(1000);
    }
    }
    }

  • روی ماژول ESP8266-01 دستور تغییر بادریت ارسال کردم، متاسفانه بادریت آن بهم ریخت. خواستم بدونم اینکه آیا میشود به روش سخت افزاری بادریت را به همان مقدار پیش فرض کارخانه ای ۱۱۵۲۰۰ برگرداند؟

    • سلام
      اگر با استفاده از At command های ماژول باودریت تغیر کرده باشه مثلا ۹۶۰۰ باید باودریت داخل نرم افزار را به ۹۶۰۰ تغیر داده و دستور AT+CIOBAUD=15200 ارسال کنید.