Module Ethernet Shield

Một phần của tài liệu Giáo trình chuyên đề arduino và truyền thông (nghề CNKT điện tử, truyền thông) (Trang 125)

Điều khiển thiết bị điện dùng module Ethernet Shield

Ethernet shield là một mạch mở rộng cho arduino, giúp arduino có thể kết nối với thế giới internet rộng lớn. Ứng dụng của shield này là truyền nhận thông tin giữa arduino với thiết bị bên ngoài sử dụng internet, shield này đặc biệt hữu ích cho các ứng dụng IoT, điều khiển và kiểm soát hệ thống vì internet luôn liên tục, dữ liệu truyền đi nhanh, khoảng cách là vô tận( trong Trái Đất thôi, với phải có mạng nữa) ăn đứt sóng RF , rẻ hơn với cách truyền từ xa bằng tin nhắn. Hôm nay mình sẽ hướng dẫn mọi người cách sử dụng nó để điều khiển thiết bị bằng đường truyền internet.

3.3.1.1. Phần Cứng

 1 mạch arduino uno hoặc mega  1 shield ethernet

 1 dây mạng RJ45  3 led

3.3.1.2. Thực hiện

Chụp shield ethernet lên uno hoặc mega như hình:

 Bước 1: Tạo code Web để hiển thị thông tin khi bạn truy cập vào Web, khi đó bạn có thể nhận các tín hiệu và điều khiển thiết bị bằng giao diện web, nó giống như lập trình một trang Web vậy, code ở dưới đây. Bạn tùy biến theo cách của mình và nạp nó vào arduino như bình thường nhé.

***************************************************************** Mã lập trình:

***************************************************************** 1. #include<SPI.h> // thư viện để kết nối shield

2. #include<Ethernet.h> // thư viện cho dự án 3.

4. byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // địa chỉ MAC( địa chỉ phần cứng của shield ethernet), cứ để nguyên

5. IPAddress ip(192, 168, 1, 9); // địa chỉ IP của shield, có thể thay đổi tùy ý.

6.

7. EthernetServer server = EthernetServer(80); // giá trị port là 80 8. String readString; // khai báo chuỗi có tên readString 9. int AN1, AN2, AN3, AN4, AN5; // khai báo biến để đọc giá trị

