일요일, 4월 27, 2025

[기고] DIY 프로젝트를 위한 코딩 입문

글_ 마이클 파크스(Michael Parks)
제공_ 마우저 일렉트로닉스(Mouser Electronics)

아두이노 DIY 이미지
(image. ICNweb)

하드웨어만으로 구성된 전자 시스템을 제작하는 일이 점점 드물어지고 있다. 전문가용 시장과 취미용 시장에서 모두 임베디드 시스템은 수동/능동 전자 부품과 소프트웨어 또는 펌웨어를 합친 개념으로 통용된다. 용어를 간단히 설명하면, 펌웨어라는 용어는 1960년대 후반에 등장한 용어로서 견고하지만 하드웨어처럼 단단하지는 않은 어떤 것을 의미하는 “펌(firm)”과 소프트웨어의 “웨어(ware)”를 합친 단어이다. 펌웨어는 ROM, EPROM 또는 플래시 메모리와 같은 비휘발성 메모리에 저장된다는 의미에서 “견고하다(firm)”고 할 수 있으며, 디바이스의 동작에 필수적이다. 펌웨어는 여전히 업데이트하거나 수정할 수 있다.

그렇다면 DIY 전자장치, 특히 마이크로컨트롤러를 기반으로 하는 프로젝트를 위한 코드를 개발하려면 무엇이 필요할까? 먼저, 일반인들이 쉽게 접근할 수 있도록 만들어진 임베디드 프로그래밍 언어를 살펴보자. 가장 일반적인 옵션은 아두이노(Arduino) (C/C++), 마이크로파이썬(MicroPython), 서킷파이썬(CircuitPython) 및 관련된 런타임 환경이다.

  • Arduino (C/C++): 아두이노(Arduino) 플랫폼은 임베디드 개발을 위한 지원 라이브러리를 제공하면서 저수준 복잡성을 추상화하는 간소화된 버전의 C/C++를 제공한다. 아두이노의 장점으로는 중요한 애플리케이션의 우수한 성능, 적은 메모리 사용, 뛰어난 하드웨어 호환성, 광범위한 주변장치 지원, 저수준 하드웨어에 대한 우수한 제어 등을 꼽을 수 있다.
  • MicroPython과 CircuitPython: 파이썬(Python) 언어를 기반으로 구현된 이들 언어는 C/C++ 프로그래밍의 일부 문제를 해결하기 위해 개발되었다. 장점으로는 간소화된 라이브러리 관리, 대화형 디버깅, 자동 스토리지 마운팅, 그리고 보다 용이한 오류 처리가 있다.

C/C++ 또는 파이썬으로 데스크톱 프로그래밍을 해본 경험이 있다면, 학습 곡선을 단축시킬 수 있도록 임베디드 시스템도 같은 프로그래밍 언어를 선택하도록 한다. 프로그래밍 경험이 없는 경우라면 각 언어로 샘플 프로젝트를 검토하여 어떤 언어가 가장 잘 맞는지 결정하는 것이 좋다. 일반적으로 C/C++가 더 나은 성능을 제공한다면, 파이썬 기반 옵션은 사용하기 쉽고 가독성이 좋다.

펌웨어 작성 단계

선택한 하드웨어 플랫폼과 프로그래밍 언어에 관계없이, 기본적으로 코드를 작성하는 상위 수준의 프로세스는 동일하다. 먼저 머리 속의 논리적 단계를 컴퓨터로 가져온다. 이는 메모장과 같은 단순한 텍스트 편집기나 비주얼 스튜디오 코드와 같은 고급 편집기에서 수행할 수 있다. 간단히, 코드로 진행해야 하는 단계를 순차적으로 번호가 매겨진 목록으로 작성한다. 아직 코딩에 대해 걱정할 필요는 없다. 지금은 단지 코드가 어떻게 흘러갈지 구상하는 것만 기록하는 것이다. 어떤 입력을 취하고, 데이터를 어떻게 처리하며, 어떤 출력을 언제 생성할 것인가? 이를 의사코드(pseudocode)라고 하며 일반 언어로 작성한다.

코드에 대한 상위 수준의 요구사항을 문서화했다면, 이제 펌웨어를 작성할 차례이다. 사람이 읽을 수 있는 형식으로 작성하는 코드를 소스 코드라고 한다. 소스 코드 파일의 파일 확장자는 일반적으로 사용된 프로그래밍 언어를 표시한다. 예를 들어 .ino와 .c 는 아두이노와 C 프로그램을 나타내는 반면, .py와 .mpy는 파이썬 기반 프로그램의 파일 확장자이다. 단순한 텍스트 편집기로 소스 코드를 작성할 수 있지만, 초보자는 통합 개발 환경(integrated development environment, IDE)을 고려해 보는 것이 좋다.

