최근 친구의 부탁으로 임베디드 시스템을 개발하게 되었습니다.
아두이노 기반으로 개발을 진행하고 있는데, 임베디드 개발 환경 특성상 실제 하드웨어 없이 사전에 기능을 구현해야 할 때도 많습니다.
그래서 이번 포스팅에서는 VSCode 에서 온라인 임베디드 시뮬레이터인 Wokwi 를 PlatformIO 와 함께 사용하는 방법을 소개드리고자 합니다.
PlatformIO 는 C/C++ 기반의 임베디드 시스템 개발을 위한 통합 개발 환경입니다. 다양한 플랫폼과 보드, 프레임워크를 지원하며, 특히 다음과 같은 유용한 기능을 제공합니다:
빠른 개발: 코드 자동 완성, 스마트 린터, 코드 인스펙션
통합 테스트: Unity 를 통한 unit / integration test 가능
통합 디버거: 250개 이상의 보드 디버깅 지원, 보드별 pre-setup 된 디버깅 configuration 제공
Wokwi는 온라인 전자회로 시뮬레이터로, 아두이노, ESP32, STM32 등을 포함한 다양한 보드와 센서, 부품을 가상 환경에서 시뮬레이션할 수 있도록 도와줍니다.
모두 VSCode marketplace 에 등록되어 있어 단일 IDE 충인 저에겐 유용히 사용할 수 있습니다.
VSCode에서 PlatformIO 확장 프로그램을 설치한 뒤, PlatformIO Home 을 실행하여 프로젝트를 생성합니다.
이때 사용할 보드와 프레임워크를 선택할 수 있으며, Arduino Uno 를 기준으로 예제를 구성하였습니다.
추가로 프로젝트 directory 를 지정해 C:/
, /user/
같은 이상한 곳에 구성되지 않도록 만들었습니다.
프로젝트 구성 시 PlatformIO 가 필요한 파일을 다운받아 시간이 걸릴 수 있습니다.
모든 구성이 완료되면 Reload Now
를 눌러 VSCode 를 다시 열어줍니다.
마지막으로 PlatformIO 를 통해 build 가 성공하면 extension 이 제대로 적용된것을 확인할 수 있습니다.
Wokwi extension 을 사용하기 위해선 VSCode 에 Wokwi licence 를 등록해야 합니다.
VSCode의 Command Palette 에서 Wokwi: Request a New Licence
를 실행하면 자동으로 Wokwi 페이지로 이동되며, 라이선스를 발급받을 수 있습니다.
참고로 무료 계정은 Wokwi extension 을 사용하려면 반드시 인터넷 연결이 필요합니다. 오프라인 사용은 유료 계정이 필요합니다.
아무튼 licence 를 발급하면 아래와 같이 VSCode Wokwi extension licence 가 활성화됩니다.
Wokwi 공식 문서에서 VSCode 확장을 설정하는 방법을 확인할 수 있습니다.
특히 PlatformIO 와 결합한 예시도 제공해서 막혔을 경우 참고하기 좋습니다.
Wokwi extension 사용을 위해선 다음 2 가지 구성이 필요합니다.
wokwi.toml
diagram.json
wokwi.toml
wokwi.toml
는 Wokwi 시뮬레이터에 빌드된 펌웨어 정보를 제공하는 설정 파일입니다.
PlatformIO 를 사용하는 경우 다음과 같은 형태로 작성할 수 있습니다.
[wokwi]
version=1
firmware='.pio/build/uno/firmware.hex'
elf='.pio/build/uno/firmware.elf'
저같은 경우 Arduino Uno board 로 프로젝트를 생성했기에 .pio/.../uno/...
인 것을 확인할 수 있습니다.
다른 board 를 선택하신 경우 아래처럼 workspace 에 해당 파일을 직접 확인해 작성해 주시길 바랍니다.
diagram.json
diagram.json
은 시뮬레이션 회로 구성을 나타내는 파일로, 아래 공식 문서에서 구성 문법을 확인하실 수 있습니다.
하지만 문법에 맞춰 회로를 직접 코드로 구성하는 것은 매우 귀찮으므로, Wokwi 사이트에서 그린 다이어그램으로 이를 대체해 줍니다.
위처럼 editor 로 간편히 구성하고, 회로의 diagram.json
의 내용을 복붙해줍니다.
다이어그램을 적용 후, 해당 파일을 Wokwi Diagram Editor
로 열어보면 회로가 어떻게 구성되었는지 확인할 수 있습니다.
Wokwi 사이트에서와 동일한 회로가 구성된 것을 확인할 수 있습니다.
이제 마지막으로 VSCode 에서 시뮬레이션을 실행해 보겠습니다.
간단한 예시 코드를 준비해 줍니다.
// src/main.cpp
#include <Arduino.h>
int sensorPin = A0;
int ledPin = DD2;
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("Serial setup completed");
pinMode(ledPin, OUTPUT);
}
void loop() {
int value = analogRead(sensorPin);
Serial.print("Sensor value : ");
Serial.println(value);
if (value <= 1024 / 2)
digitalWrite(ledPin, HIGH);
else
digitalWrite(ledPin, LOW);
delay(100);
}
조도센서 밝기에 따라 LED 가 ON/OFF 되는 예시입니다.
해당 코드로 시뮬레이션 전, PlatformIO 에서 먼저 빌드를 수행해야 합니다.
빌드가 완료되어야 Wokwi 가 최신 바이너리 파일을 읽어 올 수 있기 때문입니다.
Build 가 완료되면 Command Palette 로 Wokwi: Start Simulator
를 통해 시뮬레이션을 시작할 수 있습니다.
아래처럼 시뮬레이션이 작동하는 걸 볼 수 있습니다.
이번 포스팅에서는 VSCode 에서 PlatformIO 와 Wokwi를 통합해 사용하는 방법을 살펴보았습니다.
사실 이들을 처음 사용한건 졸업 캡스톤 프로젝트 였었는데 당시에도 큰 도움을 받았습니다.
이번에는 VSCode 까지 통합하면서 더 빠르고 재밌게 개발할 수 있지 않을까 기대하고 있습니다.
다음에도 유용한 정보를 알게된다면 포스팅 해보도록 하겠습니다.