کنترل میکروکنترلر با گوشی اندرویدی با استفاده از ارتباط وایرلس ( Wifi )

 

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

لازم به ذکر است در این پروژه ازهیچ ماژول خارجی استفاده نشده است و تنها با استفاده از سخت افزار بورد naminic و از سیستم عامل نامینیک ( Naminic OS ) پیاده سازی شده است و بدون هیچ تغییری قابل پیاده سازی روی میکروکنترلرهای STM  وNXP  و Atmel می باشد. لینک دانلود سورس کدهای لازم برای پروژه و فیلم آن در انتهای مقاله آمده و هرگونه کپی برداری از آن ها بدون ذکر منبع پیگرد قانونی دارد.

جهت ساده شدن فهم پروژه ما یکی از ساده ترین اعمال کنترلی روی میکرو یعنی کنترل led با ارسال command از راه  دور را آموزش می دهیم که پیش زمینه ای خواهد بود برای کنترل ماژول های دیگر(مثل کنترل servo mottor و … ).

مطابق فیلم زیرمی خواهیم برنامه ای بنویسیم که کاربر با تایپ یکی از commandهای on یا off در گوشی led میکرو را روشن یا خاموش کند.

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

ابتدا باید گوشی و میکرو هر دو در یک شبکه ی داخلی قرار گیرند تا به هم متصل شوند.برای اینکار ابتدا گوشی را با استفاده از wifi به مودم متصل می کنیم. برای وصل کردن میکرو به شبکه 3 راه وجود دارد.

1_ وصل کردن میکرو به مودم با استفاده از کابل شبکه (کابل اترنت).

2_ وصل کردن میکرو به مودم با استفاده از ماژول وایرلس میکرو.

3_ وصل کردن میکرو به گوشی به طور مستقیم (بدون واسط مودم) با ماژول وایرلس میکرو به صورت peer to peer.

برای ساده تر شدن پروژه از روش اول یعنی اتصال میکرو به مودم با استفاده از کابل شبکه استفاده می کنیم که به هیچ ماژول خارجی نیاز ندارد و فقط از امکانات بورد نامینیک بهره می برد. (در موارد 1 و 2 لازم است از قبل ماژول وایرلس را روی میکرو نصب کنیم).

اکنون میکرو و گوشی در یک شبکه ی داخلی قرار گرفته اند.برای کامل شدن ارتباط باید 2 برنامه یکی سمت میکرو و یکی سمت گوشی بنویسیم که هردو وظیفه دارند تا اطلاعات قرار گرفته در شبکه را با استفاده از یکی از پروتکل های استاندارد درون شبکه پردازش کنند. برای سادگی کار از پروتکل TCP/IP استفاده می کنیم زیرا کتابخانه ی این پروتکل در سیستم عامل نامینیک  به صورت کامل پیاده سازی شده و دیگر نیازی نیست جهت ارسال داده ها خودمان آن را پیاده سازی کنیم. همچنین در برنامه ی سمت گوشی نیز از زبان جاوا (اندروید) استفاده می کنیم که در این زبان هم با استفاده از سوکت این پروتکل پیاده سازی شده است. پس فقط با چند خط کد شبکه را در هر دو برنامه راه اندازی می کنیم. در پروتکل TCP/IP یکی از کاربران شبکه server  شده و دیگر کاربران client می شوند.در این پروژه ما میکرو را server و گوشی را client قرار داده ایم. در ادامه هم زمان با توضیح کد، نحوه ی برقراری ارتباط client (گوشی) و server (میکرو) را بیان خواهیم کرد.

توضیح کد سمت میکرو :

این کد با استفاده از سیستم عامل نامینیک ( Naminic OS ) در نرم افزار keil و با زبان ++C زده شده است.