analog, đọc xuống dưới sẽ hiểu 10.void setup() { 11. 12. Serial.begin(9600); 13. while (!Serial) { 14. ; 15. } 16. pinMode(7, OUTPUT); 17. pinMode(8, OUTPUT); 18. pinMode(9, OUTPUT); 19. 20. digitalWrite(7, LOW); 21. digitalWrite(8, LOW); 22. digitalWrite(9, LOW); 23.

24. Ethernet.begin(mac, ip); // viết ít thôi nhé, cái này cober đọc sẽ tự hiểu

25. server.begin();

26. Serial.print("Dia chi server la: "); 27. Serial.println(Ethernet.localIP());

28. Serial.println("Ban da ket noi thanh cong mang ethernet..."); 29. 30.} 31. 32.void loop() { 33. 34. AN1 = analogRead(A1); 35. AN2 = analogRead(A2); 36. AN3 = analogRead(A3); 37. AN4 = analogRead(A4); 38. AN5 = analogRead(A5); 39.

40. EthernetClient client = server.available(); 41. delay(2000);

42.

43. if (client = true) { //if client: 44.

45. while (client.connected()) { 46. if (client.available()) {

47. char c = client.read(); //Đọc char bởi yêu cầu HTTP 48.

50.

51. readString += c; 52. }

53.

54. if (c == '\n') {

55. Serial.println(readString); //In ra serial monitor 56. client.println("HTTP/1.1 200 OK"); //Tạo 1 trang mới 57. client.println("Content-Type: text/html");

58. client.println("Refresh: 5"); // lệnh để tự động tải lại trang, cứ 5 giây 1 lần tải lại.

59. // vì giá trị analog thay đổi liên tục nên luôn phải tải lại, nếu kho có dòng này thì

60. // phải tải lại trang bằng cách kích chuột để đọc giá trị analog mới => rất mệt.

61. client.println();

62. client.println("<HTML>"); // câu lệnh của web để trình duyệt hiểu mà hiển thị các phần đầu, thân, cuối,...mình chưa học lập trình web nên chưa hiểu lắm

63. client.println("<HEAD>");

64. client.println("<TITLE>He Thong Dieu Khien Thiet Bi Bang Arduino Uno - Ethernet Shield Arduino</TITLE>");

65. // tên tiêu đề ở mác của tab trình duyệt đó, cái này ít quan trọng. có thể thay đổi tùy ý

66. client.println("</HEAD>"); 67. client.println("<BODY>"); 68. client.println("<CENTER>");

69. client.println("<h1>HE THONG DIEU KHIEN THIET BI QUA INTERNET BANG ARDUINO UNO VA MODULE ETHERNET SHIELD</h1>");

70.

client.println("<h3>*********************************************** *************</h3>");

71. client.println("<h3>DIEU KHIEN BANG NUT LENH</h3>"); 72.

//======================================================= ====================

73. client.println("<br/>"); // lệnh để cách xuống dòng

74. client.println("<a href='button1on'>MO THIET BI 1</a>"); // tạo một nút (button) trên web( nút bật thiết bị 1), khi bấm nút tức là ta đã gửi 1 lệnh về shield( arduino sẽ sử lí tín hiệu này)

75. client.println("<br/>");

76. client.println("<a href='button1off'>TAT THIET BI 1</a>"); // nút dùng để tắt thiết bị 1

77. client.println("<br/>"); 78.

79. client.println("<br/>");

80. client.println("<a href='button2on'>MO THIET BI 2</a>"); // tương tự nút bật trên nhưng là tb 2

81. client.println("<br/>");

82. client.println("<a href='button2off'>TAT THIET BI 2</a>"); // tương tự nút tắt trên nhưng là thiết bị 2

83. client.println("<br/>"); 84.

85. client.println("<br/>");

86. client.println("<a href='button3on'>MO THIET BI 3</a>"); // tương tự nút bật trên nhưng là tb 3

87. client.println("<br/>");

88. client.println("<a href='button3off'>TAT THIET BI 3</a>"); // tương tự nút tắt trên nhưng là thiết bị 3

89. client.println("<br/>"); 90.

91.

client.println("<h3>*********************************************** ************</h3>"); // dấu sao để ngăn cách

92. client.println("<h3>**********************************************</ h3>"); 93. client.println("<h3>******************************</h3>"); 94. 95. client.println("<br/>");

96. client.print(" Gia tri cong analog 1 la: "); // in ra màn hình trình duyệt thông báo " Gia tri cong analog 1 la: "

97. client.print( AN1); // in ra giá trị analog 98. client.println("<br/>");

99. client.println("<br/>"); // xuống 2 dòng

100. client.print(" Gia tri cong analog 2 la: "); // tương tự như trên

101. client.print( AN2); 102. client.println("<br/>"); 103. client.println("<br/>");

104. client.print(" Gia tri cong analog 3 la: "); 105. client.print( AN3);

106. client.println("<br/>"); 107. client.println("<br/>");

108. client.print(" Gia tri cong analog 4 la: "); 109. client.print( AN4);

110. client.println("<br/>"); 111. client.println("<br/>");

112. client.print(" Gia tri cong analog 5 la: "); 113. client.print( AN5);

115. client.println("<br/>"); 116. client.println("</BODY>"); 117. client.println("</HTML>"); 118. delay(1); 119. //Stop Client: 120. client.stop(); 121. Serial.println("client disconnected"); 122. 123. if (readString.indexOf("button1on") > 0) { // nút bấm thiết bị 1( button1) được bấm thì

124. digitalWrite(9, HIGH); // xuất ra tín hiệu điện dương ra cổng 9

125. } // các phần dưới hiểu tương tự 126. 127. if (readString.indexOf("button1off") > 0) { 128. digitalWrite(9 , LOW); 129. } 130. 131. if (readString.indexOf("button2on") > 0) { 132. digitalWrite(8, HIGH); 133. } 134. 135. if (readString.indexOf("button2off") > 0) { 136. digitalWrite(8 , LOW); 137. } 138. 139. if (readString.indexOf("button3on") > 0) { 140. digitalWrite(7, HIGH); 141. } 142. 143. if (readString.indexOf("button3off") > 0) { 144. digitalWrite(7 , LOW); 145. } 146.

147. readString = ""; // đặt lại chuỗi thành không có giá trị nào 148. } 149. 150. } 151. } 152. } 153. 154. 155. } *********************************************************************

Sau khi nạp xong các bạn dùng máy tính, truy cập vào địa chỉ ip mà bạn vùa cài đặt( trong code thì truy cập vào 192.168.1.9), nếu hiện ra 1 trang giống này thì là ok rồi. thử điều khiển xem các led có bật tắt theo yêu cầu không, đợi 5s xem có có tự tải lại trang không. nếu ok hết là ngon.

 Bước 2: Tạo một Domain và gán ip modem vào đó

Đầu tiên, truy cập: www.no-ip.com (chọn ngôn ngữ tiếng Việt cho dễ đọc, phần language ở góc phải màn hình đó) => tạo một tài khoản trên đó: bấm Sign up và làm theo hướng dẫn (nó yêu cầu gmail nên chưa có gmail thì phải tạo một cái gmail trước đã nhé.) nhận email, tên tài khoản, mật khẩu, và cái cuối là( host name) tên miền.

Nên nhớ, tên miền là cái mình sau này sẽ truy cập, vì thế nên hãy đặt cái tên dễ nhớ đấy. Ví dụ như tên bạn, biệt danh, các kiều,... nếu bị trùng thì phải làm cái khác nhé. khi truy cập bạn phải gõ tên bạn vừa nhập vào và thêm mấy cái đuôi của nó vào đấy. khuyên dùng đuôi “.ddns.net” vì nó dễ nhớ.

Tiếp theo, làm theo hướng dẫn của nó là xác minh tài khoản bằng email, truy cập email để lấy link kích hoạt. sau khi kích hoạt nó bắt tải cái app tên DUC.exe, ae tải về rồi cài đặt vào máy, app nó yêu cầu đợi hơn 4 phút để cập nhật ip lên noip.com. Các bạn cứ đợi hết 4 phút là được, nó làm lại lần 2 thì thoát nó ra, lúc này cũng cập nhật xong rồi.

Ta đăng nhập lại vào https://my.noip.com/#!/ và sẽ thấy có hình "1 active" to đùng vào đấy, nhấp chuột vào ta sẽ thấy tên miền và bên cạnh là cái ip modem nhà bạn.

Lúc này ta truy cập vào cái tên miền đó, nếu thấy xuất hiện một hình đăng nhập vào là ok rồi. (hình đăng nhập này là tài khoản và mật khẩu để đăng nhập vào để thay đổi cài đặt modem).

Lúc này, chúng ta có thể truy cập mạng ở ngoài để vào được mạng ở nhà bằng tên miền vừa tạo rồi, như nó lại không truy cập đúng vào cái shield để điều khiển thiết bị mà lại truy cập vào đăng nhập của modem, vậy bước tiếp theo là chúng ta phải "NAT PORT" cho shield để có thể truy cập từ tên miền vừa tạo vào shield chứ không phải vào modem,… và điều khiển thiết bị từ khắp nơi trên trái đất, miễn là có mạng.

 Bước 3: NAT PORT

Phần này là phần quan trọng nhất, việc NAT PORT này tùy thuộc vào từng modem mạng, mỗi loại khác nhau sẽ có cách NAT khác nhau mặc dù cùng mạng. Có thể các modem cùng hãng nhưng sau mỗi năm thì họ lại cập nhật lại phần mềm hoặc phần cứng mới nên cách NAT cũng khác nhau, vì vậy nên mình sẽ không hướng dẫn các bạn NAT PORT một cách chung chung, việc NAT PORT các bạn phải tự tìm hiểu . Sau đây mình sẽ đăng các link hướng dẫn các bạn NAT PORT.

Lưu ý:

Khi NAT các bạn ghi ip của shield (ở code trên là 192.168.1.9);

Số port của shield là 80, nên các bạn điền là 80 cho " External port start" và cũng 80 cho " External port start", do các clip hướng dẫn chủ yếu là cho camera mà camera lại có nhiều số port nên các bạn đừng hoang mang,họ dùng camera thì mình dùng shield( tức là làm giống camera vậy, chỉ là thay thông số của camera bằng shield thôi) , chỉ cần ghi 1 số port là 80 cho cả port start và port end là được

Khi NAT một số modem yêu cầu có bước viết tên miền, tài khoản, mật khẩu thì các bạn đăng nhập y như khi đăng kí ở noip.com đó.( như modem của mình chẳng hạn) Thông số port của shield là 80, nên các bạn điền là 80 cho " External port start" và cũng 80 cho " External port start"

Link tham khảo:

http://arduino.vn/bai-viet/951-gioi-thieu-ethernet-shield-ung-dung-dieu-khien-thiet-bi-o-moi- noi-tren-gioi-khi-co

http://arduino.vn/tutorial/5953-dieu-khien-tu-xa-voi-arduino-va-ethernet-shield

http://arduino.vn/bai-viet/1171-dieu-khien-thiet-bi-qua-web-sever-voi-esp8266-khong-can- arduino

CHƯƠNG 4:THỰC HIỆN ĐỀ TÀI 4.1. Ứng dụng module ESP8266

Điều khiển thiết bị từ xa qua website (ESP8266 web server)

Ứng dụng này sẽ giúp bạn điều khiển thiết bị như: Đèn, quạt, cửa,… sau đó qua môi trường Internet, bạn có thể dùng trình duyệt bất kỳ trên điện thoại hoặc máy tính để thao tác với thiết bị thông qua Esp8266.

Đây là một ví dụ điển hình của ứng dụng ESP8266, các bạn có thể tùy biến các thiết bị điều khiển sao cho phù hợp với nhu cầu của bạn. Có thể tìm hiểu và làm theo hướng dẫn

Cập nhật Firmware từ xa cho ESP8266 (OTA)

Có thể hiểu đây là công việc nạp code từ xa mà không cần phải kết nối trực tiếp đến ESP8266 NodeMCU. ứng dụng này của ESP8266 khá hay và thực sự cần thiết, bạn

thử nghĩ nếu làm một sản phẩm giao cho khách hàng mà muốn Update gì cứ phải chạy đến để nạp code thì thốn đến nào.

Ứng dụng này có thể sử dụng cho các dự án điều khiển, giám sát tại các nông trại, hoặc sau khi đóng hộp bạn không muốn mở ra thì hoàn toàn có thể chỉnh sửa lại code sau đó nạp trực tiếp thông qua trình duyệt, Arduino IDE miễn sao bạn đã cấu hình cho ESP8266 có khả năng Update code từ xa (OTA).

Điều khiển bằng giọng nói sử dụng ESP8266

bạn hoàn toàn có thể sử dụng Google Assistant trên điện thoại của mình để nói chuyện với ESP8266.

Esp8266 và Google Assistant

Tiên tiến hơn các ứng dụng phía trên của ESP8266, tại đây bạn có thể sử dụng chính cô em google để điều khiển thiết bị có kết nối với ESP8266.

Chỉ cần điện thoại của bạn là SmartPhone và có kết nối Internet thì bạn hoàn toàn có thể làm việc đó một cách đơn giản.

Điều khiển xe từ xa qua ESP8266

Bạn muốn có một chiếc xe có thể điều khiển qua điện thoại, đây là ứng dụng tuyệt vời cho bạn.

Sử dụng ESP8266 hiển thị lên led ma trận

Một cách đơn giản để bạn tạo một chiếc đồng hồ, hay một khung led để biểu thị các đoạn văn bản mà bạn muốn.

Có thể áp dụng ứng dụng ESP8266 web server để áp dụng vào ứng dụng này, bạn sẽ sử dụng trình duyệt web hoặc điện thoại để gửi đoạn văn bản đến led ma trận. 4.2. Ứng dụng module Ethernet Shield

Ethernet shield là một mạch mở rộng cho arduino, giúp arduino có thể kết nối với thế giới internet rộng lớn. Ứng dụng của shield này là truyền nhận thông tin giữa arduino với thiết bị bên ngoài sử dụng internet, shield này đặc biệt hữu ích cho các ứng dụng

IoT, điều khiển và kiểm soát hệ thống vì internet luôn liên tục, dữ liệu truyền đi nhanh, khoảng cách là vô tận( trong Trái Đất thôi, với phải có mạng nữa) ăn đứt sóng RF , rẻ hơn với cách truyền từ xa bằng tin nhắn. Hôm nay mình sẽ hướng dẫn mọi người cách sử dụng nó để điều khiển thiết bị bằng đường truyền internet.

4.3. Hướng dẫn kỹ năng tìm kiếm tài liệu nâng cao trên Google Tìm kiếm Cụm từ chính xác Tìm kiếm Cụm từ chính xác

Giả sử bạn đang tìm kiếm trên Google về nội dung về hướng dẫn làm seo web. Thay vì chỉ gõ hướng dẫn làm seo web vào hộp tìm kiếm của Google, có thể sẽ tốt hơn khi tìm kiếm một cách rõ ràng với cụm từ. Để thực hiện việc này, chỉ cần đưa cụm từ tìm kiếm vào dấu nháy kép “”.

Ví dụ tìm kiếm: "hướng dẫn làm seo web "

Tìm kiếm cụm từ chính xác Loại trừ Từ

Giả sử bạn muốn tìm kiếm nội dung về inbound marketing, nhưng bạn muốn loại trừ bất kỳ kết quả nào có chứa advertising theo cụm từ. Để làm điều này, bạn chỉ cần sử dụng dấu - ở phía trước của từ mà bạn muốn loại trừ.

Ví dụ tìm kiếm: inbound marketing -advertising This OR That

Mặc định, khi bạn thực hiện tìm kiếm, Google sẽ bao gồm tất cả các điều kiện (terms) được chỉ định trong tìm kiếm. Nếu bạn đang tìm kiếm bất kỳ từ nào trong một

hoặc nhiều cụm từ cần khớp (match), thì bạn có thể sử dụng toán tử OR. (Lưu ý: OR phải được viết hoa).

Ví dụ tìm kiếm: inbound marketing OR advertising Các từ trong văn bản

Nếu bạn muốn tìm một trang web nơi mà tất cả các cụm từ bạn đang tìm kiếm xuất hiện trong văn bản của trang đó (nhưng không nhất thiết cạnh nhau), nhập vào allintext: theo sau ngay bằng từ hoặc cụm từ.

Ví dụ Tìm kiếm: allintext:Quy trình SEO Các từ trong Text + Tiêu đề, URL

Nếu bạn muốn tìm một trang web có một cụm từ xuất hiện trong văn bản của trang đó và một thuật ngữ khác xuất hiện ở nơi khác trên trang, như Title hoặc URL, sau đó nhập cụm từ đầu tiên đó theo sau bởi intext: theo sau ngay bằng từ khác.

Ví dụ Tìm kiếm: neil diamond intext:red sox Tìm Các từ trong Title (Tiêu đề)

Bạn muốn tìm một trang web với những từ nhất định có trong tiêu đề (nhưng không nhất thiết phải cạnh nhau)? Nhập allintitle: ngay sau đó bằng từ hoặc cụm từ.

Ví dụ Tìm kiếm: allintitle:wine club Các từ trong Title + Text, URL

Bạn muốn tìm một trang web có một từ xuất hiện trong tiêu đề của trang đó và một thuật ngữ khác xuất hiện ở nơi khác trên trang, như trong văn bản hoặc URL? Nhập từ đầu tiên đó theo sau bởi intitle: ngay sau đó là từ khác.

Ví dụ tìm kiếm: flu shot intitle:advise Tìm kiếm Các từ trong URL

Nếu bạn muốn tìm các trang có truy vấn tìm kiếm được đề cập trong URL, hãy nhập allinurl: ngay sau đó là truy vấn tìm kiếm của bạn.

Cách tìm kiếm trong một trang web

Thông thường, bạn muốn tìm kiếm một trang web cụ thể cho nội dung phù hợp với cụm từ nhất định. Ngay cả khi trang web không hỗ trợ tính năng tìm kiếm, bạn có thể sử dụng Google để tìm kiếm trang web cho cụm từ của bạn. Đơn giản chỉ cần sử dụng site: somesite.com.

Ví dụ Tìm kiếm: site:seothetop.com "tài liệu học seo" Tìm kiếm có liên quan

Nếu bạn muốn tìm các trang web mới có nội dung tương tự với một trang web bạn

Một phần của tài liệu Giáo trình chuyên đề arduino và truyền thông (nghề CNKT điện tử, truyền thông) (Trang 125)

Tải bản đầy đủ (PDF)

(151 trang)