راه اندازی شیلد شبکه یکی از پروژه های آردوینو است که توسط یکی از دوستان سیسوگی (آقای مقداد محمدی) به عنوان تجربه شروع به کار فرستاده شده که سعی میشه بدون دخل و تصرف منتشر شود . با سیسوگ همراه باشید.
مدتی بود که یکی از دوستانم ازم میخواست که یک مدار براش راه بندازم که با استفاده از یک برنامه اندروید و اینترنت بتونه یه تعداد رله رو کنترل کنه.
بعد از مدتی که سرم خلوت تر شد شروع به کار کردم. تصمیم گرفتم این کارو با برد آردوینو انجام بدم. برای همین یه برد آردوینو تهیه کردم. از اونجایی که میخواست اتصال به اینترنت از طریق کابل LAN انجام بشه یه شیلد شبکه (Ethernet) هم برای اتصال برد آردینو به اینترنت تهیه کردم و خیلی ساده اونو روی برد آردوینو UNO قرار دادم.
از اونجایی که عقیده ام اینه هر کاری میخوای انجام بدی رو یکی قبلا انجام داده، شروع به سرچ توی اینترنت کردم تا ببینم چجور باید این اتصال به اینترنت رو از طریق شیلد شبکه (Ethernet) انجام بدم.
کدهای زیادی توی اینترنت پیدا کردم و حتی خود سایت آردوینو، که تقریبا مشابه با هم بودن. در همه این برنامه ها در ابتدا این دستور وجود داشت:
1 2 3 | // Newer Ethernet shields have a MAC address printed on a sticker on the shield byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; |
در توضیح این خط برنامه کامنت گذاشته بود که آدرس مک شیلد اترنت رو میتونی از برگه ای که روی اون چسبیده بدست بیاری.
راه اندازی شیلد شبکه آردوینو
من هر چی شیلد شبکه ای (اترنت) که خریده بودم رو بالا و پایین کردم هیچ کدی ندیدم!!!!
سوال برام پیش اومد که باید چه کار کنم و این خط از برنامه رو باید چجور بنویسم. همونجور که میدونید آدرس مک برای این استفاده میشه که در یک شبکه متشکل از N دستگاه، هر دستگاه با یک نام یونیک شناخته بشه و برای ارتباط بین همدیگه و ارسال و دریافت اطلاعات تداخلی پیش نیاد. با این توضیحی که خدمتتون دادم، اگر نیاز باشه دستگاه در یک شبکه بزرگ قرار بگیره باید به این آدرس مک توجه ویژه ای کرد.
اما اگر شبکه لوکال هست نیازی به حساسیت روی این آدرس نیست. یک تعداد سایت هم هست که با پرداخت پول بهتون یک آدرس مک یونیک میفروشن. با این تفاسیر من به این نتیجه رسیدم که متغییر mac[] رو هر چیزی که دلم میخواد میتونم بزارم. چون متاسفانه شرکت سازنده هیچ آدرس مک یونیکی رو برای این شیلد در نظر نگرفته. خوب من اون آدرس رو در نظر گرفتم و برنامه رو روی برد آپلود کردم.
این شیلد شبکه (اترنت) اینجور که بنظر میاد بصورت دیفالت DHCP فعالی دارن. شاید بپرسید یعنی چی؟!
فعال بودن DHCP باعث میشه که وقتی دستگاه شما در یک شبکه قرار گرفت بتونه بصورت اتوماتیک ip بگیره, خوب اگر احیانا خواستید بعد از اتصال دستگاهتون به یک شبکه خواستید بدونید چه ip گرفته خیلی راحت میتونید مثال خود آردوینو که در آدرس Example/Ethernet/DhcpAddressPrinter قرار داره رو روی آردوینو آپلود کنید و توی serial monitor به راحتی آی پی اختصاص یافته به بردتون رو ببینید. از موضوع دور نشیم!!!!
برنامه مربوط به اتصال به اینترنت به این شکل نوشته شده که بعد از اتصال به اینترنت به سایت msn.com میره و یک کلمه sisoog رو سرچ میکنه و نتایج رو توی serial monitor بهتون نشون میده.
در مورد بعضی از خطوط برنامه نیاز هست که یه توضیحات تکمیلی بدم.
این خط برای این نوشته شده که اگر به هر دلیلی DHCP شیلد شما فعال نبود و نمیتونست بصورت اتوماتیک از روتر ip بگیره، شما به اون ip اختصاص داده باشید.
طبیعتا این IP باید توی رنج IP هایی باشه که روتر به نودهای متصل به خودش اختصاص میده.
1 2 3 | // Set the static IP address to use if the DHCP fails to assign IPAddress ip(192, 168, 1, 122); |
البته برنامه جوری نوشته شد که اگر نتونه بصورت اتوماتیک ip بگیره به شما اطلاع میده و پیام زیر در serial monitor نمایش داده میشه.
Failed to configure Ethernet using DHCP
امیدوارم این آموزش بدردتون خورده باشه. موفق باشید
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | #include <SPI.h> #include <Ethernet.h> // Enter a MAC address for your controller below. // Newer Ethernet shields have a MAC address printed on a sticker on the shield byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // if you don't want to use DNS (and reduce your sketch size) // use the numeric IP instead of the name for the server: //IPAddress server(74,125,232,128); // numeric IP for Google (no DNS) char server[] = "www.msn.com"; // name address for Google (using DNS) // Set the static IP address to use if the DHCP fails to assign IPAddress ip(192, 168, 1, 122); // Initialize the Ethernet client library // with the IP address and port of the server // that you want to connect to (port 80 is default for HTTP): EthernetClient client; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // start the Ethernet connection: if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); // try to congifure using IP address instead of DHCP: Ethernet.begin(mac, ip); } // give the Ethernet shield a second to initialize: delay(1000); Serial.println("connecting..."); // if you get a connection, report back via serial: if (client.connect(server, 80)) { Serial.println("connected"); // Make a HTTP request: client.println("GET /search?q=sisoog HTTP/1.1"); client.println("Host: www.msn.com"); client.println("Connection: close"); client.println(); } else { // if you didn't get a connection to the server: Serial.println("connection failed"); } } void loop() { // if there are incoming bytes available // from the server, read them and print them: if (client.available()) { char c = client.read(); Serial.print(c); } // if the server's disconnected, stop the client: if (!client.connected()) { Serial.println(); Serial.println("disconnecting."); client.stop(); // do nothing forevermore: while (true); } } |
شیلد اورجینال با لیبل آدرس مک
شیلد های چینی موجود در بازار ایران
سلام
من وقتی شیلد اترنت رو به آردوینو وصل می کنم و برنامه رو آپلود می کنم، ال ای دی های مربوطه همه روشن هستند (pwr, link, 100M, FULLD) و حتی گاهی rx, tx روشن می شوند اما Ethernet.hardwareStatus == EthernetNoHardware رو true می کنه! شما می دونید علت چی میتونه باشه؟
اترنت رو با یک کابل RJ45 به مودم و LAN محلی وصل کردم.
سلام
فکر میکنم – احتمالا شایط ارتباط سخت افزاری میکروکنترلر و ماژول برقرار نباشه یا مشکل داشته باشه
گام اول اینه که مطمئن بشید که ارتباط سخت افزاری مشکلی نداره برای این کار می تونید به شکل مستقیم یکی از رجیسترهای خواندنی ماژول رو بخونید ببینید مقدارش با مقدار درج شده توی دیتاشیت ماژول همخوانی داره یا نه
سلام آیا میتونم از طریق این برد تصویر انتقال بدم
سلام
شما از هر درگاه ارتباطی مثل این میتونید هر چیزی را انتقال بدید
منظورم اینکه اگه شبکه محلی نبود چی؟
دوستان اگه شبکه محلی نبود چی کار کنم؟
سلام
من تازه اومدم سمت اردوینو و یک مشکل در شبکه دارم
من یه اردوینوuno و شیلد شبکه w5100 دارم
فرض کنیم در شبکه محلی بر روی سرور به آدرس 192.168.1.1/ index . html صفه ای داریم که یک عدد به عنوان ورودی قبول میکنه و یک خروجی برمیگردونه
حالا چجووری در آردوینو یه مقدار به این آدرس بفرستم و چجوری مقدار برگشتی رو دریافت کنم؟
ممنون میشم راهنمایی بفرمایید
شما به دو طریق میتونید عدد رو روی یک صفحه ورودی بگیرید ؛ یکی استفاده از متد Get است و دیگری متد Post !
فکر میکنم با توجه به سخت افزار مورد استفاده شما ؛ بهترین راه استفاده از متد Get است.
ممنون
اما چجوری؟
برای متد GET باید پارامتر های مورد نیازتون رو توی URL قرار بدید یه مختصر از متد GET رو توی آموزش ساخت ربات تلگرام توضیح دادیم .
این آموزش
اگر دقیقا توضیح بدید که قصد چه کاری رو دارید ؛ بهتر میتونم راهنماییتون کنم