Học arduino phần 19. Giao tiếp Arduino với máy tính

No Comments

Phần này gồm các dự án 60, 61 và 62

Nội dung chính trong phần này

  • Xây dựng lên một máy chủ web để hiện thị dữ liệu lên trên đó
  • Dùng Arduino để gửi thông tin lên mạng xã hội ( Facebook, Twitter )
  • Điều khiển một cách từ xa các đầu ra số của Arduino từ trình duyệt web

Những gì bạn cần

Để xây dựng những dự án liên quan đến Internet bạn cần phải cần chuẩn bị một số kiến thức về phần cứng và các thông tin liên quan.

Chúng ta sẽ tìm hiểu về  phần cứng :  Bạn cần một Ethernet Shield với chip điều khiển là W5100. Bạn sẽ có hai lựa chọn để phân vân đó là Arduino Ethernet shield hình 19-1 hoặc bạn có thể dùng bo Arduino Uno – đã được tích hợp sẵn phần cứng Ethernet như là bo Freetronics EtherTen hình 19-2. Lựa chọn Freetronics EtherTen sẽ tốt hơn đối với các dự án mới mà bạn muốn tiết kiệm không gian vật lý và tiền. Như bạn thấy, nó có các chân kết nối như Arduino, một cổng USB, một khe cắm Ethernet, một thẻ nhớ đầu dắt microSD.

Bỏ qua một bên sự lựa chọn phần cứng của bạn, bạn cần phải có một dây cáp chuẩn để đảm bảo kết nối như 10/100 CAT5, CAT5E hay CAT6 để kết nối giữa Ethernet Shield với modem mạng nhà bạn.

Thêm nữa, bạn cần phải có một địa chỉ IP từ modem mạng, một địa chỉ ví dụ như 192.168.0.1, và một địa chỉ IP của máy tính có địa chỉ được lấy từ modem đó.

Cuối cùng, nếu bạn muốn giao tiếp với Arduino từ bên ngoài nhà hay từ mạng nội bộ bạn sẽ cần phải có một địa chỉ IP tĩnh hoặc động . Địa chỉ IP tĩnh là địa chỉ cố định, nó chỉ được cung cấp bởi nhà cung cấp dịch vụ Internet, vậy nếu bạn muốn sử dụng phương thức này thì bạn phải hỏi nhà cung cấp và bạn sẽ phải trả một khoản phí cho việc này.

Bây giờ hãy bắt tay vào làm một số project nào !

Học Arduino_Dự án 60 : Xây dựng một trạm điều khiển từ xa

Trong những dự án ở chương trước, chúng ta tập trung vào việc lấy dữ liệu từ các cảm biến nhiệt độ và ánh sáng. Trong dự án lần này, bạn sẽ học được như thế nào để hiện thị các giá trị đó lên máy chủ web (web server), bạn có thể truy cập mọi lúc, mọi nơi khi trang web được kích hoạt. Dự án này sẽ hiện thị giá trị của các đầu vào tương tự và các trạng thái của chân số từ 0 – 9 lên máy chủ web như là một thí dụ cho tình huống giám sát từ xa.

Khi sử dụng  khung (Framework) này, bạn có thể thêm các cảm biến tương tự hay số, ví dụ như cảm biến nhiệt độ, ánh sáng và cảm biến chuyển, sau đó hiện thị giá trị của các cảm biến đó lên  web.

Phần cứng cần thiết

     Dưới đây là những gì bạn cần trong dự án này:

  • Một cáp USB
  • Một cáp mạng
  • Một Arduino Uno và Ethernet Shield, hoặc Freetronics EtherTen

Chương trình

#include <SPI.h>

#include <Ethernet.h>

  1.       IPAddress ip(xxx,xxx,xxx,xxx); // Thay thế địa chỉ ip của bạn
  2. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

EthernetServer server(80);

void setup()

{

// Bắt đầu kết nối Ethernet và máy chủ

Ethernet.begin(mac, ip);

server.begin();

for (int z=0; z<10; z++)

{

pinMode(z, INPUT); // cài địa chỉ chân đầu vào (0  9)

}

}

void loop()

