0 đánh giá

Lập trình Ethernet Shield với Arduino

Ethernet Shield giúp bạn kết nối Board arduino của bạn đến internet dễ dàng, cho phép ta gửi và nhận dữ liệu từ bất kỳ đâu. Bạn có thể điều khiển Robot từ xa, bật chuông hoặc đèn ..qua kết nối internet dễ dàng. Nào ta bắt đầu

Bước 1: Cài đặt

Bạn cần 1 Board Arduino UNO, Arduino Ethernet Shield. Tiến hành cắm Shield lên Arduino, chú ý hướng cắp để sao cho các chân cắm vừa khớp với nhau

Bước 2: Sơ lượt về Arduino Ethernet Shield

Shield dựa trên Chip W51000, có bộ đệm 16KB, tốc độ 10/100MB. Có sẵn thư viện lập trình đi kèm, Nó có đính kèm thẻ SD, nới bạn có thể lưu trữ trang web của bạn và truy cập dễ dàng dùng Arduino. Có tích hợp thêm module Power over Ethernet (PoE) , giúp bạn có thể đánh thức Board Arduino của bạn từ xa qua kết nối Ethernet. Bạn có thể tham khảo thêm tại http://arduino.cc/en/Main/ArduinoEthernetShield

Bước 3: Bắt đầu

Tiến hành cắm cổng USB của Arduino vào máy tính, cắm Shield trực tiếp vào Router qua cổng RJ45. Tiếp bạn mở Arduino IDE lên.

vào File --> Examples --> Ethernet --> DhcpAddressPrinter để cài IP cho shield. Đầu tiên bạn cần thay đổi địa chỉ MAC cho tương ứng vơi MAC của board. Tiếp theo, bạn tiến hành dịch và Upload code lên Board, Mở Serial Monitor lên, bạn sẽ thấy IP hiện tại của Shield của bạn.

Bước 4: Làm máy chủ Web

Bạn có thể dùng Arduino Shield để làm máy chủ Web hoặc máy chủ cho CHAT. bạn có thể đọc thông tin được gửi bởi 1 client qua trình duyệt web, phân tích URL và đưa ra phản hồi bằng HTML tương ứng. Quan trọng là bạn cần nhớ địa chỉ IP được lấy ở trên để tiến hành truy cập. 

Đoạn mã nguồn sau để giúp hiển thị trạng thái của chân số 2 khi nhấn nút nhấn được nối với chân này. Tiến hành Upload code vào board và truy cập vào địa chỉ IP phía trên từ trình duyệt web trên máy tính bạn sẽ thấy kết quả

/*
  Web Server Demo
 
 Nối dây:
 * Ethernet shield nối với chân 10, 11, 12, 13
 * Nút nhấn nối với chân SỐ số 2(D2) và 5V
 * Nối trở 10K ở chân SỐ số 2(D2) và ground
 

 */

#include <SPI.h>
#include <Ethernet.h>

// Nhận MAC của Shield Ethernet vào đây

byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };

// Nhập IP của Shield, được lấy ở bước trên.
IPAddress ip(191,11,1,1);

// Khởi động Webserver ở cổng 80.
EthernetServer server(80);

int buttonPress = 1;

void setup()
{
  pinMode(2, INPUT);

  // Khởi động Ethernet và Webserver.
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  buttonPress = digitalRead(2); 
  // chờ yêu cầu...từ client
  EthernetClient client = server.available();
  if (client) {
    // 
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == 
 && currentLineIsBlank) {
          // gửi Header chuẩn cho Webpage
          client.println(HTTP/1.1 200 OK);
          client.println(Content-Type: text/html);
          client.println();
          
          //Nếu nút được nhấn thì sẽ hiển thị LIGHT, ngược lại là DARK. khi thay đổi trạng thái, bạn chỉ cần refresh lại địa chỉ web của bạn.
          if (buttonPress == 1) {
            client.println(<cke:html><cke:body bgcolor=#FFFFFF>LIGHT!</cke:body></cke:html>);
          }
          else if (buttonPress == 0){
            client.println(<cke:html><cke:body bgcolor=#000000 text=#FFFFFF>DARK!</cke:body></cke:html>);
          }
          

          break;
        }
        if (c == 
) {
          currentLineIsBlank = true;
        } 
        else if (c != r) {
          currentLineIsBlank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}

Đoạn mã dưới đây sẽ giúp bạn điều khiển LED sáng, tắt qua trình duyệt Web.

/*
  Web Server Demo
 
 Nối dây:
 * Ethernet shield nối với chân 10, 11, 12, 13
 * Nút nhấn nối với chân SỐ số 2(D2) và 5V
 * Nối LED vào chân D2 và nối trở 220Ohm xuống ground.
 

 
 Để bật LED bạn vào địa chỉ sau từ trình duyệt
 http://your-IP-address/$1
 
 Để tắt LED bạn vào địa chỉ
 http://your-IP-address/$2 
 
 */

#include <SPI.h>
#include <Ethernet.h>

boolean incoming = 0;

byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };
IPAddress ip(191,11,1,1); //<<< ENTER YOUR IP ADDRESS HERE!!!

EthernetServer server(80);

void setup()
{
  pinMode(2, OUTPUT);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
}

void loop()
{
  
  EthernetClient client = server.available();
  if (client) {
    
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        
        if(incoming && c ==  ){ 
          incoming = 0;
        }
        if(c == $){ 
          incoming = 1; 
        }
        
        if(incoming == 1){
          Serial.println(c);
          
          if(c == 1){
            Serial.println(ON);
            digitalWrite(2, HIGH);
          }
          if(c == 2){
            Serial.println(OFF);
            digitalWrite(2, LOW);
          }
        
        }

        if (c == 
) {         
          currentLineIsBlank = true;
        } 
        else if (c != r) {          
          currentLineIsBlank = false;
        }
      }
    }    
    delay(1);
    client.stop();
  }
}

 

