ESP32 HTTP Request

Hướng dẫn này sẽ chỉ bạn cách sử dụng ESP32 để tạo HTTP request đến web server, API, hoặc Web service. Cụ thể, bạn sẽ học:

ESP32 web client

Phần Cứng Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×Cáp USB Type-C
1×(Tùy chọn) DC Power Jack
1×breadboard
1×Dây Jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Khái Niệm Cơ Bản về Web Client và Web Server

Có một số khái niệm cơ bản về web như: địa chỉ web (URL), hostname, pathname, query string, HTTP Request... Bạn có thể tìm hiểu chi tiết về chúng trong hướng dẫn HTTP

Cách Tạo HTTP Request

  • Khai báo thư viện
#include <WiFi.h> #include <HTTPClient.h>
  • Khai báo SSID và mật khẩu WiFi
const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // THAY ĐỔI const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // THAY ĐỔI
  • Khai báo hostname, pathname, query string
String HOST_NAME = "http://YOUR_DOMAIN.com"; // THAY ĐỔI String PATH_NAME = "/products/arduino"; // THAY ĐỔI //String PATH_NAME = "/products/arduino.php"; // THAY ĐỔI String queryString = "temperature=26&humidity=70"; // TÙY CHỌN
  • Khai báo đối tượng HTTP client
HTTPClient http;
  • Nếu kết nối được với server, gửi HTTP request. Ví dụ, HTTP GET
http.begin(HOST_NAME + PATH_NAME); //HTTP int httpCode = http.GET();
  • Đọc dữ liệu phản hồi từ web server
// httpCode sẽ âm nếu có lỗi if (httpCode > 0) { // tìm thấy file tại server if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP header đã được gửi và Server response header đã được xử lý Serial.printf("[HTTP] GET... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end();

Cách đưa dữ liệu vào HTTP request

Chúng ta có thể gửi dữ liệu đến web server bằng cách đưa dữ liệu vào HTTP request. Định dạng dữ liệu phụ thuộc vào phương thức HTTP request:

  • Đối với HTTP GET request
    • Dữ liệu chỉ có thể được gửi trong query string trên pathname.
  • HTTP POST request
    • Dữ liệu có thể được gửi KHÔNG CHỈ ở định dạng query string MÀ CÒN ở bất kỳ định dạng nào khác như Json, XML, hình ảnh ...
    • Dữ liệu được đặt trong HTTP request body.

    Hãy học cách gửi dữ liệu ở định dạng query string cho cả HTTP GET và POST

    • Tạo query string
    int temp = // từ cảm biến int humi = // từ cảm biến String queryString = String("temperature=") + String(temp) + String("&humidity=") + String(humi);
    • HTTP GET: thêm query string vào pathname
    http.begin(HOST_NAME + PATH_NAME + "?" + queryString); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpCode = http.GET();
    • HTTP POST: đặt query string trong HTTP body
    http.begin(HOST_NAME + PATH_NAME); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpCode = http.POST(queryString);
    • Đối với cả GET và POST, đọc dữ liệu phản hồi từ web server
    // httpCode sẽ âm nếu có lỗi if (httpCode > 0) { // tìm thấy file tại server if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP header đã được gửi và Server response header đã được xử lý Serial.printf("[HTTP] GET/POST... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] GET/POST... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end();

Code ESP32 Hoàn Chỉnh để Tạo HTTP Request

Dưới đây là code ESP32 hoàn chỉnh để tạo HTTP GET/POST request

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-http-request */ #include <WiFi.h> #include <HTTPClient.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE IT // CHANGE IT const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE IT String HOST_NAME = "http://YOUR_DOMAIN.com"; // CHANGE IT String HOST_NAME = "http://YOUR_DOMAIN.com"; // CHANGE IT //String PATH_NAME = "/products/arduino.php"; // CHANGE IT void setup() { Serial.begin(9600); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Connecting"); while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); HTTPClient http; http.begin(HOST_NAME + PATH_NAME); //HTTP int httpCode = http.GET(); // httpCode will be negative on error if(httpCode > 0) { // file found at server if(httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTP] GET... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } void loop() { }

Code ESP32 Hoàn Chỉnh để Tạo HTTP GET Request với dữ liệu

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-http-request */ #include <WiFi.h> #include <HTTPClient.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE IT const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE IT String HOST_NAME = "http://YOUR_DOMAIN.com"; // CHANGE IT String PATH_NAME = "/products/arduino"; // CHANGE IT //String PATH_NAME = "/products/arduino.php"; // CHANGE IT String queryString = "temperature=26&humidity=70"; void setup() { Serial.begin(9600); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); HTTPClient http; http.begin(HOST_NAME + PATH_NAME + "?" + queryString); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpCode = http.GET(); // httpCode will be negative on error if (httpCode > 0) { // file found at server if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTP] GET... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } void loop() { }

Code ESP32 Hoàn Chỉnh để Tạo HTTP POST Request với dữ liệu

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-http-request */ #include <WiFi.h> #include <HTTPClient.h> const char WIFI_SSID[] = "YOUR_WIFI_SSID"; // CHANGE IT const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // CHANGE IT String HOST_NAME = "http://YOUR_DOMAIN.com"; // CHANGE IT String PATH_NAME = "/products/arduino"; // CHANGE IT //String PATH_NAME = "/products/arduino.php"; // CHANGE IT String queryString = "temperature=26&humidity=70"; void setup() { Serial.begin(9600); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.println("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to WiFi network with IP Address: "); Serial.println(WiFi.localIP()); HTTPClient http; http.begin(HOST_NAME + PATH_NAME); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); int httpCode = http.POST(queryString); // httpCode will be negative on error if (httpCode > 0) { // file found at server if (httpCode == HTTP_CODE_OK) { String payload = http.getString(); Serial.println(payload); } else { // HTTP header has been send and Server response header has been handled Serial.printf("[HTTP] POST... code: %d\n", httpCode); } } else { Serial.printf("[HTTP] POST... failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } void loop() { }

Bình Luận