Skip to main content

임베디드 개발용 C/C++ 언어를 대체할 '임베디드 파이썬'

임베디드 기기를 프로그래밍 할 경우 C/C++ 프로그래밍 언어로 코드를 작성할 가능성이 있습니다. C 언어가 처음 만들어진 것은 1970년대 초반이지만 1990년대가 되어서야 임베디드 기기 프로그래밍이 어셈블리 언어에서 더 높은 수준의 C 언어로 전환되었습니다. 이후 30년 동안 C/C++는 속도와 간결성 면에서 우수성 덕분에 임베디드 애플리케이션에서 최고의 자리를 차지해 왔습니다. 오늘날에는 임베디드 중심의 인기 있는 파이썬(Python) 프로그래밍 언어가 부상하면서 또 다른 변화가 일어나고 있습니다.

-파이썬은 1990년대에 처음 등장했으며 그 이후로 소프트웨어 개발자들 사이에서 꾸준히 인기를 얻었습니다. 실제로 2020년에 파이썬은 IEEE 스펙트럼의 프로그래밍 언어 인기도에 대한 연례 설문조사에서 마침내 1위를 차지했습니다. 처음에 파이썬은 임베디드 개발자들 사이에서 전자 장치 테스트용 스크립팅 언어로 인기를 얻었는데, 이후 개발 스택 쪽으로 서서히 내려가고 있습니다. 사실 파이썬은 여러 버전들이 있는데, CPython의 경우 데스크톱 애플리케이션용으로 널리 사용되는 레퍼런스 구현입니다.


[마우저 일렉트로닉스] 임베디드 개발용 C/C++ 언어를 대체할 '임베디드 파이썬' (출처: dencg/Shutterstock.com)

-

-◆ PyMite와 Tiny Python은 마이크로컨트롤러(MCU)에서 실행한다는 명시적 목적을 위해 Python의 기능 축소판을 개발하려는 초창기 시도 중 하나였습니다. PyMite는 VM과 런타임만 포함하고 컴파일러는 포함하지 않습니다. 이는 CPython으로 처음 컴파일된 바이트코드(bytecode)만 실행할 수 있음을 의미합니다. Tiny Python은 바이트코드 컴파일러를 포함하고 있지만 여전히 RAM 크기는 약 64KB입니다. 둘 다 Python 2를 기반으로 하며, 둘 다 적극적으로 개발되지는 않았습니다. 그렇기는 해도 이들은 모두 임베디드 애플리케이션에 파이썬을 사용하려는 초기 시도를 나타냅니다.

◆ MicroPython은 임베디드 개발용 C 프로그래밍 언어에 대한 흥미로운 대안입니다. 이는 데스크톱 기반 CPython 언어의 몇몇 인기 있는 기능을 STM32 보드, TI CC3200/WiPy, Teensy 보드, 노르딕(Nordic) nRF 시리즈, SAMD21, SAMD51, ESP8266, ESP32, RISC-V, 심지어 레고(Lego) 마인드스톰(Mindstorms) EV3 플랫폼 등 여러 유명 마이크로컨트롤러 아키텍처에 제공합니다. MicroPython은 2014년 출시 이후 CPython 사용 증가를 반영하여 전반적으로 꾸준한 인기를 얻었습니다. MicroPython의 또 다른 매력적인 특성은 소스 코드가 GitHub에서 오픈 소스 라이선스(MIT 라이선스)로 제공된다는 것입니다.

◆ CircuitPython은 교육적이고 제조사 친화적인 파이썬 버전이며, 그 자체가 MicroPython의 포크입니다. CIrcuitPython 개발 지원은 애드어푸르트 인더스트리즈(Adafruit Industries)에서 제공하며 많은 마이크로컨트롤러 제품에 대한 사실상의 표준(de facto) 언어입니다. 현재 CircuitPython과 호환되는 100개 이상의 보드가 있으며 대부분은 마이크로칩(Microchip)의 SAMD21/SAMD51과 노르딕 세미컨덕터(Nordic Semiconductor)의 nRF52840 마이크로컨트롤러를 기반으로 합니다. CircuitPython의 주요 기능 중 하나는 소스 코드 파일(.py)을 호환 가능한 개발 보드로 간단히 드래그 할 수 있다는 것입니다. USB 드라이브로 파일을 드래그 하는 것과 다를 바 없으므로 코드를 컴파일할 필요가 없고 번거롭고 때로는 비싼 프로그래머/디버거에 액세스할 필요도 없습니다. 또한 소스 코드는 기기에서 계속 액세스할 수 있으며 모든 컴퓨터에서 열 수 있습니다. 즉, 모든 컴퓨터에서 간단한 텍스트 편집기를 사용하여 CircuitPython 호환 개발 보드를 다운로드, 편집 및 재프로그래밍할 수 있습니다.

