죄송합니다. 더 이상 지원되지 않는 웹 브라우저입니다.

반도체네트워크의 다양한 최신 기능을 사용하려면 이를 완전히 지원하는 최신 브라우저로 업그레이드 하셔야 합니다.
아래의 링크에서 브라우저를 업그레이드 하시기 바랍니다.

Internet Explorer 다운로드 | Chrome 다운로드

임베디드 개발에서 부상하는 마이크로파이썬(MicroPython)


PDF 다운로드



글/마이클 파크스(Michael Parks), 마우저 일렉트로닉스

마이크로파이썬 기술의 진화

컴퓨터 프로그래밍 언어는 기술의 진화에 있어서 흥미로운 연구 과제이다. 머신 코드나 조립 언어에서부터 COBOL, FORTRAN 등 최초의 고급 언어에 이르기까지 더욱 강력하면서도 이해하기 쉬운 언어로의 진화는 개발 주기를 더욱 빠르게 했고, 프로에서 아마추어까지 점점 더 광범위한 크리에이터들이 프로그래밍을 접할 수 있게 했다.
Arduino 및 Raspberry Pis가 나타나기 전까지 많은 프로토메이커들은 PBASIC이나 BASIC Stamp와 같은 마이크로컨트롤러로 프로그래밍을 시작했다. 전문적인 임베디드 세계에서 프로그래밍 언어는 오랫동안 최고의 자리를 차지해왔다. 실제로 Arduino ‘프로그래밍 언어’는 C/C++ 기능의 조합으로 구성된다.
이는 다양한 임베디드 장치에 대한 프로그래밍의 복잡성을 없애고 임베디드 학습을 이제 막 시작하는 사람들에게 더욱 친근하게 다가갈 수 있게 해준다. 그렇기에 C언어는 지금도 상당한 우위를 점하고 있지만, 변화의 바람은 계속 불고 있다. 이제부터 파이썬 프로그래밍 언어를 시작해보자.
IEEE의 2020년 7월 연구에 따르면 파이썬은 2020년 가장 인기 있는 프로그래밍 언어다. 파이썬의 창시자 귀도 반 로섬(Guido van Rossum)은 해당 언어가 다음과 같은 이유로 만들어졌다고 설명했다:

“CWI의 ABC 그룹에서 통역된 언어를 구현한 경험이 많았고, 언어 설계에 대해 많은 것을 배웠다. 구문 그룹화를 위한 들여쓰기 사용이나 매우 높은 수준의 데이터 유형을 포함한 파이썬의 많은 기능은 여기서 비롯된 것이다.”

귀도는 다른 언어가 파이썬 설계 선택에 미치는 영향에 대해 아래와 같이 설명한다:

“Modula-3는 예외문이나 다른 파이썬 기능에 사용되는 구문 및 의미론의 기원이다.”
또한 아래와 같은 내용을 덧붙였다:

“Amoeba에서 발생하는 오류를 처리하면서 프로그래밍 언어 기능의 예외 사항들에 대한 중요성을 강하게 인식하게 되었다.”

파이썬 프로그래밍 언어가 처음 출시된 것은 30여년 전이다. 파이썬 코드는 우선 바이트코드로 컴파일된 후, 거대한 C프로그램인 인터프리터로 공급된다(C는 필수적으로 배워야 한다는 뜻이다). 파이썬의 대표적인 특징은 인터프리터 모드 또는 REPL(read-evaluate-print-loop)인데, 이는 .py 파일에 코드를 실행하기 전 컨셉 테스트를 위해 명령줄  대화형 프롬프트로 파이썬과 상호작용하는 방법이다. 가상 머신이 사전 컴파일된 (.mpy) 프로그램을 실행할 수 있기 때문에 컴파일러 없이 마이크로파이썬 펌웨어를 구축하고 실행할 수도 있다.
마이크로파이썬은 지난 2014년 출시되었다. 데스크탑으로 프로그래밍을 해본 사람들은 파이썬의 참조 구현체인 C파이썬을 사용할 확률이 높을 것이다. 마이크로파이썬은 메모리나 마이크로컨트롤러와 같은 제한된 하드웨어 처리에 최적화된 또 다른 구현체이다. 마이크로파이썬에는 파이썬3 컴파일러, 런타임 및 파이썬 표준 라이브러리의 하위 집합 전체가 포함되어 있다.
한편, 그 이후 마이크로파이썬은 교육 및 제작자 커뮤니티에 더 중점을 둔 서킷파이썬으로 전환되었다. 임베디드 개발에 있어서 마이크로파이썬의 다용성과 영향력에 대해 알아보자.

