안녕하세요.
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
'Embedded > Raspberry Pi Pico' 카테고리의 다른 글
Raspberry Pi Pico W에서 BLE(Beacon) 작동 확인하기 (4) | 2024.10.23 |
---|---|
Raspberry Pi Pico(라즈베리파이 피코) W5100S-EVB-PICO 테스트하기(C/C++ 버전) (0) | 2024.08.15 |
Raspberry Pi Pico + dht11를 이용한 온도 습도 테스트와 1 wire 통신 소스 분석 (0) | 2024.08.10 |
Raspberry Pi Pico 내부 온도 센서 값 읽기 (0) | 2024.08.09 |
Raspberry Pi Pico “RP2 Boot” 장치 드라이버 경고가 나타날 경우 (0) | 2024.08.07 |