با آردوینو یک وب‌سرور بسازید

فرض کنید تو خونه نشستید و مشغول وبگردی هستید. تو آدرس بار مرورگرتون بعد از وارد کردن یه آدرس 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 از طریق براوزرتون بهش دسترسی پیدا کنین. بعد از اون با صفحه ای مشابه تصویر زیر مواجه میشید:

مطلب پیشنهادی:  اتصال ال‌سی‌دی گرافیکی نوکیا 5110  به آردوینو

Untitled

وقتی روی دکمه “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 خودتون رو بهش متصل کردید.

مطلب پیشنهادی:  تغییر شدت نور LED با آردوینو

نویسنده مقاله : ساجد رسولی‌فر

دیگر جلسات این آموزش

مطلب پیشنهادی:  چند مثال از راه اندازی Lcd tft 2.4 با آردوینو

درباره ی ساجد رسولی‌فر

کارشناسی مهندسی برق گرایش الکترونیک، علاقه‌مند به الکترونیک دیجیتال و طراحی سیستم‌های دیجیتالی و پلتفرم‌های متن باز

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *