فرض کنید تو خونه نشستید و مشغول وبگردی هستید. تو آدرس بار مرورگرتون بعد از وارد کردن یه آدرس ip مشخص وارد صفحه ای میشین که می تونین از طریق اون تو یه نقطه دیگه ای یه موتور رو روشن کنید یا یه مداری رو راه اندازی کنید و یا هر دستور و کار الکترونیکی دیگه ای که بخواین!
در مورد پروژه ای صحبت می کنم که فقط متشکل از یک آردوینو و شیلد ethernet هستش. شیلد ethernet شامل چیپ wiznet W5100 هستش که قابلیت ایجاد یک شبکه (IP Address) با امکان TCP و UDP رو داره. این شیلد یه شکاف SD-Card هم داره برای فایل ها و استفاده از اونا رو شبکه. بورد آردوینو از طریق پورت SPI (همون هدر ICSP) با Wiznet W5100 و SD-Card ارتباط برقرار می کنه. چون پورت SPI همزمان توسط wiznet W5100 و SD-Card اشغال شده امکان فعال بودن هر دو همزمان برقرار نیست و هر لحظه فقط یکی از wiznet W5100 یا SD-Card میتونه اکتیو باشه.
این شیلد واسطه آردوینو و شبکه خانگی شما هستش و در اون از کابل استاندارد شبکه, RJ45 استفاده میشه و با بکارگیری چند دستور ساده در IDE آردوینو می توانید محیط پیرامون خودتون رو از طریق روتر کنترل کنید. تو این پروژه ما یه ال ای دی و یه سروو موتور رو کنترل می کنیم ولی شما میتوین با تغییرات تو برنامه هر وسیله الکترونیکی رو که بخوای کنترل کنید. برای مثال رله, بازر, موتور DC یا استپ موتور.
قطعاتی که باید تهیه کنید عبارتند از:
Arduino Uno Ethernet Shield 220 Ohm Resistor LED Micro Servo Motor Breadboard Jumper Cables
نحوه کار سیستم بدین شکله که وقتی که کدی رو که پایین قرار دادم رو آپلود کنید روی بورد آردوینو و شیلد ethernet رو به اینترنت متصل کنید روی Lan شما یه وب سرور ایجاد می کنه که شما براحتی میتونین بوسیله IP Address از طریق براوزرتون بهش دسترسی پیدا کنین.
وقتی روی دکمه “Turn On LED” کلیک کنید URLتون به آدرس “http://192.168.1.178/?button1on” تغییر پیدا می کنه. اونوقت بورد آردوینو اصلاعات رو میخونه و ال ای دی رو روشن می کنه. بصورت پیشفرض آدرس IP همونطور که می تونید تو کد برنامه ببینید “192.168.1.178” هستش.
برنامه نویسی آردوینو:
#include <SPI.h> #include <Ethernet.h> #include <Servo.h> int led = 4; Servo microservo; int pos = 0; byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address byte ip[] = { 192, 168, 1, 178 }; // ip in lan (that's what you need to use in your browser. ("192.168.1.178") byte gateway[] = { 192, 168, 1, 1 }; // internet access via router byte subnet[] = { 255, 255, 255, 0 }; //subnet mask EthernetServer server(80); //server port String readString; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } pinMode(led, OUTPUT); microservo.attach(7); // start the Ethernet connection and the server: Ethernet.begin(mac, ip, gateway, subnet); server.begin(); Serial.print("server is at "); Serial.println(Ethernet.localIP()); } void loop() { // Create a client connection EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read(); //read char by char HTTP request if (readString.length() < 100) { //store characters to string readString += c; //Serial.print(c); } //if HTTP request has ended if (c == '\n') { Serial.println(readString); //print to serial monitor for debuging client.println("HTTP/1.1 200 OK"); //send new page client.println("Content-Type: text/html"); client.println(); client.println("<HTML>"); client.println("<HEAD>"); client.println("<meta name='apple-mobile-web-app-capable' content='yes' />"); client.println("<meta name='apple-mobile-web-app-status-bar-style' content='black-translucent' />"); client.println("<link rel='stylesheet' type='text/css' href='http://randomnerdtutorials.com/ethernetcss.css' />"); client.println("<TITLE>freeterminal.ir Tutorials Project</TITLE>"); client.println("</HEAD>"); client.println("<BODY>"); client.println("<H1>freeterminal.ir Tutorials Project</H1>"); client.println("<hr />"); client.println("<br />"); client.println("<H2>Arduino with Ethernet Shield</H2>"); client.println("<br />"); client.println("<a href=\"/?button1on\"\">Turn On LED</a>"); client.println("<a href=\"/?button1off\"\">Turn Off LED</a><br />"); client.println("<br />"); client.println("<br />"); client.println("<a href=\"/?button2on\"\">Rotate Left</a>"); client.println("<a href=\"/?button2off\"\">Rotate Right</a><br />"); client.println("<p>Created by freeterminal.ir. Visit http://freeterminal.ir for more projects!</p>"); client.println("<br />"); client.println("</BODY>"); client.println("</HTML>"); delay(1); //stopping client client.stop(); //controls the Arduino if you press the buttons if (readString.indexOf("?button1on") >0){ digitalWrite(led, HIGH); } if (readString.indexOf("?button1off") >0){ digitalWrite(led, LOW); } if (readString.indexOf("?button2on") >0){ for(pos = 0; pos < 180; pos += 3) // goes from 0 degrees to 180 degrees { // in steps of 1 degree microservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } } if (readString.indexOf("?button2off") >0){ for(pos = 180; pos>=1; pos-=3) // goes from 180 degrees to 0 degrees { microservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } } //clearing string for next read readString=""; } } } } }
نکته: اگر بخواین این پروژه رو عملی کنید باید بدونین که فقط می تونین از محلی که روتر هستش به IP Address دسترسی داشته باشین. در واقع شما برای دسترسی به آدرس IPتون باید حتما به همون روتری کانکت بشین که شیلد ethernet خودتون رو بهش متصل کردید.
نویسنده مقاله : ساجد رسولیفر
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
سلام ببخشید من یه سوال داشتم این زبون برنامه نویسی که از ش استفاده کردین چیه؟
سلام، زبان برنامه نویسی سی پلاس پلاس ++C البته توابع و… برای آردوینو نوشته شدن ولی ریشه همون ++C/C هستش.
سلام
من تازه اومدم سمت اردوینو و یک مشکل در شبکه دارم
من یه اردوینوuno و شیلد شبکه w5100 دارم
فرض کنیم در شبکه محلی بر روی سرور به آدرس http://192.168.1.1/index.html صفه ای داریم که یک عدد به عنوان ورودی قبول میکنه و یک خروجی برمیگردونه
حالا چجووری یه مقدار به این آدرس بفرستم و چجوری مقدار برگشتی رو دریافت کنم؟
ممنون میشم راهنمایی بفرمایید
سلام، خوش اومدین. خیلی ساده است. در حقیقت شما یک وب سرور کوچولو داخل این برد نوشتین یا یکی براتون نوشته که درخواست های TCP/IP را پاسخ میده. خب برای ارسال اعداد از متد های GET و POST میتونید استفاده کنید که خیلی ساده هستن. مثلا URL زیر را ببینید.
http://192.168.1.1/?name=mahdie
با روش بالا من بهش گفتم که مقدار name برابر mahdie باشه. حال بصورت خیلی ساده در داخل آردوینو میتونید یک شریط بنویسید که ببینه مقدار name چیه. شبیه این کار را در پروژه کنترل رله از طریق شبکه اترنت (وب سرور روی میکروکنترلر) انجام دادیم. برای آشنایی با متد ها در قسمتی از پروژه مانيتورينگ دما و رطوبت تحت وب سایت توضیحاتش هست دانلود کنید بخونید. و یا سرچ کنید.
دوستان اگه بخوام از یه شهر دیگه این کارو بکنم چی؟(اگه شبکه محلی نباشه)بعد یه ipدرست و حسابی رو که همه بهش دسترسی نداشته باشن رو از کجا میتونم گیر بیارم؟
سلام، برای اتصال به اینترنت نیاز به یک آیپی معتیر دارید که باید از شرکتهای ISP بخرید. یا از Port forwarding استفاده کنید.