태그 보관물: vscode

Raspberry Pi Pico, Visual Studio Code 개발환경 설정

Raspberry Pi Pico로 이것 저것 해보려고 놀려고 개발 환경을 설정해 보았다. 참고한 문서들에는 Thonny IDE를 기준으로 설명된 것들이 많았으나 vscode에서도 Pico가 잘 지원되고 있어서 이것을 기준으로 환경을 설정했다.

Raspberry Pi Pico vs Arduino Uno

Pico의 생김새는 Arduino Nano와 유사하지만, 기능 측면에서는 Uno와 견줄만 하다.

Raspberry Pi Pico (RP2040)Arduino Uno (ATmega328P)
Processor CoreDual-core ARM Cortex-M0+ (32-bit)Single-core ATmega328P (8-bit)
Clock SpeedUp to 133 MHz16 MHz
RAM (SRAM)264 KB2 KB
Flash Memory2 MB (off-chip)32 KB (on-chip)
ProgrammingMicroPython, C/C++, Arduino IDEC/C++ (Arduino sketches)
가격배송비 포함 7천원 정도 3만원 정도

Raspberry Pi Pico Extension

Extensions항목에서 raspberry pi로 검색하면 Pico를 위한 공식 extension을 볼 수 있다.

이것을 설치하고 나면 Sidebar에 Raspberry Pi Pico를 위한 icon들이 추가된다.

새로운 프로젝트 생성

Sidebar의 Raspberry Pi Pico Project를 선택하면 새로운 프로젝트를 생성할 수 있는 창이 뜨는데, 설정 테스트를 위해서 여기에서 MicroPython 프로젝트를 하나 생성해 본다.

프로젝트가 생성되고 Pico의 LED(GPIO 25번)을 1초 간격으로 toggle하는 예제 코드가 추가된다.

MicroPython UF2 설치

Micro-Controller를 위한 MicroPython을 실행하기 위해서는 UF2 file을 설치해 주어야 하는데, 설치하는 과정은 생각보다 어렵지 않다.

우선 Pico용 MicroPython download page에서 UF2 파일을 개발 host에 다운로드 받아둔다. 그 다음 Pico에 있는 BOOTSEL 버튼을 누른 상태에서 개발 host와 연결된 UBS cable을 연결하면 Pico가 저장장치 모드로 인식되면서 파일을 탐색기에서 파일을 복사할 수 있는 상태로 인식된다.

다운로드 받아둔 UF2 파일을 인식된 RPI-PR2에 복사하면, 복사가 완료된 후 Pico가 자동으로 reboot되는데, 부팅하면서 vscode의 상태표시줄에 “Pico Connected”가 표시되기 REPL을 실행 할 수 있는 창이 뜬다.

제일 아래에 있는 상태표시 줄을 보면 “Pico Connected”옆에 “Run” 버튼이 있는데, 이것을 이용해서 현재 창에 떠 있는 MicroPython code를 실행할 수 있다.

참고로, 일반적인 Python code를 실행할 때 쓰는 버튼은 동작 하지 않는다.

File Upload 및 실행

LED 동작이 확인되었다면 해당 파일을 Upload 해서 Pico에서 동작하도록 할 수 있다. 명령창에서 “upload”를 검색하면 현재의 파일을 upload 하거나 프로젝트 전체를 upload하는 두개의 메뉴가 아래와 같이 보인다.

Upload가 완료 되었다면 Pico를 개발 host에 연결된 USB가 아닌 전원 (USB 충전기 혹은 battery)으로 연결하고 재부팅 하면 LED가 동작하는 것을 볼 수있다.

주의: 개발 host에 Pico 연결하면 REPL이 자동 실행되면서 upload된 파일의 실행이 중지된다. Upload한 파일의 동작을 확인하고 싶다면 반드시 개발 host가 아닌 전원으로 연결해서 부팅하도록 한다.

외부에서 private망에 물린 host로 접속하기 – SSH Jump Host

사무실에 있는 내 workstation에는 두개의 LAN이 연결되어 있고 각각 public network와 private network에 연결되어있다. 외부에서 private network에 연결되어 있는 target host에 SSH로 연결 할 때는 먼저 workstation에 ssh로 연결하고, 여기에서 private망에 물려있는 target host로 또 다시 ssh를 연결해야 한다.

하지만 ssh의 -J option을 이용하면 workstation을 jump host로 이용해서 이런 귀찮은 여러번 접속을 피할 수 있다. 다음은 ssh의 -J 옵션에 대한 설명을 man-page에서 발췌해서 의역한 것이다.

-J 목적지
    Jump host에 ssh 연결을 생성한 다음 최종 목적지 호스트로 TCP 포워딩을 설정하여
    연결을 생성합니다. 여러개의 jump host를 명시하려면 콤마를 사용해서 지정해 줄 수
    있습니다. 이 옵션은 ProxyJump 환경설정 예약어에 대한 단축설정 입니다. 
    주의: 일반적으로 명령줄에 작성하는 옵션들은 최종 목적지 호스트에 적용되며 jump host
    들에는 적용되지 않습니다. Jump host에 옵션을 설정하려면 ~/.ssh/config file을
    활용 하세요.

예를 들어 workstation의 public IP가 203.0.113.5, private network에 있는 target의 IP가 192.168.100.5라 할 때 다음과 같이 203.0.113.5를 jump host로 설정해서 한 번에 접속할 수 있다.

ssh -J user@203.0.113.5 user@192.168.100.5

이러한 설정을 .ssh/config에 jump host를 명시해서 설정해 두면 workstation을 jump host로해서 target에 접속할 수 있고 무엇보다도 visual studio code에서도 곧바로 접속할 수 있다는 점이 편하다. 아래의 설정에서 ProxyJump 설정하는 부분을 눈여겨 보자.

Host workstation
  HostName 203.0.113.5
  User user

Host target
  HostName 192.168.100.5
  User user
  ProxyJump workstation

설정 후에는 private IP인 target으로 곧바로 접속 할 수 있다.

ssh target

Mac OS X에 PlantUML 환경설정

예전에 포스팅 했던 내용 처럼 PlantUML은 on-premise 서버에서도 사용이 가능하지만, Visual Studio Code에서 제공되는 PlantUML extension을 사용하면 Tomcat같은 JSP서버를 별도로 설치할 필요가 없어서 IDE를 벗어나지 않고도 개발을 진행 하면서 관련내용을 스케치하기에 무척 편하다.

Linux에서도 마찬가지 이지만 Max OS X에서 Visual Studio Code PlantUML extension을 사용하려면 Java와 Graphviz가 설치되어 있어야 한다.

Java는 이미 잘 문서화 되어 있으니 내 Mac에 Java를 설치하려면 어떻게 하나요?와 같은 문서를 참조하면 된다.

Mac OS X에서 Graphviz는 HomeBrew 혹은 MacPort를 통해 설치할 수 있다. 나는 MacPorts를 사용하고 있으므로 다음 명령으로 설치했다.

sudo port selfupdate
sudo port install graphviz

PlantUML은 Graphviz없이도 sequence diagram은 그릴 수 있지만, class diagram를 그리려면 Graphviz가 있어야 한다. 다음과 같은 간단한 시험용 PlantUML 문서를 하나 작성하고 동작을 확인해 본다.

@startuml
testdot
@enduml

설정이 잘되어 있다면 다음과 같이 보이고 것이고, 문제가 있다면 관련된 오류가 표시된다.