카테고리 없음

ESP32 / ESP8266 MicroPython: HTTP GET 요청

기하 2021. 8. 16. 03:43

이 게시물의 목적은 urequests 모듈을 사용하여 MicroPython으로 HTTP GET 요청을 수행하는 방법을 설명하는 것입니다. 이 튜토리얼은 ESP32와 ESP8266 모두에서 실행되는 MicroPython으로 테스트되었습니다.

 


소개

이 게시물의 목적은 urequests 모듈을 사용하여 MicroPython으로 HTTP GET 요청을 수행하는 방법을 설명하는 것 입니다. 이 튜토리얼은 ESP32와 ESP8266 모두에서 실행되는 MicroPython으로 테스트되었습니다. 아래에 표시된 수치는 ESP32의 테스트에서 가져온 것이지만 ESP8266의 결과는 비슷합니다. 여기 에서 라이브러리의 소스 코드에 액세스할 수 있습니다 .

중요: 작성 당시 사용된 MicroPython 버전에는 urequest가 포함되어 있었습니다 . 이는 변경될 수 있으며 향후 배포에는 기본적으로 포함되지 않을 수 있습니다. 따라서 단순히 가져올 수 없는 경우 이전에 수동으로 설치해야 할 수 있습니다.

당연히 이 튜토리얼을 따르려면 먼저 WiFi 네트워크에 연결해야 인터넷에 액세스할 수 있습니다. 이 튜토리얼에서는 그 방법을 다루지 않을 것입니다. 수동으로 연결하려면  상세 가이드 를 확인하세요 . MicroPython이 부팅될 때 WiFi 네트워크에 대한 자동 연결을 구현하지 않으려면  다른 가이드 를 확인하세요 .

MicroPython 프롬프트에 연결하고 한 번에 명령을 전송하여 코드를 실행합니다. 원하는 경우 여기에 설명된 대로 스크립트에 명령을 작성하고 컴퓨터에서 스크립트를 실행할 수 있습니다 . 또 다른 옵션은 여기에서 볼 수 있는 것처럼 스크립트를 MicroPython의 파일 시스템에 업로드하고 프롬프트에서 실행하는  입니다.

저는 Putty를 사용하여 프롬프트에 연결할 것이지만 직렬 연결을 설정할 수 있는 다른 소프트웨어를 사용할 수도 있습니다. ESP32에서 아직 MicroPython을 구성하지 않은 경우  이전 게시물을 참조하세요 . ESP8266을 사용하는 경우 이것을 확인 하십시오 .

 

코드

우선 WiFi 네트워크에 연결한 후  이 튜토리얼에 필요한 모든 기능이 있는 urequests 모듈 을 가져올 것 입니다.

1 import urequests

다음으로 실제 HTTP GET 요청을 수행하려면 urequests 모듈  get 함수 를 호출 하여 요청 대상 URL을 입력으로 전달하기만 하면 됩니다. 우리는 이전에 많은 튜토리얼에서 사용한 가짜 온라인 REST API가 있는 웹사이트를 사용할 것입니다.

HTTP GET 요청으로 도달할 웹사이트의 URL은  http://jsonplaceholder.typicode.com/albums/1  이며 웹 브라우저에서 접속하여 예상 결과를 확인할 수 있습니다. 액세스하면 더미 앨범 객체의 JSON 구조인 그림 1과 유사한 것을 얻을 수 있습니다.

그림 1 - HTTP GET 요청의 예상 출력.

MicroPython에서 언급된 GET 요청을 수행하는 코드는 다음과 같습니다. get 함수 에 대한 호출의 출력으로 Response 클래스의 개체 가 반환됩니다.

1
2
response = urequests.get('http://jsonplaceholder.typicode.com/albums/1')
print(type(response))

그림 2에서 확인할 수 있듯이 반환된 객체는 실제로 Response 클래스입니다.

그림 2 - get 메소드 호출에 의해 반환된 객체의 클래스 .

이제 HTTP 요청 응답의 실제 내용에 액세스하려면 아래와 같이 text 속성 에 액세스하기만 하면 됩니다 .

1
2
print(response.text)
print(type(response.text))

아래 그림 3에서 이 명령의 예상 출력을 확인할 수 있습니다.

그림 3 - HTTP GET 요청의 응답 인쇄.

이 속성은 내용이 포함된 문자열을 반환합니다. 그럼에도 불구하고 우리가 보았듯이 요청의 응답은 JSON 형식으로 반환 됩니다. 따라서 원하는 경우  구문 분석된 콘텐츠가 포함된 사전을 반환하는 json 속성에 액세스할 수 있습니다 .

1
2
parsed = response.json()
print(type(parsed))

이 명령의 결과는 그림 4에 나와 있습니다. 결과가 실제로 Python 사전임을 확인합니다.

그림 4 - 구문 분석된 응답의 JSON 콘텐츠 가져오기.

 라이브러리  소스 코드 에서 볼 수 있듯이 이 속성은 ujson 라이브러리를 사용 하여 콘텐츠를 구문 분석합니다.  이전 게시물 에서 ujson 구문 분석에 대해 자세히 알아볼 수 있습니다 . 이제 구문 분석된 객체가 있으므로 사전 객체의 키를 사용하여 각 개별 JSON 값에 액세스할 수 있습니다.

1
2
print(parsed["userId"])
print(parsed["id"])
print(parsed["title"])

아래 그림 5에서 JSON 구조의 각 값에 접근한 결과를 확인한다. 결과는 text 속성 에서 얻은 JSON 구조와 일치 합니다.

그림 5 - Python 사전을 통해 JSON 구조의 값에 액세스

요청 응답의 내용을 검색하는 다른 흥미로운 방법은  응답을 바이트 단위로 반환하는 content 속성을 사용하는 것입니다.

1
2
print(response.content)
print(type(response.content))

아래 그림 6에서 명령 결과를 확인하십시오.

그림 6 - HTTP GET 요청의 응답(바이트).

마무리를 위해 상태 코드와 해당 상태 코드의 텍스트 이유도 얻습니다. 이를 위해  아래 코드에서 볼 수 있는 것처럼 status_code  reason 속성을 사용합니다 .

1
2
print(response.status_code)
print(response.reason)

그림 7은 이러한 명령의 결과를 보여줍니다. 결과에는 HTTP 의 " OK " 코드에 해당 하는 코드 200이 있습니다.

그림 7 – HTTP 상태 코드 및 이유 가져오기.


관련된 컨텐츠


관련 게시물