◆ Zerynth는 사물인터넷(IoT) 제품 개발자를 대상으로 하는 소프트웨어 개발 키트(SDK)에 포함된 도구 세트입니다. 32비트 마이크로컨트롤러(ESP32, ESP8266, ARM Cortex M0+, ARM Cortex M3, ARM Cortex M4 포함)와 다양한 IoT 클라우드 서비스 사업자(AWS, Azure, Google Cloud Platform, Ubidots, The Things Network) 간의 연결을 단순화하는 데 특화되어 있습니다. ). 몇 줄의 Python 코드로 에지(edge) 장치 센서의 데이터를 클라우드로 전송함으로써 추가적인 분석과 장기 저장을 할 수 있습니다. 제공되는 도구 중에는 명령 라인 인터페이스(CLI), Zerynth Studio 통합 개발 환경(IDE), Zerynth 운영 체제(OS), Zerynth 장치 관리자가 포함되어 있습니다. 윈도, Mac, 리눅스 OS에서 모두 사용할 수 있습니다. Zerynth VM은 작은 80KB의 플래시 메모리와 5KB의 RAM을 차지합니다. 프로그래밍은 Python으로 수행하거나, 성능 요구 사항에 따라 이러한 배열이 필요한 경우 Python/C 하이브리드 접근 방식을 사용할 수 있습니다.

-◆ CPython. 단일 보드 컴퓨터(SBC)는 신용 카드 크기의 폼 팩터의 완전한 데스크톱 컴퓨터(예: 라즈베리 파이, BeagleBone)입니다. 이들은 매우 저렴하여 임베디드 애플리케이션에서 점점 더 많이 사용되고 있습니다. 현 세대 SBC는 충분히 빠르며 완전한 CPython (또는 불필요한 모듈을 생략하여 약간 축소된 구현)을 실행하기에 충분한 메모리와 스토리지를 가지고 있습니다. Python을 ARM 기반 아키텍처(x86/x64 아키텍처와 비교)에 맞게 조정한 ARM Linux용 Python과 같은 다른 구현이 있었습니다. 최근에는 Just-In-Time 컴파일러 대 CPython 인터프리터를 기반으로 하는 PyPy 같은 추가적인 버전들이 라즈베리 파이로 이식되고 있으며, 더 나은 속도 성능과 같은 향상된 특성들을 제공합니다.

-개발자는 파이썬 프로그래밍 언어가 하나의 '맛'이 아니라는 것을 명심해야 합니다. 다양한 버전들이 있으며, 일부는 임베디드 플랫폼용으로 특화하여 구축되었습니다. 전문 임베디드 개발 세계의 주요 플레이어로서 파이썬의 미래는 C 언어와 대등하거나 능가할 수 있다는 것을 증명하는 데 달려 있습니다. 이는 과거를 돌아보면 명확하게 확인할 수 있습니다. 과거에 어셈블리에서 C로의 전환이 어느 날 갑자기 이루어진 것이 아니었습니다. 어셈블리는 C 매크로 내부에 어셈블리 코드를 삽입하여 C 프로그램의 성능에 중요한 섹션으로 여전히 사용됩니다. 파이썬과 C 언어 역시 이와 유사한 과정을 거칠 수 있습니다.

-또 다른 고려 사항은 마이크로컨트롤러가 10년 또는 20년 전의 마이크로컨트롤러보다 비교할 수 없이 더 강력해졌다는 점입니다. 클럭 사이클은 수 MHz에서 GHz 이상으로 향상되었고, 수십 kbyte 대였던 플래시 메모리는 이제 수 Mbyte로 용량이 늘어났습니다. 다행히도 그러한 성능 향상이 그에 상응하는 가격 인상으로 이어지지는 않았습니다. 따라서 임베디드 애플리케이션 개발자는 더 높은 수준의 코드를 작성하기 위해 클럭 사이클이나 메모리 용량을 걱정할 필요가 없으며, 여전히 응답성이 높은 고품질 제품을 만들 수 있습니다.

프로그래밍 언어는 시대의 요구에 부응하여 진화하고 성장합니다. MicroPython이나 CircuitPython과 같이 명시적으로 임베디드 시스템을 위해 구축된 CPython 파생 제품은 민주적인 과정을 통해 생성되기 때문에 향후 임베디드 개발의 핵심 플레이어가 될 가능성이 있습니다. 전자 하드웨어에 대한 몇 가지 기본 지식을 결합한다면 임베디드 Python 언어는 기술 수준에 관계없이 사람들이 실제와 디지털을 결합할 수 있게 해줍니다. 이러한 유형의 접근법은 불과 몇 년 전만 해도 상상할 수 없었던 가능성을 열어줍니다. 대도시에서 교통이 환경에 미치는 영향을 모니터링하는 프로그램부터 난민 캠프의 수질을 모니터링하는 프로그램에 이르기까지 임베디드 파이썬은 한 번에 한 줄의 코드로 세상을 더 나은 곳으로 만드는 데 기여할 수 있습니다.