Develop Note

W5100S-EVB-Pico에서 Micropython 및 MQTT를 사용하여 Azure IoT Hub에 연결하기 본문

개발 (Ko)

W5100S-EVB-Pico에서 Micropython 및 MQTT를 사용하여 Azure IoT Hub에 연결하기

Chalsu 2022. 9. 7. 17:40

Micropython을 사용하여 W5100S-EVB-Pico를 Azure IoT Hub에 MQTT로 연결하고 메시지를 송수신하는 과정에 대해 설명한다.

IoT Hub 인증 방식은 SAS Token을 사용했고, 이후 기회가 되면 인증서로 인증하는 방법도 작성해 볼 생각이다.

준비

H/W

  • W5100S-EVB-Pico
  • Micro 5pin USB cable
  • LAN cable

S/W

  • Thonny
    • RP2040 Micropython 개발환경
  • Azure IoT Explorer
    • 장치 정보 확인
    • 데이터 모니터링
    • C2D 전송

Azure 리소스 준비

Azure IoT Hub 생성

Azure IoT Hub를 생성하는 방법은 Azure Portal, Azure CLI, REST API 등 다양하다. 처음에는 주로 Azure Portal을 통해 생성하는 방법을 사용한다.

방법은 아래 링크에서 참조할 수 있다.

Micropython 펌웨어

빌드

빌드 작업은 WSL2 (Ubuntu 20.04.4 LTS) 환경을 사용했다.

rena@Rena-PC:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.4 LTS
Release:        20.04
Codename:       focal

Tool 설치 등 빌드 환경 구축에 대한 내용은 Micropython의 공식 문서에서 참조할 수 있다.

 

빌드 과정은 Micropython Repositroy 내 README에서 참조했다.

Repository clone

Repository를 clone 하고, submodule들을 받아온다.

git clone https://github.com/micropython/micropython.git
cd micropython

git submodule update --init

서브모듈 빌드

make -C ports/rp2 submodules

mpy-cross 빌드 (MicroPython cross-compiler)

장치 펌웨어를 빌드하기 전에 mpy-cross 빌드가 선행되어야 한다.

make -C mpy-cross

W5100S-EVB-Pico 디바이스 펌웨어 빌드

지원되는 장치 중 W5100S_EVB_PICO를 사용하여 펌웨어를 빌드한다.

지원 목록은 Micropython: ports/rp2/boards에서 확인할 수 있다.

 

cd ports/rp2
make BOARD=W5100S_EVB_PICO submodules
make BOARD=W5100S_EVB_PICO

마지막 빌드 과정이다. 시간이 최소 몇 분 이상 소요된다.

펌웨어 업로드

빌드가 완료된 펌웨어를 장치로 업로드한다.

Boot 모드 진입

H/W v1.0과 v1.1의 모양이 약간 다른데, 내가 가지고 있는 보드는 v1.0 이어서 보드의 BOOTSEL 버튼을 누른채로 전원을 인가하면 Boot 모드로 진입된다.

v1.1의 경우 BOOTSEL 버튼을 누른 채로 RUN 버튼을 누르면 Boot 모드로 진입되어 전원을 다시 인가할 필요가 없다.

펌웨어 업로드

빌드된 펌웨어는 다음 경로에 위치하고 있다.

  • micropython/ports/rp2/build-W5100S_EVB_PICO

이 중 firmware.uf2 파일을 업로드한다.

이제 펌웨어 작업은 끝났다.

다음은 Thonny로 라이브러리 설치, 코드 작성 및 업로드를 하고 Azure IoT Expolrer를 사용하여 데이터 송수신 및 모니터링을 진행하면 된다.

디바이스 코드 작성

예제 코드는 Azure-Samples의 IoTMQTTSample 코드에서 참조했다.

  2022.10.14 코드가 업데이트 되면서 Micropython 예제가 사라졌다. 해당 커밋 주소로 수정

 

IoT Explorer에서 디바이스 정보 가져오기

Azure IoT Hub에 연결하기 위한 정보를 얻어 코드에 작성해야 한다.

MQTT로 통신할 때 각 필드에 요구되는 내용은 아래 가이드 문서에서 확인
https://docs.microsoft.com/ko-kr/azure/iot-hub/iot-hub-mqtt-support#using-the-mqtt-protocol-directly-as-a-device

 

예제 코드의 경우 아래 데이터를 얻어와야 한다.

  • Device Connection String
  • Device SAS Token

코드를 보면 Connection String을 파싱해 Host name, Device Id, Shared access key 값을 얻도록 구현되어 있다.

 

정보를 가져오는 방법 역시 여러가지인데, 그 중 IoT Explorer을 사용했다.

IoT Explorer IoT Hub 연결 설정

우선, IoT Explorer에서 내 IoT Hub에 접근할 수 있도록 액세스 권한을 부여해야 한다.

기본 설정된 권한들 중에서 모든 권한을 포함하는 iothubowner 권한을 IoT Explorer에 부여해 줄 것이다.

iothubonwer를 클릭하고, Primary connection string 부분 우측의 버튼을 클릭해 값을 복사한 다음, IoT Explorer에서 Add connection을 클릭했을 때 나오는 창에 붙여넣고 Save 한다.

초기에 이 설정을 한번만 해주면, IoT Hub와 디바이스에 대한 대부분의 작업을 Tool에서 수행할 수 있다.

디바이스를 생성한 다음, 그림과 같이 정보값을 가져온다.

디바이스 생성

Connection String 복사

SAS Token 생성 및 복사

전체 코드

코드는 아래 링크에 업로드 해 두었다.

원본 예제 코드에서 아래 내용을 추가, 수정했다.

  • W5100S 네트워크 연결 설정
  • Telemetry 메시지 전송 형태 수정
    • String -> Json string
Json으로 변경하지 않으면 IoT Explorer에서 데이터를 식별하기가 어렵다.

라이브러리 설치

Thonny 환경에서 라이브러리를 설치한다.

상단 메뉴의 Tools - Manage packages 선택 후, umqtt를 입력한 다음 검색한다.

검색된 패키지들 중 umqtt.simple과 umqtt.robust를 차례로 설치한다.

설치가 잘 되었다면 좌측 목록에서 umqtt를 클릭했을 때 다음과 같이 설치된 패키지가 나온다.

실행 및 모니터링

Telemetry

connecting
Publishing
Sending message 0
Sending message 1
Sending message 2
Sending message 3
Sending message 4
Sending message 5
Sending message 6
Sending message 7
Sending message 8
Sending message 9
Sending message 10
waiting for message
Received message
b'message from IoT Hub'

C2D message

Reference

Comments