Để 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:
Chương trình include <SPI.h>
include <Ethernet.h>
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
// 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);
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:
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.print và client.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.
Phần cứng cần thiết Dưới đây là những gì bạn cần trong dự án này:
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>
void setup() { delay(30000); Ethernet.begin(mac, ip); Serial.begin(9600); } void loop() { Serial.println(“connecting …”); if (twitter.post(msg)) { int status = twitter.wait();
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:
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.
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. |