IDE는 하나의 패키지에 소프트웨어 개발을 위한 종합적인 도구 세트를 제공하는 소프트웨어 애플리케이션이다. 코드 편집기 외에도 컴파일러/인터프리터, 디버거, 버전 관리와 같은 유용한 도구들이 들어 있다. 소스 코드를 마이크로컨트롤러가 이해하는 파일(즉, 머신 코드)로 컴파일링한 다음, 전문 하드웨어를 사용하여 이를 디바이스에 업로드할 수 있는 툴체인을 수동으로 구성할 수 있지만, IDE는 사용자 관점에서 하나의 애플리케이션으로 이 모든 복잡한 것을 처리한다.

반대로, 마이크로파이썬과 서킷파이썬은 해석된 언어이다. 이는 소스 코드가 사람이 읽을 수 있는 형식으로 유지되고 마이크로컨트롤러에서 파이썬 인터프리터에 의해 직접 실행된다는 의미이다. 이에 따라 컴파일 단계가 필요 없지만, 소스 외에 인터프리터를 실행하기 위한 충분한 리소스가 마이크로컨트롤러에 있어야 한다. 먼저 서킷파이썬 펌웨어를 하드웨어에 설치한다. 재부팅 후 개발 보드가 USB 대용량 저장장치로 나타나고, 사용자의 소스 코드를 플래시 드라이브처럼 보이는 위치에 복사할 수 있다. 한 번 더 재부팅하면, 마이크로컨트롤러가 코드를 실행하기 시작한다.

자동차 연구실 모니터링 이미지
(image. ICNweb)

성공을 위한 추가적인 팁

아두이노와 같은 컴파일된 코드나 서킷파이썬과 같이 해석된 코드나 어느 것을 사용하든 펌웨어를 업로드하기 전에 외부 하드웨어를 연결해야 하는 것을 잊지 않아야 한다. 개발 보드에 마이크로컨트롤러 개발 키트를 연결하는 데 사용하는 USB 케이블이 데이터를 전달하는지 확인한다. 만약 보드를 연결하고 온보드 LED에 불이 들어오는데도 IDE에 보드가 표시되지 않는다면, 잘못된 드라이버이거나 데이터 라인이 없는 전력만 공급하는 USB 케이블을 사용하는 것일 수 있다. 그 밖에 DIY 프로젝트를 위한 코딩을 시작할 때 아래의 사항을 고려하도록 한다:

간단한 프로젝트로 시작한다

LED 깜박이기, 센서 읽기 또는 모터 제어 등은 초보자에게 매우 좋은 실습이다. 이러한 실습은 소프트웨어가 하드웨어에 어떤 영향을 미치는지, 반대의 경우는 어떻게 되는지 배우는 데 도움이 된다. 항상 직관적으로 알 수 있는 것만은 아니므로 작은 과제부터 시작하여 자신감을 키우도록 한다.

디버깅 역량을 키운다

IDE. 코드가 첫 시도에서 의도대로 되는 경우는 거의 없다. 따라서 디버깅 기술을 숙련하는 것은 필수적이다. 전문 엔지니어는 특히 커스텀 회로 보드를 제작하거나 많은 외부 부품과 인터페이싱할 때 신호를 검사하기 위해 하드웨어 디버거, 오실로스코프, 로직 분석기와 같은 하드웨어 디버깅 도구에 더 많이 의존할 수 있다. 하지만 초보자에게 디버깅하는 간단한 방법은 시리얼 터미널을 사용하여 마이크로컨트롤러에서 호스트 머신으로 메시지를 전달하는 것이다. 아두이노 생태계에서는 이를 위해 serial.print() 함수를 사용한다. 이와 유사하게 마이크로파이썬에서는 print() 함수가 REPL(read-eval-print loop) 인터페이스를 통해 메시지를 출력한다. 이와 같이 저가형 개발 키트에도 디버깅 하드웨어가 내장되어 있으므로 사용자는 IDE를 통해 브레이크포인트를 삽입하고 레지스터를 살펴볼 수 있다.

서드파티 라이브러리를 살펴보고 자신의 코드를 직접 작성해 본다

