มาต่อกันที่พื้นฐานการใช้งาน Ethernet Shield กับ Arduino (ตอนที่ 2) ครับ
ถ้าใครยังไม่มีพื้นฐานการใช้งาน Ethernet Shield แนะนำให้กลับไปอ่าน ตอนที่ 1ก่อนนะครับ
วันนี้เริมจากการต่ออุปกรณ์แบบเดียวกับครั้งที่แล้วครับ
จากคราวที่แล้วเราได้ลองใช้ Ethernet Shield ของเราลองเรียกเว็บไซต์ยอดนิยมอย่าง www.google.com ดูแล้ว แต่ถ้าสังเกตนะครับ จะเห็นว่าเราจะต้องรู้ IP Address ของตัวเองซะก่อน ซึ่งในบางครั้งก็อาจจะเป็นปัญหาได้เหมือนกัน เช่น กรณีที่เราต้องใช้งาน Ethernet Shield หลายจุด แต่ละจุดจะต้องเข้ามาตั้งค่า IP Address แล้ว upload Sketch ทีละตัว คงไม่สนุกแน่นอนครับ โชคดีที่ตั้งแต่ Arduino IDE 1.0 ขึ้นไป เราไม่ต้องใส้ IP Address เองแล้วครับ Library ใน Arduino จัดการให้เองอัตโนมัติครับ
คราวนี้เรามาลองใช้ Arduino มาอ่านค่าบนเว็บไซต์ เช่น อ่านค่าหุ้นใน NewYork Stock Exchange แล้วแสดงค่าใน Serial monitor ก็ลอง Sketch นี้ดูครับ
(ตัวอย่างในบทความนี้มากจาก Arduino Cookbook ed.2nd โดย Michael Margolis สำนักพิมพ์ O'Rielly)
/*
* Web Client Google Finance sketch
* get the stock value for google and write to analog pin 3.
*/
#include // needed for Arduino versions later than 0018
#include
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char serverName[] = "www.google.com";
EthernetClient client;
float value;
void setup()
{
Serial.begin(9600);
if(Ethernet.begin(mac) == 0) { // start ethernet using mac & IP address
Serial.println("Failed to configure Ethernet using DHCP");
while(true) // no point in carrying on, so stay in endless loop:
;
}
delay(1000); // give the Ethernet shield a second to initialize
}
void loop()
{
Serial.print("Connecting...");
if (client.connect(serverName, 80)>0) {
client.println("GET //finance?q=google HTTP/1.0"); // todo
client.println("User-Agent: Arduino 1.0");
client.println();
}
else
{
Serial.println("connection failed");
}
if (client.connected()) {
if(client.find(""))
{
client.find(">"); // seek past the next '>'
value = client.parseFloat();
Serial.print("google stock is at ");
Serial.println(value); // value is printed
}
else
Serial.print("Could not find field");
}
else {
Serial.println("Disconnected");
}
client.stop();
client.flush();
delay(5000); // 5 seconds between each connect attempt
}
|
ตัวอย่างนี้ลองใช้ //GET เพื่อส่งข้อความไปถามที่ Server นะครับ
ถ้าไม่มีอะไรพลาด จะได้ผลแบบนี้ครับ
/*
* Web Server
* ตัวอย่างนี้ Arduino ของเราทำหน้าที่เป็น Server เพื่อส่งข้อมูลกลับให้ Web browser ที่
* เรียกนะครับ
*/
#include
#include
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 44}; // IP address of this web server
EthernetServer server(80);
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
}
void loop()
{
EthernetClient client = server.available();
if (client) {
// an http request ends with a blank line
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
// if we've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so we can send a reply
if (c == '\n' && current_line_is_blank) {
// send a standard http response header
client.println("HTTP/.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("Arduitronics Test");
client.println("
"); // output the value of each analog input pin
for (int i = 0; i < 6; i++) {
client.print("analog input ");
client.print(i);
client.print(" is ");
client.print(analogRead(i));
client.println("
"); }
break;
}
if (c == '\n') {
// we're starting a new line
current_line_is_blank = true;
} else if (c != '\r') {
// we've gotten a character on the current line
current_line_is_blank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
client.stop();
}
}
|
คำสั่งหลักๆ ที่ใช้คือ client.print() และ client.println() ซึ่งจะเป็นการส่งข้อความแบบ HTML ไปแสดงบน web Broswer ครับ ลักษณะการเขียน ถ้าสังเกตดูจะเป็นการเขียนโปรแกรมบน Arduino IDE เพื่อสร้าง HTML CODE ครับ
ถ้าใช้ Web Browser เรียก IP Address จะเห็นค่าดังนี้ครับ (ค่า Analog read ไม่เหมือนกันนะครับ)
ดังนั้นถ้าเปิดดู Code ที่ Web Broswer จะเป็นบน PC Macbook หรือ Android phone ก็สามารถรับค่ามาแสดงจะได้ดังนี้ครับ
|
ในส่วนนี้เราสามารถนำมาประยุกต์ให้ Arduino ของเราแสดงผลของค่าที่อ่านจาก Port Analog ซึ่งมาจาก Sensor ต่างๆ ที่เรานำมาติดตั้งนะครับ แต่อาจจะต้องมีการปรับปรุงค่าที่อ่านให้เหมาะสมบ้าง เช่น การแปลงช่วงอ่าน หรือ การแสดงค่าโดยแปลง Floating เป็น String ซะก่อนครับ
ยิ่งไปกว่านี้เราสามารถใช้ Arduino มารับค่ากลับมาเพื่อสั่งการทำงานบน port out ของ Arduino ก็ได้นะครับ เช่น การใช้ Web Browser เพื่อส่งคำสั่งเปิดปิด Relay ที่ต่อกับ Arduino ก็ได้ครับ ทำให้เราสามารถควบคุมอุปกรณ์ในบริเวณที่มีสัญญาณ Network ครอบคลุมพื้นที่ครับ
กลับไปดูบทความตอนที่ 1 ได้ ตามลิงค์ที่นี่ครับ
โดย Mountain "A"
หน้านี้เป็นสารบัญของบทความที่ปรากฏในเว็บของ Arduitronics.com นะครับ จะขอแบ่งออกเป็นหัวข้อตามกลุ่มของสินค้าในร้านดังต่อไปนี้
หน้าที่เข้าชม | 15,387,561 ครั้ง |
ผู้ชมทั้งหมด | 5,890,639 ครั้ง |
เปิดร้าน | 21 พ.ค. 2556 |
ร้านค้าอัพเดท | 13 ก.ย. 2568 |