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

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

مطلب پیشنهادی:  راه اندازی شتاب سنج ADXL345 با آردوینو

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

قطعاتی که باید تهیه کنید عبارتند از:

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

مطلب پیشنهادی:  راه اندازی ماژول شبکه توسط آردوینو

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

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

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

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

6 دیدگاه

  1. سلام ببخشید من یه سوال داشتم این زبون برنامه نویسی که از ش استفاده کردین چیه؟

  2. سلام
    من تازه اومدم سمت اردوینو و یک مشکل در شبکه دارم
    من یه اردوینوuno و شیلد شبکه w5100 دارم
    فرض کنیم در شبکه محلی بر روی سرور به آدرس http://192.168.1.1/index.html صفه ای داریم که یک عدد به عنوان ورودی قبول میکنه و یک خروجی برمیگردونه
    حالا چجووری یه مقدار به این آدرس بفرستم و چجوری مقدار برگشتی رو دریافت کنم؟
    ممنون میشم راهنمایی بفرمایید

  3. دوستان اگه بخوام از یه شهر دیگه این کارو بکنم چی؟(اگه شبکه محلی نباشه)بعد یه ipدرست و حسابی رو که همه بهش دسترسی نداشته باشن رو از کجا میتونم گیر بیارم؟