کنترل شبکه ای از میکروکنترلر ها با کامپیوتر و با استفاده از ارتباط وایرلس ( Wifi )
پس از خواندن این مقاله شما قادر خواهید بود با استفاده از سیستم عامل نامینک سروری را بر روی کامپیوترتان پیاده سازی کنید که کامپیوتر قادر باشد همزمان شبکه ای مشتمل از چندین میکروکنترلر را ( به عنوان کلاینت های خود ) کنترل کند.
لازم به ذکر است در این پروژه ازهیچ ماژول خارجی استفاده نشده است و تنها با استفاده از سخت افزار بورد naminic و سیستم عامل نامینیک ( Naminic OS ) پیاده سازی شده است و بدون هیچ تغییری قابل پیاده سازی روی میکروکنترلرهایSTM وNXP و Atmel می باشد. لینک دانلود سورس کدهای لازم برای پروژه و فیلم آن در انتهای مقاله آمده و هرگونه کپی برداری از آن ها بدون ذکر منبع پیگرد قانونی دارد.
همانند پروژه ی توضیح داده شده در مقاله ی کنترل میکروکنترلر با گوشی اندرویدی با استفاده از وایرلس، در این پروژه نیز قصد داریم میکروکنترلر را از طریق شبکه ی متصل به مودم وایرلس کنترل کنیم ولی با این تفاوت که در این پروژه میکرو توسط کامپیوتر کنترل می شود ( نه گوشی ) و همچنین برخلاف پروژه ی اندروید ، در این پروژه میکروclient کنترلر و کامپیوترserver است و در نتیجه کامپیوتر می تواند چندین میکروکنترلر را همزمان کنترل کند.
در ابتدا همه ی میکروکنترلرها با کابل Ethernet به صورت مستقیم به یک مودم وایرلس وصل می شود و از این طریق همگی وارد یک شبکه ی داخلی می شوند. سپس کامپیوتر نیز با استفاده از Wifi به مودم وایرلس وصل می شود تا شبکه دسترسی داشته باشد. اکنون باید 2 برنامه یکی سمت server یعنی کامپیوتر و دیگری سمت client یعنی میکروکنترلرها بنویسیم که اطلاعات قرار گرفته در شبکه را با استفاده از یکی از پروتکل های استاندارد درون شبکه پردازش کنند. ما از پروتکل TCP/IP استفاده می کنیم زیرا کتابخانه ی این پروتکل در سیستم عامل نامینیک به صورت کامل پیاده سازی شده و دیگر نیازی نیست جهت ارسال داده ها خودمان آن را پیاده سازی کنیم. همچنین در برنامه ی سمت کامپیوتر نیز از زبان جاوا استفاده می کنیم که در این زبان هم با استفاده از سوکت این پروتکل پیاده سازی شده است و نیازی به درگیری با جزییات پروتکل TCP/IP نیست.
در ابتدا باید server روشن شود تا آماده ی قبول کردن درخواست client ها باشد و سپس client ها به شبکه وصل شوند.(اگر ترتیب رعایت نشود به مشکل بر خورید). مطابق شکل زیر وقتی برنامه سرور سمت کامپیوتر ( فایل jar. که لینک دانلود آن پایین گذاشته شده است ) را اجرا می کنیم ابتدا باید پورتی از سرور ( کامپیوتر ) که می خواهیم باز شود تا برای وصل شدن کلاینت ها به آن پورت قابل استفاده باشد را در برنامه وارد کنیم که این پورت 1000 درنظر گرفته شده است. سپس حداکثر تعداد کلاینت های قابل وصل شدن به سرور را وارد می کنیم. سرانجام دکمه ی Open Port را می زنیم تا سرور برای وصل شدن کلاینت ها راه اندازی شود.
برنامه ی سرور پیاده سازی شده بر روی سرور طوری نوشته شده است که هنگام درخواست یک client برای وصل شدن بهserver از server اجازه ی اتصال می گیرد و اگر سرور اجازه داد به آن وصل می شود.
مطابق شکل روبرو برای ارسال command به client ابتدا باید از لیست کلاینت ها که در قسمت بالا سمت راست برنامه وجود دارد، IP کلاینت های مورد نظر را تیک زده و سپس command را ارسال کرده. در صورت نیاز می توانید با زدن دکمه یAdd a IP to Black List یک IP بهblack list اضافه کنید تا مانع از وصل شدن آن 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 را روشن کند.
?
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | #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,10); // Setting micro IP : 192.168.1.13 tcp.setMac(0x00,0x45,0x56,0x78,0x9a,0xb1); // Setting Mac Address of micro : 0x00,0x45,0x56,0x78,0x9a,0xb2 tcp.setNetMask(255,255,255,0); // Setting Subnet 255.255.255.0 tcp.tcpInitClient(192,168,1,100,1000); // Setting micro as client and set connecte to server with IP : 192.168.1.100 and port 1000 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 server (Computer) else led->clear(); // Turning off led if it is received "off" command from server (Computer) } return 0; } |
دانلود سورس کد (( پروژه کنترل میکروکنترلر با کامپیوتر )) برای keil
دانلود فایل jar. برای (( پروژه کنترل میکروکنترلر با کامپیوتر )) برای کامپیوتر
توجه : برای اجرای برنامه ی سرور سمت کامپوتر، کافیست فایل jar. بالا را دانلود کرده و روی آن دابل کلیک کنید اما قبل از آن باید ماشین مجازی جاوا ( JRE ) را نصب کرده باشید. در این صورت برنامه های نوشته شده به زبان جاوا روی ویندوز اجرا می شوند.