본문 바로가기
Hardware/MCU(Arduino,ESP8266)

VS Code로 아두이노 업로드 - PlatformIO IDE

by lovey25 2020. 7. 24.
반응형

저는 Arduino IDE의 대안으로 Visual Studio(VS)에 Visual Micro라는 확장 프로그램을 깔아서 사용하고 있습니다. VS가 매우 무거운 프로그램이긴 하지만 그만큼 생산성을 높여주는 유용한 프로그램입니다. 그런데 Visual Studio Code(VS Code)에서도 아두이노를 코딩하고 업로드할 수 있는 "PlatformIO IDE(PIO)"라는 새로운 옵션을 알게 되어서 소개합니다.

VS Code는 오픈소스의 텍스트 에디터라고 할 수 있는데요. 오픈소스답게 방대하고 막강한 확장 프로그램이 특징입니다. 그래서 다양한 플랫폼에서 사용 가능하고 다양한 코드 개발을 지원하기 때문에 단기간에 점유율이 급상승한 인기 프로그램입니다. 다양한 익스텐션을 활용하면 Visual Studio 못지않은 개발환경을 만들 수 있는데요. 그중에서 PIO는 VS Code를 아두이노뿐만 아니라 다양한 컨트롤러(MCU)를 사용할 수 있도록 해주기 때문에 확장 프로그램이지만 배보다 큰 배꼽 같은 느낌입니다.

PlatformIO에서 지원하는 다양한 개발환경들

자 이제 VS Code가 설치가 되어있다고 보고 PIO 사용하는 법 시작하도록 하겠습니다. 

PlatformIO IDE 설치

VS Code를 실행해서 좌측 패널메뉴에서 다섯 번째 테트리스하는것 같은 아이콘을 클릭해서 익스텐션 설치 메뉴로 이동합니다. 그리고 검색창에 "PlatformIO"라고 입력을 하면 "PlatformIO IDE"라는 익스텐션이 검색되는데요. "Install" 버튼을 눌러서 설치를 해 줍니다. 설치에는 약간 시간이 소요됩니다.

그리고 PIO는 파이썬으로 만들어져 있어서 컴퓨터에 파이썬이 설치되어 있어야 사용할 수 있는데요. 만약 파이썬이 설치되지 않았다면 VS Code 우측하단에 이런 알람을 받으실 수 있습니다.

"Install Python"버튼을 누르게되면 파이썬 설치 페이지로 이동하는데요. 거기서 파이썬 최신 버전을 받아서 설치해주시면 됩니다. 그리고 파이썬이 이미 설치되어 있는 경우라면 한잠 기다리다 보면 아래와 같은 알람을 보실 수 있습니다.

설치가 끝났으니 VS Code를 재시작하라는거 같은데 "Reload Now"를 눌러주면 VS Code 전체 화면이 깜빡하면서 다음과 같은 화면을 만날 수 있습니다. 좌측 패널 메뉴에 외계인? 개미? 얼굴 같은 PIO의 로고가 추가된 것을 보실 수 있습니다.

VS Code에서 아두이노 컴파일 & 업로드

이제 설치가 끝났으니 아두이노 코드를 컴파일하고 아두이노에 업로드하는 방법을 알아보겠습니다.

왼쪽 패널 메뉴에서 PIO아이콘을 눌러서 나오는 메뉴에서 "Quick Access > PIO Home > Open" 를 눌러서 PIO 시작페이지를 열어줄 수 있습니다. 

PIO시작페이지 안에서 또 좌측에 PIO의 주메뉴들을 확인하실 수 있는데요. 그전에 Arduino IDE나 다른 개발환경에서 아두이노를 사용해본 경험이 있으시다면 바로 각 메뉴들의 용도를 이해하실 수 있으실 거예요.

PIO에서 본격적으로 코딩을 하고 컴파일을 하기 위해서 PIO화면 우측에 보이는 Quick Access 아래에서 "New Project" 또는 "Open Project"를 눌러서 시작을 하면 되겠습니다.