마이크로파이썬을 이용한 마이크로컨트롤러 프로그래밍의 신속성과 지저분함

마이크로파이썬 인터프리터는 다양한 하드웨어 기능을 갖춘 많은 개발 보드에서 사용할 수 있다. 마이크로파이썬 기반 개발 보드를 구입하면 가장 먼저 해야할 일은 인터프리터 펌웨어를 최신 버전으로 업데이트하는 것이다. 마이크로파이썬 펌웨어 웹사이트를 방문하여 보유 중인 보드의 최신 장치 펌웨어 업데이트 파일(.dfu)을 다운로드하면 된다. 업데이트 모드로 들어가는 물리적 방법은 보드마다 각각 다르다. 일반적인 방법은 보드에 전원을 공급할 때 특정 핀을 전압 또는 접지에 단락시키는 방법이다. 개발 보드를 컴퓨터에 연결하고 업데이트 모드로 설정한 상태에서, dfu-util이라는 유틸리티 프로그램을 실행하여(https://sourceforge.net/projects/dfu-util 에서 사용 가능) 개발 보드에 새 펌웨어를 적용하면 된다.
dfu-util을 사용하는 정확한 방법은 호스트 시스템 운영 체제(Windows, Mac OS, Linux)에 따라 달라진다. Windows 기반 호스트 시스템을 사용하는 경우에는 추가적 단계가 필요할 수 있다.
펌웨어 업데이트가 완료되면 개발 보드에 연결된 USB 플러그를 뽑은 후 다시 연결해야 한다. 그러면 개발 보드는 USB 플래시 드라이브나 디스크와 같은 이동식 매체로 분류될 것이다. 해당 드라이브는 /flash로 분류되며 다음과 같은 4개의 파일을 포함하게 된다:
• boot.py: 특정 개발 보드에 대한 구성 정보를 포함한다.
• main.py: 특정 응용 프로그램의 소스 코드를 포함한다.
• pybcdc.inf: 호스트 컴퓨터가 개발 보드와 직렬 USB 장치로 접속할 수 있도록 하는 Windows 드라이버 파일이다.
• readme.txt: 개발자가 자신의 필요에 맞게 main.py 파일을 나누려는 최종 사용자나 개발자에게 메모를 남길 수 있는 파일이다.

개발 보드와 상호 작용을 하려면 호스트 컴퓨터의 시리얼 터미널을 통해 REPL을 사용하면 된다. 또는 코드 편집기를 사용하여 main.py 파일을 편집하는 방법도 있다. 마이크로파이썬이나 관련 개발 보드의 간결한 점은 소스 코드가 사용자가 액세스할 수 있는 파일이라는 것이다. 개발 보드를 컴퓨터에 연결하기만 하면 이동식 저장 장치로 분류된다. 그러고 나면 소스 코드 파일은 최종 사용자가 코드 편집기에서 직접 보면서 편집할 수 있다. 그런 다음 개발 보드를 꺼내고 보드의 플러그를 뽑은 후 전원을 키면 새로운 소스 코드나 수정된 소스 코드가 실행된다.
마이크로파이썬 언어를 다룰 수 있는 개발 도구들은 다수 존재한다. 대표적인 프로그램들은 다음과 같다:
• Mu: 무료 베어 본(barebone) 편집기로 코드 완성, REPL, 파일 관리자, 마우스 클릭만으로 코드를 정리할 수 있는 기능 등 몇 가지 부가 기능들이 있다. 처음 시작하기 좋은 개발 도구로 단순성에 있어서 Arduino IDE와 가장 유사하다.
• PyCharm: PyCharm은 무료로 제공되는 커뮤니티 버전과 유료로 제공되는 전문가 버전이 존재하며, 파이썬 개발 환경의 핵심이다. 무료 버전에는 다른 유사한 개발 도구의 유료 버전에서만 갖춘 기능이 포함되어 있다. 디버거, 리팩터링, 코드 검사, 즉석 오류 강조 표시, 빠른 수정 등의 기능은 모두 무료로 이용 가능하다.
• Visual Studio Code: 이미 많은 개발자들이 기본적으로 사용하는 모든 언어에 대한 팔방미인 코드 편집기다. Microsoft가 제공하는 해당 무료 서비스는 쉽게 확장 가능하며, GitHub와 같은 타사 도구와 통합 가능하다. 이를 통해 Visual Studio Code를  마이크로파이썬 프로젝트를 위한 올인원 개발 환경으로 만들 수 있다.

TT(임베디드)-0.jpg

C파이썬과 마이크로파이썬 코드 작성에 있어서 실질적인 차이점

마이크로파이썬은 다양한 ArmⓇ CortexⓇ-M4 기반 임베디드 플랫폼(STM32, TI CC3200/WiPy, Teensy boards, Nordic RF 시리즈, SAMD21, SAMD51 등)에 이식되어 왔다. 또한 ESP8266, ESP32, 16비트 PIC, RISC-V(RV32 및 RV64), 심지어 Lego Mindstorms EV3 등 다른 아키텍처로도 이식되었다. 마이크로파이썬은 상대적으로 동질적인 환경만 다루는 C파이썬(대부분 x86/x64 및 ARM 아키텍처)과 비교하여 훨씬 다양한 아키텍처 및 임베디드 시스템 사양을 다루어야 한다. 따라서 C파이썬과 마이크로파이썬에는 몇 가지 중요한 차이점이 있다. 대표적인 차이점은 다음과 같다:
• 사용자 지정 라이브러리를 추가하는 방법: C파이썬과 달리 마이크로파이썬은 현재 디렉터리의 개념을 이해하지 못한다. 따라서 sys.path를 사용하여 모듈을 찾는 동안 0:/ (개발 보드의 내부 플래시 참조) 또는 1:/ (개발 보드 장착 시 SD 카드 참조)를 따른다. 모듈을 만드는 방법은 두 가지가 있다.
첫 번째 방법은 플래시 메모리 또는 SD 카드의 루트 디렉토리에 mymodule.py등의 파일을 생성하는 것이다. 그러고 나서 main.py에 import mymodule을 사용해 라인을 추가하면 module.py에 있는 모든 기능을 main.py에서 사용할 수 있다.
두 번째 방법은 루트 디렉터리 내에 mymodule 등의 디렉터리를 만드는 것이다. mymodule 폴더 내에서는 __init__.py라는 파일을 만들고 필요한 사용자 지정 함수를 파일 안에 추가한다. 그런 다음 main.py 내에서 import mymodule 라인을 추가한다.
두 가지 경우 모두 SD카드에 저장된 모듈에 액세스하기 위해 sys.path.append(‘1:/’) 라인 또한 main.py에 추가해야 한다.
• 관리: C파이썬은 메모리 관리를 위해 자동 참조 계산을 사용하는 반면 마이크로파이썬은 가비지(Garbage) 수집을 사용한다.
• 제한 및 마이크로 전용 모듈: 파이썬이 편리한 대표적인 이유로는 JSON 구문 분석, 문자열 처리 또는 웹소켓 프로그래밍과 같은 많은 유용한 기능을 제공하는 코드를 쉽게 가져올 수 있다는 점이 있다. 하지만 마이크로파이썬은 C파이썬 모듈의 보완 전체에는 액세스할 수 없다. 또한, 표준 C파이썬 모듈의  마이크로파이썬 구현체 상당수는 메모리나 임베디드 하드웨어의 처리 속도를 제한하는데 사용된다. 일부 모듈은 표준 파이썬 이름을 사용하기도 한다. C파이썬에서 import array가 마이크로파이썬에서는 import uarray인 것과 같이 ‘u’로 시작하는 경우를 예로 들 수 있다.

또한 일부 모듈은 임베디드 하드웨어 전용이다. 보다 일반적인 가져오기 기기 모듈은 코드가 다양한 마이크로파이썬 친화적인 개발 보드의 휴대성을 극대화할 수 있도록 한다. pyBoard의 import pyb나 ESP8266 기반 보드의 import esp 등의 보드를 위한 전용 모듈도 있다. 보드 전용 모듈은 하드웨어의 특정 요소를 적극 활용하거나 효율성을 극대화한다. 예를 들면, pyb.delay(ms)나 pyb.disable_irq( )는 각각 pyBoard에서만 발생하는 인터럽트의 지연이나 비활성화를 요청하는 메커니즘이다.
마이크로파이썬에서 사용할 수 있는 전체 모듈 목록은 https://docs.micropython.org/en/latest/library/index.html#micropython-libraries에서 볼 수 있다.
• 구문 차이:
- 마이크로파이썬에는 리터럴 숫자와 키워드 사이에 공백이 필요하지만 C파이썬은 이러한 요구 사항이 없다.
- 마이크로파이썬은 := 부호를 사용하여 식별을 위한 변수로 할당할 수 있으며, C파이썬은 Syntax에러를 발생시킨다.
• 언어 및 빌트인 타입의 차이:
- 예외 체인은 마이크로파이썬에서 구현되지 않는다.
- 빌트인 타입의 처리 방식은 다르다; 예를 들어, 마이크로파이썬의 경우 배열 삭제를 지원하지 않는다.
- 함수에 대한 사용자 정의 속성은 지원되지 않는다.
- sys.stdin, sys.stdout, 및 sys.stderr를 재정의할 수 없다.

C파이썬과 마이크로파이썬의 차이점을 여기에 모두 열거하기에는 너무 많다. 하지만 극도로 세심한 파이썬 코더인 경우를 제외하고는 대부분의 사람들에 있어서 두 언어의 차이점은 꽤 적다고 느껴질 것이다. C파이썬에서 작동하는 기능을 구현하다가 에러가 발생할 경우, https://docs.micropython.org/en/latest/genrst/index.html에서 C파이썬과 마이크로파이썬간의 커다란 차이점을 확인할 수 있다.

개발자들이여, 뭉쳐라!

속도를 우선순위로 둔다면, 마이크로파이썬 내에서 인라인 어셈블리를 작성하는 것이 가능하다. 인라인 어셈블러는 ARM  Thumb-2 명령어 세트의 하위 집합을 지원한다. 인라인 어셈블리는 이후 파이썬 함수 호출로 변환된다. 아키텍처 참조 설명서에는 다음과 같이 적혀 있다. “…[어셈블리] 명령어는 달리 명시되지 않는 한 32비트의 부호있는 정수 데이터에서 작동한다. 지원되는 명령어 대부분은 레지스터 RO-R7에서만 작동하며, R8-R15가 지원되는 경우 별도로 명시된다. 레지스터 R8-R12는 함수에서 반환되기 전에 초기값으로 복원되어야 하며, 레지스터 R13-R15는 각각 링크 레지스터, 스택 포인터 및 프로그램 카운터를 담당한다.”


결론

마이크로파이썬은 임베디드 개발 세계에 있어서 흥미롭고 신선한 언어이다. 마이크로파이썬은 전문가와 제작자 모두에게 흥미진진한 새로운 가능성을 제공한다. 마이크로파이썬은 타이밍이나 성능 요구사항이 매우 엄격한 특정 에지 사용 사례에는 적합하지 않을 수 있지만, 전통적인 프로그래밍 언어의 훌륭한 동반자가 될 수 있다. 파이썬 언어의 부상에 힘입어 마이크로파이썬은 임베디드 하드웨어 개발에 착수하고자 하는 데스크탑 애플리케이션 개발자들을 위한 가교 역할을 할 수 있다.

leekh@seminet.co.kr
(끝)
<저작권자(c) 반도체네트워크, 무단 전재-재배포 금지>


PDF 다운로드

개인정보보호법 제15조에 의한 수집/이용 동의 규정과 관련하여 아래와 같이 PDF 다운로드를 위한 개인정보 수집 및 이용에 동의하십니까? 동의를 거부할 수 있으며, 동의 거부 시 다운로드 하실 수 없습니다.

이메일을 입력하면,
(1) 신규참여자 : 성명/전화번호/회사명/분야를 입력할 수 있는 입력란이 나타납니다.
(2) 기참여자 : 이메일 입력만으로 다운로드가 가능합니다.

×

회원 정보 수정