Wiznet makers

TheoIm

Published December 04, 2023 ©

32 UCC

23 WCC

5 VAR

0 Contests

0 Followers

0 Following

Original Link

W5100S-EVB Pico + AWS IoT Core + MQTT Example

Creating a hands-on project for AWS integration using W5100 pico

COMPONENTS Hardware components

WIZnet - W5100

x 1

Software Apps and online services

microsoft - VS Code

x 1


PROJECT DESCRIPTION

0. 들어가기

✔ W5100S-EVB 피코

개발 보드. 이더넷 연결이 가능함. 자세한 건 홈페이지 참조

W5100S-EVB-Pico는 Raspberry Pi RP2040 마이크로컨트롤러 칩과 완전 유선 TCP/IP 컨트롤러 W5100S 칩을 기반으로 하는 마이크로컨트롤러 평가 보드입니다. W5100S-EVB-Pico는 Raspberry Pi Pico 플랫폼과 동일한 역할을 하며 W5100S를 포함하므로 이더넷 기능이 기본적으로 포함되어 있습니다.

✔ AWS IoT 코어

  • IoT 디바이스를 다른 디바이스에 연결하는 클라우드 서비스와 AWS 클라우드 서비스를 제공함.
  • IoT 디바이스를 AWS IoT 기반 솔루션에 통합하는 데 도움이 되는 디바이스 소프트웨어 제공.
  • 지원 프로토콜
    • MQTT
    • WSS를 통한 MQTT
    • HTTPS
    • LoRaWAN

✔ MQTT

  • MQTT(Message Queueing Telemetry Transport)의 약자로, 최소한의 전력과 패킷량으로 통신하는 프로토콜이다.
  • 저전력 배터리나 네트워크 상태가 좋지 않은 제한적인 환경에서 동작하게 하기 위한 용도로 만들어졌다.
  • ⇒ 낮은 전력과 낮은 대역폭 환경에서 사용할 수 있어, IoT Device에서 유용.

1. 개발 환경 구축

참조 문서

1) Toolchain 설치

ARM GCC 컴파일러

  • 링크에서 windows용 exe를 다운받고 설치.
  • 유의할 점은 설치 시에 Add path to environment variable을 선택해준다. 다른 옵션은 이미 선택되어 있지만 저 옵션만 선택되어 있지 않으니 선택해준다.

CMake

  • 링크에서 windows용 installer을 다운받아서 설치.
  • 설치 시에 all users path 관련 옵션 선택.

비주얼 스튜디오

  • 문서에는 2019 버전을 다운로드하라고 되어 있지만 2022 버전을 받아도 잘 돌아감.
  • C++을 사용한 데스크톱 개발 옵션만 선택해서 설치.
     

파이썬

  • 문서에는 3.9버전을 설치하라고 되어 있다.
  • 이미 3.9 버전이 설치되어 있어서, 다른 버전이 안되는지는 정확하지 않다.

힘내

  • git이 설치되어 있어야 한다.

2) 설치 확인

SDK 및 예제 가져오기

원하는 폴더 경로에 가서 아래의 git 명령어를 실행.

C:\[userpath]> git clone -b master https://github.com/raspberrypi/pico-sdk.git
C:\[userpath]> cd pico-sdk
C:\[userpath]\pico-sdk> git submodule update --init
C:\[userpath]\pico-sdk> cd ..
C:\[userpath]> git clone -b master https://github.com/raspberrypi/pico-examples.git

명령줄에서 "Hello World" 빌드

  • 커맨드 창에서 빌드 테스트. 아래 명령어 실행
  • 빌드가 완료되면 hello_world/serial 폴더와 hello_world/usb 디렉토리에 bulid 디렉터리가 생성됨.
  • 생성된 UF2 파일을, 컴퓨터와 연결된 보드에 drag and drop 해주면 실행할 수 있음.
C:\[userpath]> setx PICO_SDK_PATH "..\..\pico-sdk"
C:\[userpath]> cd pico-examples
C:\[userpath]\pico-examples> mkdir build
C:\[userpath]\pico-examples> cd build
C:\[userpath]\pico-examples\build> cmake -G "NMake Makefiles" ..
C:\[userpath]\pico-examples\build> nmake

Visual Studio Code에서 "Hello World" 빌드

  • 위와 똑같은 테스트이지만 VS Code에서 실행.
  • Developer Command Prompt for VS 2022 에 들어가서 code 입력.
     
  • 입력하면 자동으로 VS Code가 실행된다.
  • C/C++을 사용하려면 VS Code에서 몇 가지 설정을 해줘야 한다.
    1) CMake Tools 설치
     

  • 2) Settings(설정)에서 Configure Envionment 설정
     

  • 3) Settings에서 Generator 설정
     
  • 이제 설정 화면을 닫고, pico-examples 폴더를 열어줍니다.
  • 폴더를 열고, 아래의 build 버튼을 누르거나 F7을 눌러서 빌드합니다.
  • 빌드가 완료되면 build 디렉토리에 있는 uf2 파일을 보드에 넣어서 실행합니다.

2. MQTT를 통해 AWS IoT 연결하기

원본 링크 참조 링크

