Arduino Yêu cầu HTTP
Arduino có thể đóng vai trò như một máy khách web để gửi các yêu cầu HTTP tới một máy chủ web. Máy chủ web có thể là một trang web, Web API hoặc REST API, dịch vụ web ...
Trong hướng dẫn này, chúng ta sẽ học:
- Kiến thức cơ bản về máy khách web và máy chủ web
- Cách thực hiện yêu cầu HTTP (GET và POST)
- Cách gửi dữ liệu tới máy chủ web (một website, Web API hoặc REST API)
- Mã Arduino:
- Gửi yêu cầu HTTP GET/POST bằng Arduino Uno/Mega + Ethernet Shield
- Gửi yêu cầu HTTP GET và gửi dữ liệu bằng Arduino Uno/Mega + Ethernet Shield
- Gửi yêu cầu HTTP POST và gửi dữ liệu bằng Arduino Uno/Mega + Ethernet Shield
- Arduino Uno R4 WiFi
- Arduino Uno/Mega với Ethernet Shield
- Máy tính để bàn/điện thoại thông minh của bạn (như một máy khách web) gửi một yêu cầu HTTP tới một máy chủ web
- Máy chủ web trả về một phản hồi HTTP cho máy tính để bàn/điện thoại thông minh của bạn
- Máy tính để bàn/điện thoại thông minh của bạn nhận phản hồi HTTP và hiển thị phản hồi HTTP trên màn hình của bạn
- Tiêu đề yêu cầu HTTP
- (Tùy chọn) nội dung yêu cầu HTTP
- Địa chỉ web (URL)
- Phương thức yêu cầu (POST hoặc GET)
- Cổng HTTP mà máy chủ web sử dụng (hầu hết các máy chủ web dùng cổng 80 cho HTTP)
- (Tùy chọn) Dữ liệu được gửi tới máy chủ web (chuỗi truy vấn). Trong hướng dẫn này, ta giả định rằng ta gửi nhiệt độ và độ ẩm tới một máy chủ web với định dạng ?temperature={t-value}&humidity={h-value}.
- Khai báo phương thức yêu cầu, cổng HTTP, tên máy chủ, đường dẫn, chuỗi truy vấn
- Khai báo một đối tượng WebClient
- Kết nối tới máy chủ web
- Nếu đã kết nối với máy chủ, hãy gửi yêu cầu HTTP.
- Đọc dữ liệu phản hồi từ máy chủ web
- Yêu cầu HTTP GET
- Chỉ có thể gửi dữ liệu ở định dạng chuỗi truy vấn.
- Dữ liệu được đính kèm vào đường dẫn.
- Yêu cầu HTTP POST
- Có thể gửi dữ liệu không chỉ ở định dạng chuỗi truy vấn mà còn ở bất kỳ định dạng nào khác như JSON, XML, hình ảnh ...
- Dữ liệu là phần thân của yêu cầu HTTP.
- Xây dựng chuỗi truy vấn
- Sửa đổi mã để gửi dữ liệu trong yêu cầu HTTP
- HTTP GET: thêm chuỗi truy vấn vào đường dẫn
- HTTP POST: gửi chuỗi truy vấn dưới dạng thân HTTP
- Đọc dữ liệu phản hồi từ máy chủ web.
- Đối với Ethernet Shield, bạn cần sửa đổi mã Arduino. Xem Arduino Ethernet Shield với địa chỉ IP tĩnh

