Lab 5
การเชื่อมต่อ Arduino กับเครือข่าย Internet ด้วย Ethernet Shield
VDO Link: https://www.youtube.com/watch?v=3x_OyMFEk8E
ระดับความยากง่าย
● ง่าย
ประมาณเวลาที่ใช้เรียนรู้ + ลงมือทำตาม
● 30 นาที - 1 ชั่วโมง
Prerequisite ต้องผ่านหัวข้อหรือใบงานกิจกรรมใดมาก่อน
● Module Arduino on NETPIE Lab 1 การติดตั้ง Arduino IDE และทดสอบการทำงานเบื้องต้นของ Arduino Mega 2560 (https://netpie.gitbooks.io/netpie-lab-4-arduino-on-netpie/content/introduction.html)
วัตถุประสงค์
- เพื่อให้รู้วิธีการเขียนโปรแกรมให้ Arduino Mega 2560 เชื่อมต่อกับเครือข่าย Internet ด้วย Ethernet Shield
อุปกรณ์ที่ใช้ในการทดลอง
1.บอร์ด Arduino Mega 2560
2.บอร์ด Ethernet W5100 R3
เนื้อหาเชิงทฤษฎี
ในการทดลองนี้ เกี่ยวข้องกับพื้นฐานการเขียนโปรแกรมให้บอร์ด Arduino Mega 2560 ซึ่งรองรับการเชื่อมต่อกับบอร์ด Ethernet Shield ให้สามารถเชื่อมต่อกับ Internet
คุณสมบัติของ Ethernet Shield
ในใบงานนี้นั้นเพื่อให้เป็นไปในทางเดียวกัน จึงขอกำหนดบอร์ด Ethernet Shield ที่ใช้เป็นรุ่น W5100 ซึ่งมีคุณสมบัติคือ
● รองรับกับการเชื่อมต่อบอร์ด Arduino ได้ด้วยขา SPI
● ทำงานที่แรงดันไฟฟ้า 5 V
● มี Ethernet Controller W5100
● ความเร็วในการเชื่อมต่อ 10/100 Mbps
● รองรับมาตรฐาน IEEE802.3af การเชื่อมต่อแบบ Power over Ethernet (PoE)
ฟังก์ชั่นของโปรแกรมที่ควรทราบ
• serial.begin
serial.begin เป็นฟังก์ชั่นที่ใช้ในการตั้งค่าความเร็วในการส่งข้อมูลของพอร์ตserial ที่เชื่อมต่อระหว่างบอร์ดกับคอมพิวเตอร์
Syntax:
serial.begin(speed)
Parameter:
speed: ความเร็วในการรับส่งข้อมูล หน่วยเป็นบิตต่อวินาที (baud)
• serial.print
serial.print เป็นฟังก์ชั่นเพื่อให้บอร์ดส่งค่าข้อมูลออกไปพิมพ์ทางพอร์ต serial
Syntax:
serial.print(val)
serial.print(val, format)
Parameter:
val: ค่าข้อมูลที่ต้องการพิมพ์ จะเป็นชนิดใดก็ได้
format:ใช้ในกรณีตัวเลข และต้องการระบุฐานของตัวเลข หรือจำนวนทศนิยมเช่น BIN, DEC, HEX, 1 (ทศนิยม 1 หลัก)
• serial.println
serial.println เป็นฟังก์ชั่นที่ทำงานเหมือนกับ serial.printต่างกันตรงที่เมื่อใช้คำสั่ง serial.printlnจะขึ้นต้นบรรทัดใหม่เมื่อพิมพ์ค่าข้อมูลเสร็จ
Syntax:
serial.println(val)
serial.println(val, format)
Parameter:
val: ค่าข้อมูลที่ต้องการพิมพ์ จะเป็นชนิดใดก็ได้
format:ใช้ในกรณีตัวเลข และต้องการระบุฐานของตัวเลข หรือจำนวนทศนิยม เช่น BIN, DEC, HEX, 1 (ทศนิยม 1 หลัก)
• Ethernet.begin
Ethernet.begin เป็นฟังก์ชั่นเพื่อเตรียมการ Ethernet Library และตั้งค่าเครือข่าย
Syntax:
Ethernet.begin(mac)
Ethernet.begin(mac,ip)
Parameter:
mac: หมายเลข MAC Address ของบอร์ด Ethernet
ip:หมายเลข IP Address ของอุปกรณ์
ขั้นตอนการทดลอง
1.ต่อบอร์ด Arduino Mega 2560 เข้ากับบอร์ด Ethernet Shield และเสียบสายแลนเข้ากับ Router ดังภาพ
2.โปรแกรม Arduino IDE แล้วคลิกที่เมนู File -> New File
3.เขียนโค้ดข้างล่างลงในโปรแกรม เพื่อต่อ Arduino Mega 2560 เข้ากับบอร์ด Ethernet Shield สู่ Internet ผ่าน Router
#include<Ethernet.h>
byteMy_MAC_address[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // ดูจาก MAC address บนบอร์ดของEthernet Shield
voidsetup()
{
Serial.begin(115200);
Serial.println("Starting...");
// start the Ethernet connection:
while(Ethernet.begin(My_MAC_address) != 1)
{
Serial.print(".");
}
Serial.print("My IP :");
Serial.println(Ethernet.localIP());
}
voidloop()
{
}
คำอธิบายโปรแกรม
ส่วนการกำหนด #include เป็นการประกาศเรียกใช้ไลบรารี่ Ethernet โดยที่ Ethernet.h นี้มีอยู่แล้วในโปรแกรม Arduino IDE จึงไม่ต้องมีการดาวน์โหลดหรือติดตั้งเพิ่มเติมใดๆ ก่อนเรียกใช้
ส่วนภายในฟังก์ชั่น setup() เริ่มจากตั้งค่าความเร็วเริ่มต้นของ Serial ที่ 115,200 bits/s (ค่าความเร็วของ Serial นี้ต้องตั้งให้เท่ากันทั้งสองฝั่ง ในที่นี้ในฝั่ง Arduino IDEก็ต้องใช้ค่านี้ด้วย) เมื่อตั้งความเร็วสายแล้ว สั่งพิมพ์คำว่า Starting… ออกที่หน้าจอคอมพิวเตอร์ และเริ่มทำการเชื่อมต่อกับ Router ด้วยคำสั่ง Ethernet.begin โดยพารามิเตอร์ My_MAC_addressในที่นี้คือหมายเลข Media Access Control (MAC) ของ Ethernet Shield สามารถดูได้บนบอร์ด Ethernet Shield ดังภาพ
หากยังเชื่อมต่อไม่เสร็จ จะพิมพ์ . เพิ่มในหน้าจอไปเรื่อยๆ และเมื่อเชื่อมต่อเรียบร้อยแล้ว จะแสดงหมายเลข IP Address ของ Arduino Mega 2560 ที่ได้รับมา ด้วยคำสั่ง Ethernet.localIP
4.คลิกที่ปุ่ม เพื่อคอมไพล์โค้ด แล้วทำการบันทึกไฟล์เป็น “Connect_Ethernet” ไว้บน Desktop หากไม่มีข้อผิดพลาด ทำการอัพโหลดโดยคลิกปุ่ม เมื่อเสร็จเรียบร้อยแล้วจะปรากฏข้อความ “Done uploading” ขึ้นดังภาพ
5.คลิกที่ปุ่ม (Serial monitor) และทำการกดสวิตช์ค้างไว้สังเกตผลลัพธ์บนจอดังภาพ
สรุปผล
ในการทดลองนี้ผู้ศึกษาได้เขียนโปรแกรมเพื่อให้บอร์ด Arduino Mega 2560 ซึ่งรองรับการเชื่อมต่อกับบอร์ด Ethernet Shield เชื่อมต่อกับเครือข่าย Internet โดยผ่าน Router
แบบฝึกหัดทดสอบความเข้าใจ
- คำสั่งอะไรที่ใช้ตรวจสอบสถานะว่าบอร์ดเชื่อมต่อกับ Router อยู่หรือไม่
- จากการทดลอง หากต้องการทราบหมายเลข IP Address ที่ Arduino Mega 2560 ได้รับมาจาก Router นั้น จะต้องใช้คำสั่งอะไร
เฉลย-แบบฝึกหัดทดสอบความเข้าใจ
while(Ethernet.begin(My_MAC_address) != 1);
Ethernet.localIP();
VDO Link : https://www.youtube.com/watch?v=3x_OyMFEk8E