ESP32

ESP32: HTTP GET Requests

기하 2021. 8. 16. 04:05

소개

이 게시물의 목적은 ESP32와 Arduino 환경을 사용하여

간단한 HTTP GET requests를 수행하는 방법을 설명하는 것입니다. 

그렇게 하기 위해 우리는 HTTPClient.h 라이브러리를 사용할 것 입니다.

 

중요: 이 게시물을 작성하는 시점에서 이 라이브러리는 여기에서 볼 수 있듯이

Github 마스터 코드와 방금 병합되었습니다. 따라서 ESP32 Arduino 지원 라이브러리 버전을

업데이트해야 할 가능성이 큽니다. 여기 에서 수행 방법에 대한 지침을확인할 수 있습니다.

 

변경 사항을 적용하려면 Windows에서 Git GUI를 열고 

get.exe 파일을 관리자로 실행해야 할 수 있습니다 . 

모든 것이 제대로 작동하면 Arduino IDE의 예제 메뉴 아래에 

HTTPClient 예제에 대한 항목이 있어야 합니다 . 

Github 에서 예제  볼 수도 있습니다 .

 

HTTPClient 라이브러리를 사용할 수 있게 되기 전에

HTTP 요청을 수행할 수 있었지만  예제 에서 볼 수 있는 것처럼

소켓 연결을 통해 모든 HTTP 프로토콜을 처리해야 했기 때문에 이것은 더 복잡했습니다 . 

 

다행히 이 라이브러리는 많은 복잡성을 숨기고 사용하기 쉬운 기능만 노출합니다.

따라서 간단한 예에서 WiFi 네트워크에 연결하고

가짜 온라인 나머지 API 웹 사이트에 대한 일부 HTTP GET 요청을 수행합니다. 

여기에서 이 웹사이트를 탐색할 수 있습니다  .

 

아래 코드 는 HTTPClient 라이브러리와 함께 제공되는

 기본 예제 중 하나를 기반으로 하므로 시도해 보시기 바랍니다.

코드

우선, WiFi 네트워크에 연결하고 HTTP 요청을 수행하기 위한 라이브러리를 포함해야 합니다. 

당신의 ESP32와 WiFi 네트워크에 연결하는 방법을 더 자세히 확인할 수 있습니다. 이전 게시물.

또한 setup() 함수에서 연결할 수 있도록 WiFi 네트워크의 자격 증명을 저장해야 합니다. 

그렇게 하기 위해 우리는 아래에서 볼 수 있는 것처럼

두 개의 전역 변수를 선언할 것입니다. 네트워크 자격 증명으로 값을 변경해야 합니다.

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "yourNetworkName";
const char* password = "yourNetworkPassword";

이제 setup() 함수에서 디버깅 메시지를 인쇄하기 위해 직렬 연결을 열고 WiFi 네트워크에 연결합니다. 

절차에 대한 자세한 설명이 필요하시면 이전 포스팅을 확인해주세요 . 

 

라이브러리가 백그라운드에서 수행하는 모든 작업  제대로 시작되도록 하려면 

WiFi.begin 호출 전에 지연을 유지하십시오 . 

이 글을 쓰는 시점에 지연을 포함하지 않으면 대부분의 경우 WiFi 네트워크 연결이 실패합니다.

void setup() {

  Serial.begin(115200);
  delay(4000);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");
}

Arduino 메인 루프에서 HTTP requests를 보낼 것입니다. 

먼저 HTTPClient 클래스의 객체를 선언합니다 . 

이 클래스는 낮은 수준의 구현 세부 사항에 대해 걱정할 필요 없이

HTTP 기능으로 작업하는 데 도움이 되는 많은 메서드를 사용할 수 있도록 합니다. 

헤더 파일 에서 해당 메소드 목록을 확인할 수 있습니다 .

HTTPClient http;

그런 다음 이전에 선언된 객체 에서 begin 메서드를 호출 하여

HTTP 요청을 수행하려는 URL을 문자열 매개변수로 전달합니다. 

우리가 말했듯이, 우리는 테스트 웹사이트로 요청을 보낼 것입니다. 

웹 브라우저에서 URL에 직접 액세스하여 반환될 예상 콘텐츠를 확인할 수 있습니다.

http.begin("http://jsonplaceholder.typicode.com/comments?id=10"); //Specify the URL

이제 요청을 보내기 위해 http 개체에서 GET 메서드 호출하기만 하면 됩니다. 

이 메서드는 인수를 받지 않고 요청의 HTTP 코드를 반환합니다.

이 코드는 오류 처리를 위해 변수에 저장됩니다. 

0보다 작은 코드는 라이브러리의 오류 코드 이고( 여기 에서 목록을 확인할 수 있음 )

0보다 큰 값은 표준 HTTP 반환 코드 입니다.

 

따라서 코드가 0보다 크면 반환된 HTTP 코드와 요청에 대한 응답을 모두 인쇄합니다. 

인수를 받지 않고 응답과 함께 문자열을 반환하는 getString 메서드를 호출하여 응답을 얻습니다 . 

그렇지 않으면 오류 메시지가 인쇄됩니다.

if (httpCode > 0) { //Check for the returning code
        String payload = http.getString();
        Serial.println(httpCode);
        Serial.println(payload);
}else {
      Serial.println("Error on HTTP request");
}

마지막으로  리소스가 해제되었는지 확인하기 위해 end 메서드를 호출해야 합니다 . 

이 부름을 잊지 않는 것이 중요합니다.

http.end(); //Free the resources

각 요청 사이에 약간의 지연이 이미 포함된 전체 소스 코드를 아래에서 확인할 수 있습니다. 

또한 각 요청 전에 WiFi 네트워크에 여전히 연결되어 있는지 확인합니다.

#include <WiFi.h>
#include <HTTPClient.h>

const char* ssid = "yourNetworkName";
const char* password =  "yourPassword";

void setup() {
  Serial.begin(115200);
  delay(4000);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");
}

void loop() {
  if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status
    HTTPClient http;
    http.begin("http://jsonplaceholder.typicode.com/comments?id=10"); //Specify the URL
    int httpCode = http.GET();                                       //Make the request

    if (httpCode > 0) { //Check for the returning code
        String payload = http.getString();
        Serial.println(httpCode);
        Serial.println(payload);
      }
    else {
      Serial.println("Error on HTTP request");
    }
    http.end(); //Free the resources
  }
  delay(10000);
}

코드 테스트

코드를 테스트하려면 Arduino IDE로 코드를 업로드하고 직렬 모니터를 여십시오.

 그림 1과 유사한 출력이 표시되어야 합니다. OK 코드에 해당하는 HTTP 200 코드가 표시됩니다.

그림 1 - ESP32용 HTTP GET 프로그램의 출력.

 

결과를 확인하기 위해

웹 브라우저에서 직접 URL에 액세스할 때 반환되는 출력을 그림 2에서 확인할 수 있습니다. 

보시다시피 대답은 동일합니다.

그림 2 - 웹 브라우저에서 URL에 직접 액세스