행복한 하루

Raspberry Pi Pico(라즈베리파이 피코) 간단하게 C/C++ SDK 설치 및 빌드해보기 본문

RaspberryPi/Raspberry Pi Pico

Raspberry Pi Pico(라즈베리파이 피코) 간단하게 C/C++ SDK 설치 및 빌드해보기

변화의 물결 2022. 7. 29. 19:41

 

 

안녕하세요.

 

  Raspberry Pi Pico에 Python을 이용해서 많이들 프로그램을 하는데, C/C++로 프로그램해보고 싶다는 생각이 들어서 간단하게 MicroPython.uf2 올려서 하면 되겠지 생각했는데, gcc 등 설치할 것들이 많고, 이것 저것 설정해야 할 것들이 있었습니다. 그래서 간단히 방법을  찾아서 해보았습니다. 단지, 이렇게 동작되겠구나 정도로 보시고 하나씩 설정 보면서 설치하는 방법을 보려면 하단 참고 사이트들을 참고하시면 됩니다.


1. 프로그램들 설치

 - gcc 컴파일러와 개발 툴 등 이것저것 설치해야 합니다. 그런데 감사하게도 다운로드해서 설치해주는 자동화 프로그램이 있어서 사용했습니다.

 

https://github.com/ndabas/pico-setup-windows/releases 사이트에서 최신 실행 파일을 다운로드해서 실행하면 아래 프로그램을 다운로드해서 설치해줍니다. 불필요한 것은 체크하지 않으면 됩니다. (현재 v 0.3.4 )

 

 

 만약 설치 중에 환경변수(PATH) 설정하는 내용들이 나온다면 체크해서 환경변수 (경로)들이 자동으로 생성되도록 합니다.

GNU Arm Embedded Toolchain: 10.3-2021.10 - updated

CMake: 3.20.6 - updated - note that 3.21 is not included because of apparent incompatibilities with that version.

Build Tools for Visual Studio 2019: 16.11.31829.152 - updated

Python 3.9: 3.9.8 - updated

Git for Windows: 2.33.1 - updated

Visual Studio Code: 1.62.1 - updated

Doxygen: 1.9.2 - updated

Graphviz: 2.49.3 - updated

Zadig: 2.7 - updated

2. PICO SDK 소스 가져오기

1) 폴더 생성하기

  - 여러 가지 폴더와 혼란 줄이기 위해서 SDK 저장할 곳의 폴더를 새로 만듭니다. 예) RP2040

 

 2) Pico SDK와 Example 다운로드

  - 위에서 git 프로그램 설치된 것을 전제로 합니다. 그리고 윈도우 검색창(윈도우키 + S) 눌러 “x86_x64 Cross Tools Command Prompt for VS2019” 커멘드 창을 실행합니다. (설치 버전마다 다를 수 있습니다.)그리고 아래 명령어를 입력합니다.

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community> d:\
D:\>cd RP2040
D:\RP2040> git clone -b master https://github.com/raspberrypi/pico-sdk.git
D:\RP2040> cd pico-sdk
D:\RP2040\pico-sdk> git submodule update --init
D:\RP2040\pico-sdk> cd ..
D:\RP2040> git clone -b master https://github.com/raspberrypi/pico-examples.git

 

3) 환경변수 등록

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community> d:\
D:\>cd RP2040
D:\RP2040>setx PICO_SDK_PATH "D:\RP2040\pico-sdk"

 

- 창을 종료하고 “x86_x64 Cross Tools Command Prompt for VS2019” 창을 다시 실행합니다.

3. SDK와 Example 빌드하기

 - D:\RP2040\pico-examples 이동해서 build 폴더를 만듭니다. 그리고 build 폴더 안에서 펌웨어 파일을 생성합니다.

 - cmake 컴파일을 위한 환경 파일(Makefile)을 생성합니다. 그리고 namke를 실행하여 빌드합니다. 

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community> d:\
D:\>cd RP2040
D:\RP2040>cd pico-examples
D:\RP2040\pico-examples>mkdir build
D:\RP2040\pico-examples>cd build
D:\RP2040\pico-examples\build>cmake -G "NMake Makefiles" ..

- 100%로 나오면 잘 된 것이고, 처음 빌드하면 시간이 조금 걸립니다.

D:\RP2040\pico-examples\build>nmake

4. 예제 파일 Pico에서 실행해보기

  - UF2 버전을 다운로드하였다면 BOOTSEL 버튼을 누른 상태에서 컴퓨터와 Pico를 연결합니다.

  - D:\RP2040\pico-examples\build\blink.uf2 파일을 드래그 드롭 혹은 복사/붙여 넣기 합니다.

  - 이제 다시 Pico에 usb를 빼서 다시 연결합니다. 그러면 250ms 주기로 깜박이는 것을 확인할 수 있습니다.