프로젝트에 기능이나 외부 구성요소(센서, 액추에이터 등)를 추가하려고 한다면, 아마도 이미 인터페이스를 제공하는 코드가 있을 확률이 높다. 아두이노 라이브러리와 마이크로파이썬 모듈은 프로젝트를 빠르고 신뢰할 수 있게 개발할 수 있는 좋은 방법이다. 그러나 라이브러리와 모듈에 과도하게 의존하면 하드웨어와 소프트웨어의 상호관계를 이해하고 배울 수 있는 훌륭한 기회를 놓칠 수 있다. 일단 프로젝트를 시작하고 실행하면, 센서와 마이크로컨트롤러를 인터페이스하는 라이브러리를 포크하여 라이브러리에 들어있지 않은 기능을 추가할 수 있는지 알아본다. 라이브러리나 모듈 코드를 읽는 것은 하드웨어(포트, 레지스터 등)와 보다 직접적으로 상호작용해야 하므로 도움이 된다.

실험하고 배운다

실습을 통해 배우고 반복을 통해 개선함으로써 마이크로컨트롤러 프로그래밍에 대한 이해를 높일 수 있다. 기본 범용 입출력(general-purpose input/output, GPIO)을 넘어 통신 프로토콜(I²C, SPI, UART 등), 전력 관리, 작업 스케줄링 및 하드웨어가 지원하는 기타 고급 기능과 상호작용하는 법을 배운다. 마이크로컨트롤러의 새로운 기능을 선택하고 해당 기능을 제어하는 코드를 작성하는 방법을 배운다.

결론

임베디드 프로그램을 시작하는 일이 그 어느 때보다 쉬워졌다. 아두이노, 마이크로파이썬, 서킷파이썬과 같은 플랫폼은 사용자의 기술적 배경에 관계없이 강력한 옵션을 제공한다. C/C++를 기반으로 하는 아두이노는 고성능과 정밀한 하드웨어를 제공하는 한편, 파이썬 기반 환경은 손쉬운 사용과 신속한 개발이 강점이다. 펌웨어 작성은 구조화된 프로세스이다. 의사코드로 시작하여, IDE로 옮겨 소스 코드를 프로그래밍한 다음, 실제 하드웨어 상호작용과 직렬 출력으로 테스트한다. 초보자는 LED 제어와 같은 기초적인 프로젝트부터 시작한 다음 디버깅 기술, 직렬 통신 및 내장된 진단 도구에 들어가도록 한다. 서드파티 라이브러리는 개발 시간을 단축시켜주지만, 커스텀 코드 작성은 이해를 깊게 하고 유연성을 높여준다. I²C, SPI, UART와 같은 핵심 마이크로컨트롤러 기능을 탐색하면 고급 설계로 들어가는 문이 열리므로 엔지니어는 가능성의 경계를 넓힐 수 있다.


저자 소개

마이클 파크스(Michael Parks)는 메릴랜드주 서부에 위치한 커스텀 전자설계 스튜디오이자 임베디드 보안 연구회사인 Green Shoe Garage의 공동 설립자이다. 기술과 과학 문제에 대한 대중의 인식을 높이기 위해 Gears of Resistance 팟캐스트를 운영하고 있다. 메릴랜드주 공인 전문 엔지니어이며, 존스홉킨스 대학에서 시스템 엔지니어링 석사학위를 받았다.



.
이 기사는 아이씨엔매거진에서 발행되었습니다. 더 많은 기사를 아이씨엔매거진(링크)에서 확인하실 수 있습니다.        

ASI
아이씨엔
아이씨엔http://icnweb.co.kr
아이씨엔매거진 웹 관리자입니다.
ACHEMA 2027
  • 파스텍 배너 900
  • hilscher
ASI

Join our Newsletter

Get the latest newsletters on industry innovations.

오토모션

Related articles

차량용 반도체 글로벌 선두업체는? 선두 2개 업체가 24% 점유

차량용 반도체 주요 공급 업체로는 인피이언과 NXP가 각각 13.5%와 10.4%를 보이며, 전년에 벌어졌던 격차를 다시 3% 포인트 수준으로 줄인 것으로 나타났다

인피니언, 마이크로컨트롤러 3.5% 성장.. 글로벌 1위 달성

인피니언은 글로벌 마이크로컨트롤러 시장에서 1위를 차지했다고 밝혔다.

ST마이크로일렉트로닉스, STM32C0 시리즈에 3종 신제품 추가 출시

ST가 STM32C0 시리즈에 3종의 새로운 MCU를 추가해 더 높은 메모리 밀도, 확장된 인터페이스, 향상된 통신 기능을 위한 CAN FD 등의 옵션을 통해 탁월한 유연성을 제공한다

기자의 추가 기사

IIoT

파스텍 배너 300
오토모션

추천 기사

mobility