Mã cho các Shield WiFi hoặc Ethernet khác tương tự. Sự khác biệt chỉ ở thư viện.
Hướng dẫn cung cấp mã Arduino cho hai trường hợp:
Phần cứng cần chuẩn bị
| 1 | × | Arduino UNO R4 WiFi | ||
| 1 | × | Alternatively, DIYables STEM V4 IoT | ||
| 1 | × | (Tùy chọn) DIYables STEM V4 IoT | ||
| 1 | × | USB Cable Type-A to Type-C (for USB-A PC) | ||
| 1 | × | USB Cable Type-C to Type-C (for USB-C PC) |
Alternatively if using Ethernet:
| 1 | × | Arduino Uno R3 | ||
| 1 | × | USB 2.0 cable type A/B (for USB-A PC) | ||
| 1 | × | USB 2.0 cable type C/B (for USB-C PC) | ||
| 1 | × | Arduino Ethernet Shield | ||
| 1 | × | Ethernet Cable | ||
| 1 | × | (Khuyến nghị) Screw Terminal Block Shield for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Breadboard Shield for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Enclosure for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Power Splitter for Arduino UNO R4 | ||
| 1 | × | (Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO |
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | ||
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | ||
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Kiến thức cơ bản về máy khách web và máy chủ web
Khi bạn truy cập một trang web từ máy tính để bàn hoặc điện thoại thông minh của mình, bạn chỉ gõ địa chỉ web (URL) trên trình duyệt web, đợi một giây, và sau đó trang web được hiển thị trên máy tính/điện thoại thông minh của bạn. Bạn không biết máy tính để bàn/điện thoại thông minh của bạn đang làm gì đằng sau màn hình. Vậy, điều gì xảy ra đằng sau màn hình:
Trong hướng dẫn này, chúng ta sẽ biến Arduino thành một máy khách web để làm một điều gì đó tương tự như máy tính để bàn/điện thoại thông minh của bạn.
Địa chỉ trang web (URL)
Một URL gồm hai phần: tên máy chủ và đường dẫn. Tên máy chủ có thể được thay thế bằng địa chỉ IP của máy chủ web. Ví dụ: example.com/test
Trong yêu cầu HTTP GET, URL có thể bao gồm chuỗi truy vấn. Ví dụ: example.com/test?temperature=20&humidity=70.
Chuỗi truy vấn
Chuỗi truy vấn là một tập hợp các cặp tên-giá trị, được bao gồm trong yêu cầu HTTP để gửi dữ liệu từ máy khách web đến máy chủ web.
Tên và giá trị được phân tách bằng ký tự '='. Các cặp tên-giá trị được phân tách bằng ký tự '&'.
Ví dụ: nhiệt độ=26&độ ẩm=70&trạng thái=2
Yêu cầu HTTP
Yêu cầu HTTP được cấu thành từ:
Tiêu đề yêu cầu HTTP và thân yêu cầu HTTP được phân tách bằng hai cặp ký tự CRLF (ký tự trả về ASCII 13, hoặc '\r', và ký tự xuống dòng ASCII 10, hoặc '\n').
Có nhiều phương thức yêu cầu. Trong số đó, có hai phương thức phổ biến là GET và POST.
Thông thường, chúng ta dùng phương thức GET khi muốn lấy dữ liệu từ máy chủ web, và dùng phương thức POST để gửi dữ liệu tới máy chủ web. Tuy nhiên, phương thức GET có thể được dùng cho cả việc lấy và gửi dữ liệu từ và đến máy chủ web.
Điều kiện tiên quyết
Chúng ta cần xác định các giá trị sau đây:
Địa chỉ Web (URL) được chia thành tên máy chủ và đường dẫn
Cách thực hiện một yêu cầu HTTP
Phần này chỉ trình bày mã liên quan đến HTTP. Toàn bộ mã cho mỗi shield sẽ được trình bày ở phần cuối.
| Arduino Ethernet Shield | EthernetClient client; |
| Arduino Uno WiFi | WiFiClient client; |
Cách Gửi Dữ Liệu Đến Máy Chủ Web
Chúng ta có thể thêm dữ liệu vào yêu cầu HTTP. Định dạng dữ liệu phụ thuộc vào phương thức của yêu cầu HTTP:
Chúng ta chỉ cần chỉnh sửa mã để gửi yêu cầu HTTP:
Mã Arduino đầy đủ để thực hiện yêu cầu HTTP
Dưới đây là mã Arduino đầy đủ để thực hiện yêu cầu HTTP GET/POST.
Yêu cầu HTTP GET/POST trên Arduino bằng Arduino Uno R4 Wifi
Yêu cầu HTTP GET/POST bằng Ethernet Shield của Arduino
Mã Arduino hoàn chỉnh để thực hiện yêu cầu HTTP GET với dữ liệu
Yêu cầu HTTP GET với dữ liệu sử dụng Arduino Uno R4 WiFi
Yêu cầu GET HTTP của Arduino với dữ liệu bằng Ethernet Shield của Arduino
Mã Arduino hoàn chỉnh để thực hiện yêu cầu POST HTTP kèm dữ liệu
Yêu cầu HTTP POST của Arduino với dữ liệu sử dụng Arduino Uno R4 Wifi
Yêu cầu HTTP POST của Arduino với dữ liệu sử dụng Arduino Ethernet Shield
※ Lưu ý:
Chương trình hướng dẫn này đã sử dụng địa chỉ IP động (qua DHCP). Nếu bạn muốn sử dụng địa chỉ IP tĩnh:
WARNING
Hướng dẫn này đang được phát triển.