5. 다른 프로젝트 생성 방법

  - 다른 경로에 폴더에 만들어서 실행시키면 환경 파일과 경로 설정이 잘 되지 않아서 example 폴더 안에서 폴더를 생성해서 새로운 프로젝트를 진행했습니다. ( 참고 사이트들을 참고해서 설정하셔서 작업하셔도 됩니다. 현재 작업 중에는 잘 동작하지 않아서 다음과 같이 작업하였습니다.)

 

  - D:\RP2040\pico-examples\blink2라고 폴더를 만듭니다. (아니면 blink 폴더를 복사해서 이름을 바꿔 사용해도 됩니다.

  -  blink2 폴더 안에 CMakeLists.txt 파일을 만들어 설정 내용들을 적어놓습니다.

add_executable(blink2
        blink2.c
        )

# pull in common dependencies
target_link_libraries(blink2 pico_stdlib)

# create map/bin/hex file etc.
pico_add_extra_outputs(blink2)

# add url via pico_set_program_url
example_auto_set_url(blink2)

 

  - blink2.c 파일을 생성해서 코드를 입력합니다. 간단하게 blink 소스에 주기만 변경시켜봅니다. (코드 수정은 Visual Studio Code를 사용하면 편하게 수정할 수 있습니다.) 

#include "pico/stdlib.h"

int main() {
#ifndef PICO_DEFAULT_LED_PIN
#warning blink example requires a board with a regular LED
#else
    const uint LED_PIN = PICO_DEFAULT_LED_PIN;
    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    while (true) {
        gpio_put(LED_PIN, 1);
        sleep_ms(1000);
        gpio_put(LED_PIN, 0);
        sleep_ms(1000);
    }
#endif
}

 

  - 중요한 설정 부분, D:\RP2040\pico-examples 폴더에 있는 CMakeLists.txt 파일에서 나머지는 남겨두고 add_subdirectory 내용들 중에 add_subdirectory(blink2)만 남기고 나머지는 주석(#)으로 만들거나 삭제를 합니다. 

cmake_minimum_required(VERSION 3.12)

# Pull in SDK (must be before project)
include(pico_sdk_import.cmake)

project(pico_examples C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

if (PICO_SDK_VERSION_STRING VERSION_LESS "1.3.0")
    message(FATAL_ERROR "Raspberry Pi Pico SDK version 1.3.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}")
endif()

set(PICO_EXAMPLES_PATH ${PROJECT_SOURCE_DIR})

# Initialize the SDK
pico_sdk_init()

include(example_auto_set_url.cmake)
# Add blink example
add_subdirectory(blink2)

add_compile_options(-Wall
        -Wno-format          # int != int32_t as far as the compiler is concerned because gcc has int32_t as long int
        -Wno-unused-function # we have some for the docs that aren't called
        -Wno-maybe-uninitialized
        )

 

  - build 폴더로 이동해서 동일하게 빌드를 진행합니다.

D:\RP2040\pico-examples\build>cmake -G "NMake Makefiles" ..
D:\RP2040\pico-examples\build>nmake

  

  - build 폴더에 blink2 폴더 안을 보면 blink2.uf2 파일을 확인할 수 있으며, 동일하게 Pico에 다운로드해서 1초마다 깜박이는 것을 확인할 수 있습니다.

6. 마무리

  - 간단하게 이야기한다고 했지만, 길어졌습니다. 한번 작업해보면 소스만 잘 수정해서 간단하게 빌드해서 확인할 수 있습니다.

  - Pico에서 C/C++ 개발은 기존 C/C++ 개발자들도 조금 편하게 개발 가능하지만, Python에 비해서 참조할 소스들이 적기 때문에 시간이 조금 더 걸릴 수 있다는 단점이 있습니다.

  - 처음 시작 시 raspberry-pi-pico-c-sdk.pdf 파일이 많은 도움이 될 거라고 생각됩니다. 이유는 각종 함수 설명과 센서 모듈과 연동한 예제들이 많이 나와 있어서 있기 때문입니다.

  

감사합니다.

 

 

<참고 사이트>

1. Windows에서 Raspberry Pi Pico C++ 프로그래밍 하기

https://webnautes.tistory.com/1475

2. [RP2040] Window OS 환경에서 RP2040 개발환경 설정 2편 - Pico C/C++ SDK 빌드

https://sundry-notes.tistory.com/8

3. Raspberry Pi Pico C/C++ SDK

https://datasheets.raspberrypi.com/pico/raspberry-pi-pico-c-sdk.pdf

 

 

Comments