1) 터미널 프로그램 설치

  • Tera Term 을 사용했음.
  • 다른 터미널 프로그램을 사용해도 관계없음.

2) 하드웨어 연결

  • 이더넷 케이블을 사용해서 W5100S-EVB-Pico 이더넷 포트에 연결해준다.
  • 연결된 보드를 5pin usb 케이블을 통해서 컴퓨터와 연결해둔다.

3) AWS IoT 설정

IoT Core resource 생성 참조

4) MQTT 예를 통해 Connect AWS IoT 설정

✅ 자식 클론

git clone --recurse-submodules https://github.com/Wiznet/RP2040-HAT-AWS-C.git

✅ SPI 포트 및 핀 설정

  • 'RP2040-HAT-AWS-C/port/ioLibrary_Driver/' 디렉토리에 있는 'w5x00_spi.h' 파일에서 설정.
/* SPI */
#define SPI_PORT spi0

#define PIN_SCK 18
#define PIN_MOSI 19
#define PIN_MISO 16
#define PIN_CS 17
#define PIN_RST 20

✅ 네트워크 구성 설정

  • 'RP2040-HAT-AWS-C/examples/aws_iot_mqtt/' 디렉토리에 있는 'aws_iot_mqtt.c' 파일에서 설정.
  • 보드가 공유기와 연결된 것이라면 알아서 할당되므로 파일을 수정할 필요 없음.
/* Network */
static wiz_NetInfo g_net_info =
    {
        .mac = {0x00, 0x08, 0xDC, 0x12, 0x34, 0x56}, // MAC address
        .ip = {192, 168, 11, 2},                     // IP address
        .sn = {255, 255, 255, 0},                    // Subnet Mask
        .gw = {192, 168, 11, 1},                     // Gateway
        .dns = {8, 8, 8, 8},                         // DNS server
        .dhcp = NETINFO_DHCP                         // DHCP enable/disable
};

✅ AWS IoT 구성 설정

  • 도메인은 AWS IoT data endpoint 이다.
  • AWS IoT Core에서 설정에 들어가서 복사한 후, 변경 해준다
     
  • my_rp2040_thing은 자신이 만든 사물(device) 이름으로 바꾼다.
  • username과 password는 설정하지 않는다.
/* AWS IoT */
#define MQTT_DOMAIN "account-specific-prefix-ats.iot.ap-northeast-2.amazonaws.com"
#define MQTT_PUB_TOPIC "$aws/things/my_rp2040_thing/shadow/update"
#define MQTT_SUB_TOPIC "$aws/things/my_rp2040_thing/shadow/update/accepted"
#define MQTT_USERNAME NULL
#define MQTT_PASSWORD NULL
#define MQTT_CLIENT_ID "my_rp2040_thing"

✅ 장치 인증서 및 키 설정

  • 'RP2040-HAT-AWS-C/examples/aws_iot_mqtt/' 디렉토리의 mqtt_certificate.h 파일에 설정한다.
  • AWS에서 사물(Device) 생성 시에 발급받은 인증키를 넣어준다.
  • root_ca에는 Amazon Root CA1 인증서를 넣어주고,
  • client_cert에는 Private key를 넣어주고,
  • private key에는 RSA를 넣어준다.
  • 아래의 입력 형식에 맞춰서 넣어줘야 한다. 각 줄마다 따옴표와 \r\n을 넣어준다.
uint8_t mqtt_root_ca[] =
"-----BEGIN CERTIFICATE-----\r\n"
"...\r\n"
"-----END CERTIFICATE-----\r\n";

uint8_t mqtt_client_cert[] =
"-----BEGIN CERTIFICATE-----\r\n"
"...\r\n"
"-----END CERTIFICATE-----\r\n";

uint8_t mqtt_private_key[] =
"-----BEGIN RSA PRIVATE KEY-----\r\n"
"...\r\n"
"-----END RSA PRIVATE KEY-----\r\n";

5) 빌드

  • 파일 수정을 완료했다면, vs code에서 빌드 버튼을 누르거나 f7을 누른다.
  • 빌드가 완료되면, 'RP2040-HAT-AWS-C/build/examples/aws_iot_mqtt/' 디렉토리에 'aws_iot_mqtt.uf2' 파일이 생성된다.

6) 업로드 및 실행

✅ Tera Term 실행

  • W5100S-EVB-Pico의 BOOTSEL 버튼을 누르고 usb 포트를 연결하면 RPI-RP2 드라이브가 자동으로 마운트됨.
  • 드라이브 안에 'aws_iot_mqtt.uf2' 파일을 복사 후 붙여넣기 해줌
  • 보드의 시리얼 COM 포트를 Tera Term과 연결
  • 연결 후에 바로 실행될 수도 있으나, 실행되지 않으면 usb를 뽑았다가 다시 연결시킴.
  • 정상적으로 연결되었다면 아래와 같은 화면 출력
     

✅ AWS MQTT test client 실행

  • AWS IoT 콘솔에서 Test 메뉴 선택
  • 주제를 구독하고, 주제를 게시함
     
  • 주제를 게시하면 tera term 창에서 message를 받은 것을 확인할 수 있음.
     
Documents
Comments Write