{

// chờ đợi kết nối

EthernetClient client = server.available();

if (client) {

// một yêu cần của http sẽ kết thúc với một dòng trống (blank line)

boolean currentLineIsBlank = true;

while (client.connected()) {

if (client.available()) {

char c = client.read();

if (c == ‘\n’ && currentLineIsBlank) {

client.println(“HTTP/1.1 200 OK”);

client.println(“Content-Type: text/html”);

client.println(“Connection: close”);

client.println();

client.println(“<!DOCTYPE HTML>”);

client.println(“<html>”);

// cài meta, trình duyệt của bạn sẽ cập nhập sau mỗi 5s

  1. client.println(“<meta http-equiv=\”refresh\” content=\”5\”>”);

// giá trị ra các đầu vào tương tự trên trang web

for (int analogChannel = 0; analogChannel < 6; analogChannel++) {

int sensorReading = analogRead(analogChannel);

  1. client.print(“analog input “);

client.print(analogChannel);

client.print(” is “);

client.print(sensorReading);

client.println(“<br />”);

}

// Đầu ra giá trị của chân số 0 – 9 tới trang web

for (int digitalChannel = 0; digitalChannel < 10; digitalChannel++)

{

boolean pinStatus = digitalRead(digitalChannel);

client.print(“digital pin “);

client.print(digitalChannel);

client.print(” is “);

client.print(pinStatus);

client.println(“<br />”);

}

client.println(“</html>”);

break;

}

if (c == ‘\n’) {

// Bạn đang bắt đầu một hàng mới

currentLineIsBlank = true;

}

else if (c != ‘\r’) {

// Bạn đã nhận được một ký tự trên dòng hiện tại

currentLineIsBlank = false;

}

}

}

// Thời gian trễ 1s

delay(1);

// kết thúc các kết nối

client.stop();

}

}

Chúng ta sẽ tìm hiểu về chương trình này kỹ một lát sau, Bây giờ trước khi nộp chương trình cho Arduino, bạn cần nhập địa chỉ IP từ Ethernet Shield , địa chỉ đó nằm trong mạng nội bộ của modem nhà bạn. Bạn có thể xác định 3 khúc đầu của mạng vd ( 192.168.0 ) bằng cách kiểm tra địa chỉ mạng từ modem. Ví dụ, địa chỉ router nhà bạn là 192.168.0.1  khi thay đổi thành 192.168.1.x  với x [1, 254] mà chưa được sử dụng trên mạng đó. Bạn nhập vào chương trình trên :

IPAddress ip(192, 168, 0, 69); // Ethernet shield’s IP address

Khi bạn đã thay đổi , lưu lại code và nộp vào cho  Arduino, kết nối cap giữa Ethernet Shield và modem hay router nhà bạn,

Chờ khoảng 20s, sau đó sử dụng trình duyệt web, nhập địa chỉ IP bạn đã đặt vào, nó sẽ hiện ra cửa sổ như hình 19-3. Nếu bạn thấy như vậy thì chứng tỏ nó hoạt động tốt.

Hình 19-3: Giá trị các chân được hiện thị lên web khi  chúng ta thay đổi trạng thái

Xử lý các lỗi thường xảy ra

Nếu chương trình của bạn không chạy được, thử một trong số các phương pháp sửa lỗi sau:

  • Kiểm tra lại địa chỉ IP và đặt lại một cách chính xác
  • Kiểm tra bạn đã gõ đúng chương trình chưa và nộp lại cho Arduino
  • Kiêm tra kỹ mạng nội bộ. Bạn có thể kiểm tra liệu một máy tính đã kết nối với mạng đó có thể truy cập vào mạng hay không.
  • Nếu như bạn đang truy cập bằng điện thoại, chắc chắn rằng điện thoại của bạn đang kết nối với wifi từ modem.
  • Kiểm tra xem đèn Led trên bo Ethernet Shield có sáng khi cấp điện hay không, nếu không hãy thử thay thế một dây cáp khác.

Cách thức hoạt động

Khi trạm điều khiển đã hoạt động , bạn quay lại chương trình để thêm vào một phần quan trọng. Chương trình từ bắt đầu đến đoạn số 3 là đoạn chương trình bắt buộc bởi vì nó dùng để kích hoạt phần cứng của bo Ethernet, thêm những thư viện cần thiết, và bắt đầu khởi tạo chương trình với void setup. Ở trước đoạn 3 các  lệnh client.print dùng để cài đặt bố trí thông tin trên trang web. Từ 3 trở đi, bạn có thể sử dụng lệnh client.printclient.println để hiện thị thông tin lên những nơi bạn muốn . Ví dụ, các dòng lệnh sau được dùng để hiện thị 6 dòng đầu tiên trên trang web hình 19-3.

client.print(“analog input “);

client.print(analogChannel);

client.print(” is “);

client.print(sensorReading);