그런데 "Import Arduino Project"라는 특이한 메뉴가 있습니다. Open이라는 메뉴가 있는데 또 Import라는 게 왜 필요한가 싶은데요. 이유는 PIO에서 컴파일을 하기 위해서는 아두이노 스케치인 ". ino" 파일 외에 꼭 필요한 파일이 하나 더 있습니다. 바로 "platformio.ini"라는 설정 파일인데요. 컴파일하고자 하는 플랫폼은 뭔지 어떤 보드를 사용하는지 보드가 연결된 포트는 어디인지 등등을 컴파일러에서 알려주는 그런 파일입니다.

그래서 Import메뉴를 이용해서 기존의 아두이노 프로젝트를 열어주게 되면 프로젝트를 가져오기 전에 사용하고자 하는 보드를 지정해줄 수 있고 그 결과를 반영해서 platformio.ini파일을 만들어주는 역할을 합니다. 대신 Import로 불러온 스케치는 기존의 스케치와는 별도로 복사본이 생성되는 점이 특징입니다. 그래서 기존에 사용하고 있던 프로젝트를 PIO에서 지속적으로 사용하실 계획이라면 Import가 아니라 Open으로 이용해서 열고 설정 파일을 하나 만들어 두는 게 좋겠죠.

스케치 Import 화면

 

스케치를 열어서 컴파일/업로드를 해 보겠습니다. 전 예전에 BT모듀을 테스트할 때 사용했던 스캐치를 가져와 봤습니다.

PIO에서 새로 만든 프로젝트가 아니라 불러온 파일이기 때문에 PlatformIO.ini파일이 없습니다. 따라서 PIO메뉴로 이동을 해보면 "Project Tasks" 메뉴 아래 사용 가능한 메뉴가 아무것도 없는 것을 알 수 있습니다. 

PlatformIO.ini 파일 구조

PlatformIO.ini 파일을 어떻게 만들어야 하는지 기본적인 내용만 알아보겠습니다.

PlatformIO.ini파일은 구조적으로는 내부에 PlatformIO Core 설정을 하는 [platformio] 섹션과 환경설정을 하는 [env] 섹션으로 이루어져 있습니다. 그리고 각 설정 부분은 "키"와 그 "설정값"이 "=" 기호로 연결되어 있는 형태로 작성이 됩니다.

문법적으로는 ";"로 시작하는 줄은 주석으로 처리되고 두 개 이상의 설정값은 ", "로 구분해서 지정할 수 있습니다. 그리고 한줄 이상 구문이 길어질 때는 여러 줄 구문을 하나로 인식하게 할 수 있는데 새로 시작되는 줄은 최소  2개 이상의 빈칸으로 시작되어야 한다고 합니다.

자 이제 ini파일을 만들어보겠습니다.

워크스페이스에서 불러온 프로젝트 이름을 우클릭하고 "New File"메뉴를 선택해서 파일을 추가합니다. 그리고 파일 이름을 "PlatformIO.ini"로 만들어줍니다. 그리고 만들어진 파일 안에다가 일단 아래 내용을 붙여넣기 하겠습니다.

[platformio]
default_envs = uno
src_dir = BT_Module

[env:uno]
platform = atmelavr
framework = arduino
board = ATmega328P

[env:esp01]
platform = espressif8266
framework = arduino
board = esp01_1m

default_envs

앞에서 ini파일에 [env] 섹션이 필요하다고 얘기를 했었는데요. default_envs 옵션은 여러 [env] 섹션 중에서 기본적으로 PIO가 실행할 환경을 미리 지정하는 옵션입니다. 만약 이 옵션이 없다면 PIO는 ini파일에 설정된 모든 [env] 섹션에 대해서 명령을 수행하게 됩니다. 여기에서는 [env:uno] 섹션만 기본으로 실행하라는 표시입니다.

src_dir

소스코드가 있는 폴더 위치를 지정해주는 옵션입니다. 기본 설정은 루트 폴더에 위치해있는 "src"이름의 폴더입니다. 만약 스케치 위치가 다르다면 별도로 지정해야겠죠.

lib_dir