در خط اول کتابخانه ی network.h جهت راه اندازی پروتکل TCP/IP وارد شده است. در خط 12 تابع tcp_callback وجود دارد. این تابع از هنگامی که سرور به کلاینت وصل می شود به طور مداوم صدا زده می شود و می توان در آن event های رخ داده شده مانند ارسال و دریافت را چک کرد و در صورت نیاز برای هر event کد دلخواه در درون تابع نوشت. در خط 18 بررسی می شود که اگر event در حال خاضر از نوع UIP_NEWDATA یعنی داده ی دریافتی بود و در ادامه  در صورتی که این داده دریافتی( که در متغیر buf ذخیره شده است) اگر برابر on بود به متغیر setLed مقدار true نسبت داده شود در غیر این صورت false  شود.

در خط 36 وارد main برنامه می شویم که در ابتدا با تابع NaminicStart سیستم عامل نامینیک بالا می آید و در ادامه تا خط 51 به راحتی با آبجکت های درون سیستم عامل تمامی قست های مورد نیاز پروژه در چند خط راه اندازی  و آماده ی کار می شود.

در خط 53 درون یک حلقه ی ناتمام ابتدا تابع  tcp.Main_Tcp صدا زده می شود. درون این تابع سیستم عامل به طور خودکار دریافت و ارسال داده های شبکه را بررسی می کند که تابع توضیح داده شده در خط 12 نیز شامل آن می شود. در ادامه  در خط 58 به بعد بررسی می شود که اگر متغیر setLed درست باشد led را روشن کند.

 

#include "network.h"
#include "debug.h"
#include "stdio.h"
#include "led.h"
#include "string.h"
#include "delay.h"
 
//void NaminicStart(void);
 
bool setLed = false;
 
void tcp_callback(unsigned char evt,char *buf,unsigned short len) // Receive Interrupt Function
{  
        char on[] = "on";
        char off[] = "off";    
        char *buf2 = new char[len];
        
      if (evt == UIP_NEWDATA)
        {                                          
            memcpy(buf2, buf, len);                    
            
            printf("Receive : %sn", buf2);     
            
            printf("n");
                
            if(strcmp(buf2, on)==0)
                setLed = true;
            
            else if(strcmp(buf2, off)==0)
                setLed = false;    
                    
        }
        
}
 
int main(void)
{  
    //NaminicStart();                                   // Boot Naminic OS
    
    DEBUG serial(serial.BUD_9600); // Configure serial with 9600 budrate;
    
    printf("Startn");                           // Asserting programm is started (for debugging in terminal)
    
    Led *led = new Led(0);                  // Making a led object from first led in naminic board 
    
    TcpIp tcp;                                          // Making a tcp object from tcp/ip class
     
    tcp.setIP(192,168,1,13);    // Setting micro IP : 192.168.1.13
    tcp.setMac(0x00,0x45,0x56,0x78,0x9a,0xb2);  // Setting Mac Address of micro : 0x00,0x45,0x56,0x78,0x9a,0xb2
    tcp.tcpInitServer(1000);                // Setting micro as server an Opening the port 1000 for listening requests from clients
    tcp.setNetMask(255,255,255,0);  // Setting Subnet 255.255.255.0
    
    while(1)
            
    {
        tcp.mainTcp();                          // Handeling receivie and send buffers for tcp/ip protocol;
        
        if( setLed )                                   
            led->set();                              // Turning on led if it is received "on" command from client (Mobile)
    else
            led->clear();                            // Turning off led if it is received "off" command from client (Mobile)
        
    }
    
    return 0;  
}

دانلود سورس کد (( پروژه کنترل میکروکنترلر از طریق گوشی )) برای keil

دانلود فایل apk. (( برای پروژه کنترل میکروکنترلر از طریق گوشی )) برای گوشی اندروید

توجه : برای دریافت سورس کد فایل apk. ( برنامه ی کلاینت سمت گوشی ) کافیست با ما در تماس باشید.

 

نویسنده : سهیل شبابی

Tags: , , , , ,