Tại 4 trong chương trình, bạn sẽ thấy một ví dụ về viết văn bản và nội dung của một biến lên trang web Ở đây bạn có thể sử dụng HTML để kiểm soát giao diện trang web. miễn là bạn không lạm dụng bộ nhớ của nó. Nói cách khác, bạn có thể sử dụng nhiều mã HTML bạn  cho đến khi bạn đạt đến kích thước tối đa của trang web cho phép. Số lượng bộ nhớ trong bảng Arduino (Kích thước cho từng loại bảng được mô tả trong Bảng 11-2).

Một điều đáng chú ý nữa là địa chỉ MAC mà các mạng có thể sử dụng để phát hiện các thiết bị (về mặt cứng  bởi vì một máy, thiết bị chỉ có duy nhất một địa chỉ MAC). Nó có thể thay đổi bằng cách thay đổi một trong các giá trị thập phân tại 2, nếu hai hoặc nhiều dự án đang chạy trên nền tảng Arduino bạn phải đặt cho chúng các địa chỉ MAC riêng.

Cuối cùng, nếu bạn muốn hiện thị nội dung web bạn tạo ra trên một thiết bị không được kết nối với internet nhà bạn, bạn cần dùng kỹ thuật chuyển hướng  “port forwarding” trong router hay modem mạng nhà bạn với địa chỉ công cộng được lấy từ nguồn các trang web như no-ip (http://www.no-ip.com/) hay (http://dyn.com/dns/). Bạn có thể tìm hiểu sâu hơn về kỹ thuật chuyển hướng cổng mạng trên http://www.wikihow.com/Port-forwad/ .

Kết thúc dự án này, bạn biết được làm thế nào để đưa thông tin và các biến lên trên máy chủ web.

Học Arduino_Dự án 61: Tạo một Arduino gửi thông tin

     Trong dự án này, bạn sẽ học làm thế nào để đưa thông tin lên Twitter bằng cách sử dụng Arduino. Bạn có thể nhận được tất cả các dạng  thông tin được tạo ra từ chương trình từ mọi thiết bị truy cập với Twitter. Ví dụ, bạn muốn cập nhật nhiệt độ hàng giờ từ nhà của bạn trong khi bạn không ở nhà hoặc đang đi công tác ở xa, hay việc gửi thông báo các con của bạn ở nhà hay đi chơi thì dự án này đưa ra một giải pháp tiết kiệm.

Arduino của bạn sẽ cần một Twitter account, nếu chưa có hãy làm theo cách sau.

  • Truy cập http://twitter.com/ và tạo một tài khoản cho Arduino, ghi lại tài khoản và mật khẩu của bạn.
  • Nhận mã thông báo từ trang web xử lý thứ 3 http://arduino-tweet.appspot.com/, tạo cầu nối giữa Arduino với dịch vụ Twitter. Bạn chỉ cần làm theo bước 1 từ trang web này.
  • Sao chép và dán mã thông báo (cùng với chi tiết tài khoản Twitter mới của Arduino) vào một thư mục txt trên máy tính của bạn.
  • Tải và cài đặt thư viện Twitter Arduino được cung cấp bởi trang web sau : http://playground.arduino.cc/Code/TwitterLibrary.

Phần cứng cần thiết

     Dưới đây là những gì bạn cần trong dự án này:

  • Một cáp USB
  • Một cáp mạng
  • Một Arduino Uno và Ethernet Shield, hoặc Freetronics EtherTen

Chương trình

Nhập chương trình sau vào, và đừng nộp vào Arduino sớm

// Project 61 – Creating an Arduino Tweeter

#include <SPI.h>

#include <Ethernet.h>

#include <Twitter.h>

  1. 1. byte ip[] = { xxx,xxx,xxx,xxx };
  2. 2. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
  3. Twitter twitter(“token”);
  4. char msg[] = “I’m alive!”; // message to tweet

void setup()

{

delay(30000);

Ethernet.begin(mac, ip);

Serial.begin(9600);

}

void loop()

{

Serial.println(“connecting …”);

if (twitter.post(msg)) {

int status = twitter.wait();

  1. if (status == 200) {

Serial.println(“OK.”);

} else {

Serial.print(“failed : code “);

Serial.println(status);

}

} else {

Serial.println(“connection failed.”);

}

do {} while (1);

}

Như ở trong project 60, Thêm địa chỉ IP vào 1, chỉnh sửa địa chỉ MAC nếu cần thiết tại 2. Sau đó chèn mã thông báo Twitter giữa ngoặc kép. Cuối cùng, thêm text bạn muốn gửi đi tại 4. Bây giờ hãy nộp chương trình, kết nối phần cứng với mạng.  Sau khoang 1 phút hoặc hơn trang Twitter sẽ hiện ra đoạn text bạn nhập vào.

Hình 19-4: Thông tin gửi lên từ Arduno

Khi bạn tạo thông tin để gửi lên Twitter, lưu ý rằng bạn không thể gửi 2 thông tin liên tiếp cách nhau chưa đầy 1 phút, đây là luật của Twitter. Khi gửi thông tin lên Twitter, nó sẽ phải hồi lại cho chúng ta đoạn chương trình trạng thái. Chương trình sẽ nhận và hiện thị nó trê trạm điều khiển sử dụng code ở đoạn 5, một ví dụ ở hình 19-5. Nếu bạn nhận một tin nhắn như “403” thì mã thông báo của bạn không chính xác hoặc bạn có thao tác gửi quá nhanh. Danh sách đầy đủ các lỗi cơ bản được tìm ở (http://dev.twitter.com/docs/error-codes-responses/.)

Điều khiển Arduino của bạn thông qua web

Bạn có thể điều khiển Arduino thông qua trình duyệt web của bạn bằng một vài cách, sau một cuộc nghiên cứu, tìm hiểu tôi đã phát hiển ra một phương pháp đáng tin cậy, đảm bảo và miễn phí đó là: Teleduino.

Hình 19-5: Kết quả khi  thao tác gửi quá nhanh

Teleduino là một dịch vụ free được tạo ra bởi Kennedy Người tâm huyết với Arduino tại  New ZeaLand. Đó là một công cụ đơn giản nhưng đủ mạnh mẽ để tương tác, giao tiếp với Arduino qua Internet. Nó không yêu cầu bất chươn trình đặc biệt hoặc tùy chỉnh nào, thay vào đó nó, bạn chỉ cần sử dụng Tededuino để điều khiển các đầu ra số, các lệnh I2C. và nhiều tính năng khác. Trong Dự án 62, bạn sẽ học cách giao tiếp với Teleduino và điều khiển từ xa các đầu ra kỹ thuật số từ một thiết bị kết nối web.

Học Arduino_Dự án 62: Cài đặt một bộ điều khiển từ xa cho Arduino

  Trước khi bắt đầu vơi Tededuino, bạn phải đăng ký với dịch vụ Tededuino để lấy một “key” để xác định Arduino của bạn. Trang web https://www.teleduino.org/tools/request-key/, nhập các thông tin yêu cầu. Bạn sẽ nhận được một email chứa nội dung là key được cung cấp từ tededuino dịch vụ, nó giống như : 187654321Z9AEFF952ABCDEF8534B2BBF.

Tiếp theo, chuyển đổi key của bạn thành biến mảng bằng cách truy cập vào https: // www.teleduino.org / tools / arduino-sketch-key /. Nhập key của bạn và nó sẽ trả về một mảng tương tự như trong hình 19-6.

Hình 19-6: Tededuino key theo mảng

Mỗi key là duy nhất đối với một Arduino, bạn sẽ phải  nhận thêm nếu bạn muốn chạy nhiều dự án Teleduino trong một thời điểm.

Phần cứng cần thiết

     Dưới đây là những gì bạn cần trong dự án này:

  • Một cáp USB
  • Một cáp mạng
  • Một Arduino Uno và Ethernet Shield, hoặc Freetronics EtherTen
  • Một điển trở 560 (R1)
  • Một bo mạch test
  • Một đèn LED

Kết nối phần cứng và chân đầu ra  như hình  19-7

Chương trình

Dự án Teleduino  sử dụng một chương trình bao gồm thư viện Teleduino. Dưới đây là cách để truy cập lấy chương trình.

  1. Tải và cài đặt thư viện Teleduino tại http://www.teleduino.org/downloads/.
  2. Khởi động lại Arduino IDE và chọn File Examples Teleduino328TeleduinoEthernetClientProxy.
  3. Bây giờ bạn nhìn lên chương trình, trước khi nộp cho Arduino, thay thế key mặc định với mảng key ta tạo ra lúc nãy. Ở dòng 36 trong chương trình. Khi bạn đã thay thế nó xong, lưu chương trình và nộp cho Arduino.

Bây giờ kết nối các phần cứng cần thiết và quan sát trạng thái của Led. Sau khoảng 1 phút, nó sẽ nháy một vài lần sau đó sẽ reset lại. Số lượng nháy Led đại diện cho trạng thái của Teleduino thể hiện ở dưới bảng 19-1.

Bảng 19-1: Số lần nhấp nháy tương ứng với trạng thái của Teleduino

Nếu bạn nhìn thấy đèn Led nhấp nháy 5 lần, khi đó thì một Arduino khác đã nộp chương trình chứ key của bạn và kết nối tới máy chủ Teleduino. Khi nhấp nháy 10 lần, bạn nên kiểm tra lại phần cứng và các kết nối internet. Một khi Arduino đã kết nối, nó sẽ nháy 5 lần hoặc hơn. Bởi vì trạng thái Led được điều khiển tại chân 8, bạn không thể sử dụng nó cho một mục đích khác trong khi bạn đang dùng Teleduino.

Điều khiển từ xa Arduino của bạn

Để điều khiển Teleduino một cách từ xa, bạn có thể dùng mọi thiết bị có trình duyệt web, để điều khiển Arduino  ta điều khiển bằng cách nhập vào URL mà ta đã tạo  http://us01.proxy.teleduino.org/api/1.0/328.php?k=<YOURKEY>&r=setDigitalOutput&pin=<X>&output=<S>.

Bạn cần thay đổi 3 thông số trong URL: Đầu tiên, thay thế <YOURKEY> với key bạn nhận được từ trang Teleduino. Thứ hai, thay thế <X>  bằng số thứ tự chân đầu ra số mà bạn muốn điều khiển. Cái cuối cùng, thay thế <S> bằng 0 cho tín hiệu mức LOW, 1 cho tín hiệu mức HIGH. Ví dụ để chuyển đầu ra số 7 lên HIGH. Ta nhập dòng sau : http://us01.proxy.teleduino.org/api/1.0/328.php?k=<YOURKEY>&r=setDigitalOutput& pin=7&output=1.

Sau khi gửi lệnh thành công, bạn sẽ nhìn được hình tương tự như hình dưới trên trình duyệt web.

Nếu gửi lệnh thất bại, bạn sẽ nhìn được tin nhắn báo lỗi như:

Bạn có thể gửi lệnh để chuyển trạng thái từ HIGH xuống LOW hoặc LOW lên HIGH bằng việc điều chỉnh URL. Sau khi bạn đã tạo xong các URL cho dự án của bạn. Đánh dấu chúng, hoặc tạo ra một mạng nội bộ điều khiển dưới dạng các phím bấm. Ví dụ, bạn có thể gửi một URL với nội dung  đưa tín hiệu chân 7 lên mức 1 (HIGH), các chân còn lại đặt mức 0 (LOW).

Trong một số trường hợp, trạng thái đầu ra của Arduino có thể bị đánh giá chưa tốt, như trường hợp không thực sự an toàn, khi Arduino của bạn bị cúp điện do bị reset hoặc do các ngắt khác. Cài trạng thái mặc định cho các chân đầu ra số. Với dự án bạn kết nối với Teleduino thì truy cập  https://www.teleduino.org/tools/manage-presets/ . Sau khi nhập key , một màn hình sẽ hiện ra  cho phép bạn chọn chế độ cho các chân ra số, như hình 19-8.

Hình 19-8: Trang cài đặt trạng thái các chân

Các dự án tương lai

Cùng với việc theo dõi, điều khiển Arduino của bạn qua interner, gửi dữ liệu lên Twitter, bạn có thể điều khiển các dự án Arduino    qua máy tính mà không cần lập trình một cách quá phức tạp, nhiều kiến thức về mạng, hoặc  phát sinh chi phí quá cao. Bằng cách điều khiển từ xa thông qua trang web, bạn có thể điều khiển Arduino của bạn hầu hết mọi lúc mọi nơi. Ba dự án trong chương này cung cấp cho bạn một cái khuôn nền tảng để xây dựng và phát triển các dự án sau này.

Ở chương sau, chương cuối cùng của cuốn sách này, sẽ chỉ ra cho bạn làm sao để điều khiển Arduino gửi và nhận dữ liệu thông qua kết nối mạng di động.

Sản phẩm được quan tâm

Nhận bài viết mới

Các bài viết chia sẻ đến cộng đồng rất chât lượng, mang lại rất nhiều kiến thức mới. Đừng bỏ lỡ bất kỳ bài viết nào của chung tối, hãy đăng ký để nhận bài viết mới qua Mail của bạn

Đăng ký để không bỏ lỡ bài viết nào!

Fields marked with an * are required

Danh mục




More from our blog

See all posts
No Comments
 

Leave a Comment