라이브러리 위치를 지정해주는 옵션입니다. 기본 설정은 루트 폴더에 있는 "lib"폴더입니다. 각 라이브러리들은 폴더로 구분이 되어 있어야 합니다.

libdeps_dir

PIO의 "Library Manager"에서 설치한 라이브러리의 위치입니다.

data_dir

파일 시스템을 사용한 데이터 위치를 지정하는 옵션입니다.

platform

프로젝트의 플랫폼을 지정하는 옵션입니다. 사용할 수 있는 플랫폼 종류는 여기(https://docs.platformio.org/en/latest/platforms/index.html#embedded)서 확인하실 수 있습니다. 그리고 플랫폼의 종류뿐만 아니라 플랫폼의 버전도 같이 설정할 수 있습니다. (예: platform = atmelavr@1.2.3)

framework

프레임워크를 지정하는 옵션입니다. 여기서는 아두이노로 지정했는데요 사용 가능한 옵션은 여기(https://docs.platformio.org/en/latest/frameworks/index.html#frameworks)에서 확인 가능합니다.

board

개발 보드를 지정하는 옵션이며 사용 가능한 보드는 마찬가지로 여기(https://docs.platformio.org/en/latest/boards/index.html#boards)에서 확인 가능합니다. 지금은 아두이노 우노 보드를 사용하고 있는데 우노는 Atmega328P칩을 사용하고 있으며 보드 ID는 "ATmega328P"인걸 확인할 수 있습니다.

 

기본적인 설정 옵션들을 알아봤는데요. 나머지 상세한 내용은 개발 문서에 자세하게 나와있으니 공부하실 때 참고하시면 되겠습니다.

 

“platformio.ini” (Project Configuration File) — PlatformIO 4.4.0a5 documentation

© Copyright 2014-present, PlatformIO Revision 1ed462a2.

docs.platformio.org

 

자 이렇게 PlatformIO.ini까지 준비가 되었으면 컴파일을 해보겠습니다.

PIO메뉴로 이동을 해보면 이전에는 보이지 않던 "Project Tasks"란에 많은 메뉴가 생겨난 것을 확인할 수 있습니다. 가볍게 "Build"를 쿡 눌러줍니다.

하단 출력 창에 컴파일이 성공했다는 메시지로 결과 확인하실 수 있습니다.

그리고 업로드는 바로 및에 있는 "Upload"메뉴를 통해서 하실 수 있습니다.

Arduino IDE에서는 업로드할 때 아두이노 보드가 연결된 포트를 지정해주어야 하는데요. PlatformIO에서는 업로드 시에 적절한 포트를 자동으로 검색해주기 때문에 업로드 때 별도로 포트번호를 물어보지 않습니다. 만약 여러 보드가 있어서 특정 포트를 지정해야 할 필요가 있다면 PlatformIO.ini파일에서 포트번호 지정할 수도 있습니다.

업로드 결과 역시 출력 창을 통해서 확인할 수 있습니다.

마지막으로 디버깅에 필요한 시리얼 모니터입니다. 역시 PIO메뉴에서 Upload다음에 있는 "Monitor"메뉴를 통해서 시리얼 모니터를 열어줄 수 있습니다. 별도 설정이 없는 경우 Baudrate는 9600으로 열리는 것 같습니다. 시리얼 모니터에 대한 설정은 PlatformIO.ini에서 설정해 줄 수도 있고 시리얼 터미널 안에서 수정할 수도 있습니다. 아래 화면은 시리얼 모니터가 열린 모습입니다.

터미널 안에서 Ctrl+C를 누르면 시리얼 모니터가 종료되고 Ctrl+T→H(Ctrl을 누른 상태에서 T와 H를 차례대로 누르기)를 눌러주면 자세한 옵션이 나타납니다. 그런데 저는 사용방법을 몰라서인지 이 메뉴들이 잘 동작하지 않았고 인터페이스가 사용하기 불편해서 외부 프로그램 사용하는 게 속편 할 것 같습니다. 한 가지 아쉬운 부분이네요.

 

이상 PlatformIO IDE를 이용해서 VS Code를 아두이노 IDE로 사용하는 방법이었습니다.

 

끝!

반응형

댓글