Bước 5: Dùng làm Client

Bạn có thể dùng Shield như một Client , bạn có thể gọi truy cập đến một website bất kỳ để lấy thông tin. Đoạn chương trình dưới đây sẽ đọc một Tweet tử Twitter và bật tắt LED. 

 * Ethernet shield nối với chân 10, 11, 12, 13
 * Nút nhấn nối với chân SỐ số 2(D2) và 5V
 * Nối LED vào chân D2 và nối trở 220Ohm xuống ground.

/*
  Đọc nội dung từ Twitter qua Ethernet Shield.
  bạn phải Tweet lên Twitter của bạn nội dung kiểu như: <text>bật LED</text>
 */
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x01 };
IPAddress ip(191,11,1,1); //<<< ENTER YOUR IP ADDRESS HERE!!!

EthernetClient client;

const int requestInterval = 60000;  // thời gian chờ giữa 2 lần đọc nội dung twitter.

char serverName[] = api.twitter.com;  // twitter URL

boolean requested;                   // 
long lastAttemptTime = 0;            // 

String currentLine = ;            // 
String tweet = ;                  // 
boolean readingTweet = false;       //

void setup() {
  
  pinMode(2, OUTPUT);
  
  currentLine.reserve(256);
  tweet.reserve(150);

// initialize serial:
  Serial.begin(9600);
  // Khởi động DHCP để router cấp IP cho shield của bạn:
  if (!Ethernet.begin(mac)) {
    // nếu DHCP không thành công thì bạn gửi yêu cầu IP này cho địa chỉ MAC của ta:
    Ethernet.begin(mac, ip);
  }
  // Nối đến Twitter
  connectToServer();
}



void loop()
{
  if (client.connected()) {
    if (client.available()) {
      char inChar = client.read();

      currentLine += inChar; 

      if (inChar == 
) {
        currentLine = ;
      } 
      // nếu Tweet của bạn có chứa từ <text> thì tweet này được xem là để ĐK led, ta tiến hành tách nội dung nằm giữa <text>
      if ( currentLine.endsWith(<text>)) {
        readingTweet = true; 
        tweet = ;
      }
      if (readingTweet) {
        if (inChar != <) {
          tweet += inChar;
        } 
        else {
          readingTweet = false;
          Serial.println(tweet);
          //Tweet của bạn có nội dung bật LED thì bật LED lên và ngược lại
          if(tweet == >bật LED){
           digitalWrite(2, HIGH);
           Serial.println(LED ON!);
          }
          if(tweet != >bật LED){
           digitalWrite(2, LOW);
           Serial.println(LED OFF!);
          }
          
          client.stop(); 
        }
      }
    }   
  }
  else if (millis() - lastAttemptTime > requestInterval) {
    connectToServer();
  }
}

void connectToServer() {
  // attempt to connect, and wait a millisecond:
  Serial.println(connecting to server...);
  if (client.connect(serverName, 80)) {
    Serial.println(making HTTP request...);
  // make HTTP GET request to twitter:
    client.println(GET /1/statuses/user_timeline.xml?screen_name=RandyMcTester&count=1 HTTP/1.1);
    client.println(HOST: api.twitter.com);
    client.println();
  }
  // note the time of this connect attempt:
  lastAttemptTime = millis();
}   

 

(!) Nếu có bất kỳ thắc mắc nào cần hỏi vui lòng đặt câu hỏi tại HỏiHay.Net, Cộng đồng Hỏi đáp Hỏi Hay sẽ trả lời bạn.
5,657 lượt xem ^tháng ^ngày, ^năm
admin 2,030 điểm

Please log in or register to Comment this Media.