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

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

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

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

امیدوارم این نوشته برایتان مفید باشد.

 

منبع:  میکرودیزاینرالکترونیک

 

مطلب قبلیپروتکل رابطه وسایل جانبی در آردوینو (SPI)
مطلب بعدیآموزش کنترل از راه دور رزبری پای با VNC

پاسخ دهید

لطفا نظر خود را وارد کنید!
لطفا نام خود را در اینجا وارد کنید