개발자/파이썬 Python

마이크로 컨트로러 개발에 최적화 된 Adafruitd의 CircuitPython

지구빵집 2020. 11. 10. 11:20
반응형

 

 

마이크로 컨트롤러 기반의 신속한 시제품 제작 및 개발을 위한 CircuitPython의 기본 사항 

 

마이크로 컨트롤러 기반의 신속한 시제품 제작 및 개발을 위한 CircuitPython의 기본 사항 (본 문서는 Digi-Key에서 제공하는 문서입니다. 작성자: Steve Leibson)

 

Python 언어는 프로그래밍의 접근성을 더 높였지만 처리, 메모리 및 주변 장치 리소스가 풍부한 PC 및 기타 기기에서 실행되도록 설계되었습니다. 리소스와 인터페이스가 더 제한된 내장형 시스템을 위해서는 MicroPython이라고 하는 마이크로 컨트롤러 최적화 버전이 인기를 끌었습니다. 이 같은 인기에 힘입어 오픈 소스 커뮤니티에서는 마이크로 컨트롤러 개발을 지원하기 위해 MicroPython을 특정 마이크로 컨트롤러 및 개발 기판에 적용해 왔습니다.

 

이미지 https://core-electronics.com.au/tutorials/circuitpython-vs-micropython-differences.html

 

이 기사에서는 이러한 적용 기술 중 하나인 Adafruit의 CircuitPython을 소개합니다. 전통적인 내장형 개발 언어인 C++와 비교하여 Python에 대해 간략히 살펴본 다음, Python이 MicroPython으로 그리고 지금의 CircuitPython으로 발전해온 방식에 대해 살펴봅니다. 그런 다음 CircuitPython을 사용하여 소프트웨어를 작성하는 프로세스를 설명하고 CircuitPython 환경을 지원하는 Adafruit 및 기타 공급업체의 개발 기판 몇 가지를 소개합니다.

 

Python을 사용하는 이유

 

원래 Arduino 개발 기판 및 이후 여러 기판은 내장형 프로토타입은 물론 제조사, 취미 및 학생 프로젝트에 매우 인기 높은 마이크로 컨트롤러 개발 기판이었습니다. 하지만 Arduino IDE 및 프로그래밍 언어는 C++를 기반으로 하는데, 이 언어는 강력하지만 초보 프로그래머에게는 어려운 구문과 엄격한 구두법 규칙을 가진 컴파일 언어입니다.

 

Python은 보다 새로운 프로그래밍 언어입니다. 주목할 만한 프로그래밍 성능과 매우 명확한 구문을 결합한 분석 방식의 대화형 개체 지향 언어이며, 쓰기 및 읽기가 용이하고 구문도 단순합니다. 이러한 특성들이 결합되어 프로그래밍 오류 수가 줄어들며 코드 재사용이 간편하여 소프트웨어 개발 속도를 높여줍니다.

 

언어의 해석적인 특성상 즉각적인 프로그래머 피드백을 제공하므로 실험 및 빠른 학습이 용이합니다. 이러한 이유로 Python은 이제 여러 학생과 제작자가 첫 번째로 배우는 프로그래밍 언어가 되었습니다.

 

한 가지 약점은 Python은 RAM과 대용량 스토리지 용량이 충분하고, 키보드, 대형 디스플레이 및 마우스를 비롯한 포괄적 사용자 인터페이스를 갖춘 PC 이상의 기기에서 실행되도록 설계되었다는 점입니다. 즉, 내장형 프로그래밍 언어로 설계되지 않았습니다. 하지만 마이크로 컨트롤러의 제한된 리소스 내에서 실행되도록 최적화된 Python 3 프로그래밍 언어의 가볍고 효율적인 구현인 MicroPython이 출시되었습니다.

 

내장형 프로그래밍 언어로서 MicroPython의 가치를 인식한 오픈 소스 커뮤니티는 이를 특정 마이크로 컨트롤러 및 개발 기판에 적용하면서 마이크로 컨트롤러 개발을 지원했습니다. 예를 들어 Adafruit는 CircuitPython이라고 하는 자체 MicroPython 버전을 개발했습니다. 이 버전은 저가형 마이크로 컨트롤 기판에서 프로그래밍 학습 및 실험을 단순화하도록 설계되었기 때문에 Adafruit의 개발 기판에서 사용 가능한 하드웨어 리소스 및 마이크로 컨트롤러에 최적화되어 있습니다. CircuitPython은 Adafruit의 몇몇 개발 기판에 사전 설치되어 제공되며 다른 기판에도 설치 가능합니다.

 

C++와 Python의 차이

 

Arduino IDE의 및 다양한 Arduino 개발 기판을 고려할 때 내장형 개발에 특정 버전의 Python이 필요한 이유를 알아보는 것이 순서입니다. 언어의 차이를 알아보면 그 답을 알 수 있습니다.

 

C++는 개체 지향 확장이 포함된 이전 C 언어의 확장입니다. 이러한 확장에도 불구하고 C++ 코드는 1960년대 후반과 1970년대 초반에 벨 연구소의 Kernigan과 Ritchie가 만든 C 구문을 유지하고 있기 때문에 다소 난해합니다. C는 대상 프로세서용 기계 명령어로 매핑하기 쉽도록 의도적으로 설계되었습니다. 이렇게 프로그래머가 아니라 기계의 필요성에 편향된 특성이 언어의 구문에 그대로 나타납니다. 상용 마이크로 프로세서는 1971년이 되어서야 등장했기 때문에 C는 원래 미니컴퓨터를 위해 개발되었습니다. 마이크로 프로세서용 C 컴파일러는 1980년대에 유용한 도구로 점차적으로 발전했습니다. C에는 항상 컴파일된 언어가 있었으며 그것이 바로 C++입니다.

 

덴마크 컴퓨터 과학자인 Bjarne Stroustrup은 1979년에 C++ 개발을 시작했습니다. 그의 첫 번째 언어 교과서는 1985년에 선보였습니다. C++는 1998년이 되어서야 표준 프로그래밍 언어가 되었습니다. Stroustrup의 C++ 언어는 C와 마찬가지로 원래 대형 컴퓨터를 대상으로 했습니다. 2003년에 개발된 Arduino IDE(통합 개발 환경)는 C++를 마이크로 컨트롤러에 유용하게 만들었습니다.

 

Python 역시 개체 지향 언어입니다. 네덜란드 프로그래머 Guido van Rossumin이 개발했으며 1991년에 처음 발표되었습니다. Python의 구문론적 설계는 인간을 위한 코드 가독성을 강조하는데 이 점이 Python과 C++의 중요 차이점 중 하나입니다. 가독성과 밀접하게 연관된 작성 편의성은 Python의 또 다른 특성 중 하나입니다. 작성 편의성은 Python을 사용하면 일반적으로 프로그래머가 애플리케이션을 더 빠르게 작성할 수 있고 이에 따라 실험이 가능하며 시제품 제작 및 개발 주기가 단축된다는 것을 의미합니다.

 

두 번째 주요 차이점은 Python은 1960년대에 미니컴퓨터를 위해 처음 선보였고 1970년대에 마이크로 컴퓨터의 출현으로 성수기를 맞은 Basic 프로그래밍 언어처럼 해석형 언어라는 점입니다. Basic과 마찬가지로 Python의 해석적 특성은 실험에 용이하며, 따라서 컴파일된 프로그래밍 언어에 사용되는 편집/컴파일/다운로드/실행 개발 주기를 통한 학습이 용이합니다. 하지만 Basic과 달리 Python은 Basic이 처음 개발된 이후 50여 년 동안 발전한 컴퓨터 과학이 적용된 현대적인 더 높은 수준의 개체 지향 언어입니다.

 

예를 들어, 사용 전에 Python의 변수를 선언하거나 입력할 필요가 없습니다. 프로그래머는 변수가 정수인지 부동소수점 숫자인지에 대해 걱정할 필요가 없습니다. Python 인터프리터가 이를 모두 처리하여 런타임에 적절하게 선택합니다.

 

C++와 Python의 또 다른 두 가지 차이점은 문자열 처리와 구두점입니다. 많은 프로그래머가 C++에서의 문자열 처리가 모호하고 혼란스럽다고 느낍니다. Python의 문자열 처리는 훨씬 더 단순하며, 오랫동안 Basic의 강점이었던 단순한 문자열 처리 기능을 연상케 합니다.

 

마찬가지로 C 및 C++ 구두점, 특히 중괄호({})는 경험 많은 프로그래머에게도 자주 걸림돌이 됩니다. 프로그램에 항상 중괄호가 홀수인 것처럼 느껴져서 프로그래머가 누락된 중괄호가 들어갈 위치를 찾기 위해 코드를 뒤져야 합니다. Python은 이러한 까다로운 구두점이 없고 들여 쓰기를 사용하므로 가독성이 높습니다.

 

MicroPython의 기원

 

C 및 C++처럼 Python은 원래 대형 컴퓨터에서 실행되도록 설계되었습니다. 그 결과 마이크로 컨트롤러의 프로그래밍에 너무 많은 리소스를 사용해야 했습니다. 이에 따라 호주의 프로그래머이자 물리학자인 Damien George는 마이크로 컨트롤러의 제한된 리소스에서 실행할 수 있는 Python 버전인 MicroPython을 개발했습니다. Arduino 개발 기판은 MicroPython의 초기 하드웨어 목표였습니다.

 

MicroPython의 대화형 특성은 REPL(read-eval-print-loop) 창이라는 공식 이름의 명령 인터페이스에 잘 나타나며, 이 인터페이스는 일반적으로 호스트 PC를 마이크로 컨트롤러 개발 기판에 연결하는 직렬연결을 통해 작동합니다. REPL 인터페이스는 1970년대 및 1980년대의 Basic 명령줄 인터페이스와 매우 유사합니다. 사용자 입력을 받고(단일 표현식 또는 명령문) REPL 창을 통해 사용자에게 결과를 반환하거나 명령문에 포함된 명령을 수행합니다.

 

REPL 인터페이스를 사용하면 변수를 쿼리하거나, I/O 라인을 토글 하거나, 연결된 주변 장치로 문자열을 보낼 수 있습니다. Enter 키를 누르면 즉시 라인이 해석되어 실행됩니다. 이는 해석형 언어의 특성입니다.

이 MicroPython 기능은 실험적 프로그래밍 및 디버깅을 가능하게 하며, MicroPython을 초보자나 전문 프로그래머가 모두 쉽게 사용할 수 있는 언어로 만들어 줍니다. REPL 사용자 인터페이스는 Arduino IDE의 전통적인 편집-컴파일-실행-디버그 주기에 비해 더 빠른 개발 주기를 지원합니다. 경험이 많은 프로그래머라도 MicroPython의 REPL 사용자 인터페이스를 사용하여 새로운 주변 장치 유형을 대화형으로 실험해볼 수 있는 이점을 누릴 수 있습니다.

 

개발 기판에 대한 CircuitPython 지원

 

각 마이크로 컨트롤러에는 고유한 주변 장치 집합이 있으며 각 개발 기판이 이 목록에 추가됩니다. 이러한 주변 장치에는 지원 라이브러리가 필요합니다. Arduino IDE와 MicroPython 모두에도 마찬가지입니다. 또한 Adafruit의 1655 NeoPixel 주소 지정 가능 RGB LED처럼 라이브러리 지원이 필요한 여러 애드온 주변 장치가 있습니다.

 

Adafruit는 더 높은 수준의 지원을 제공하기 위해 몇몇 회사의 저렴한 마이크로 컨트롤러 개발 기판의 특정 요구 사항을 충족하는, CircuitPython이라는 고유한 버전의 MicroPython을 개발했습니다. 또한 여러 주변 장치 라이브러리를 방대한 Arduino 집합에서 CircuitPython 라이브러리로 변환하여 점점 더 많은 CircuitPython용 주변 장치 지원 라이브러리를 제공합니다.

 

Adafruit는 CircuitPython을 명시적으로 지원하기 위한 마이크로 컨트롤러 개발 기판 라인을 설계했습니다. 여기에는 다음이 포함됩니다.

 

3333 10개의 주소 지정 가능, 제어 가능 RGB LED가 포함된 Circuit Playground Express(그림 1)

 

Adafruit의 3333 Circuit Playground Express 이미지 그림 1: 10개의 주소 지정 가능, 제어 가능 RGB LED가 포함된 Adafruit의 3333 Circuit Playground Express. (이미지 출처: Adafruit)

 

 

3500 크기가 27mm x 15.3mm x 2.75mm에 불과한 Trinket M0 개발 기판(그림 2)

 

Adafruit의 3500 Trinket M0 개발 기판 이미지 그림 2: 크기가 27mm x 15.3mm x 2mm에 불과한 Adafruit의 3500 Trinket M0 개발 기판. (이미지 출처: Adafruit)

 

 

3501 Gemma M0는 대략적으로 25센트 미화 동전 크기이며 USB 포트 또는 별도의 배터리 포트에서 전력을 공급받을 수 있습니다(그림 3).

 

Adafruit의 3501 Gemma M0 이미지 그림 3: Adafruit의 3501 Gemma M0는 대략적으로 25센트 미화 동전 크기이며 USB 포트 또는 별도의 배터리 포트에서 전력을 공급받을 수 있습니다. (이미지 출처: Adafruit)

 

3403 Feather M0 Express는 맞춤 회로망을 위한 작은 브레드 기판 영역을 갖춘 개발 기판입니다(그림 4).

 

Adafruit의 3403 Feather M0 Express 개발 기판 이미지 그림 4: Adafruit의 3403 Feather M0 Express 개발 기판은 맞춤 회로망을 위한 작은 브레드 기판 영역을 갖추고 있습니다. (이미지 출처: Adafruit)

 

이 네 개의 Adafruit 마이크로 컨트롤러 개발 기판은 모두 USB를 기본 지원하는 Microchip Technology(이전 Atmel)의 SAMD21 마이크로 컨트롤러를 기반으로 합니다. 하지만 CircuitPython은 Adafruit의 개발 기판 및 SAMD21 마이크로 컨트롤러 이상을 지원합니다. Adafruit의 3406 Feather NRF52 및 Nordic Semiconductor의 nRF52-DK 개발 기판(모두 Nordic Semiconductor의 nRF52832 마이크로 컨트롤러 기반)을 포함하여 다른 마이크로 컨트롤러가 포함된 다른 개발 기판용 CircuitPython 버전도 선보이기 시작했습니다. 또한 nRF52840 마이크로 컨트롤러를 기반으로 하는 Nordic Semiconductor의 nRF52840-DK 개발 기판(그림 5) 역시 CircuitPython에서 지원합니다. 이러한 세 기판의 기반이 되는 두 마이크로 컨트롤러에는 해당 소프트웨어 지원과 함께 BLE(Bluetooth 저에너지)가 칩에 통합되어 있습니다.

 

Nordic Semiconductor의 nRF52840-DK 개발 기판 이미지 그림 5: Nordic Semiconductor의 nRF52840-DK 개발 기판에는 BLE 지원이 통합되어 있습니다. (이미지 출처: Nordic Semiconductor)

 

CircuitPython을 사용한 개발

 

Adafruit는 언어를 직접 지원하도록 설계된 개발 기판에 CircuitPython을 적용하는 독특한 접근법을 취했습니다. 이러한 기판 중 하나를 호스트 PC의 USB 포트에 꽂으면 기판이 PC에 디스크 드라이브로 나타납니다. 이 디스크 드라이브의 루트 디렉터리에는 인터프리터, 사용자 프로그램 및 라이브러리 파일이 포함된 폴더를 포함한 중요 CircuitPython 파일이 표시됩니다. 이러한 방식 덕분에 호스트 PC가 기존 파일 시스템 드라이버를 사용하여 개발 기판에 손쉽게 액세스 할 수 있습니다.

 

호스트 PC의 CircuitPython 사용자 인터페이스에는 다운로드 가능한 무료 오픈 소스 에디터와 REPL 인터페이스가 필요합니다. Adafruit에서는 그림 6에 표시된 Mu라는 오픈 소스 애플리케이션을 권장합니다. Mu 화면은 편집 작업을 수행하는 코드 창과 프로그래머가 개발 기판의 CircuitPython 인터프리터를 제어하는 REPL 제어 및 모니터 창으로 분할됩니다.

 

Mu라는 Adafruit 오픈 소스 프로그래밍 인터페이스 이미지 그림 6: Adafruit에서는 Mu라는 오픈 소스 프로그래밍 인터페이스의 사용을 권장합니다. Mu 화면은 편집 작업을 수행하는 코드 창과 프로그래머가 개발 기판의 CircuitPython 인터프리터를 제어하는 REPL 제어 및 모니터 창으로 분할됩니다. (이미지 출처: codewith.mu/en/tutorials/1.0/adafruit)

 

코드 창에 프로그램을 입력하고 Mu의 “Save” 버튼을 클릭하면, 코드가 Adafruit의 CircuitPython 개발 기판에 있는 SAMD21 마이크로 컨트롤러의 대용량 온칩 플래시 메모리에 저장됩니다. 모든 CircuitPython 코드는 개발 기판 마이크로 컨트롤러의 플래시 메모리에 상주합니다. CircuitPython 기판은 PC에서 디스크 드라이브처럼 보이기 때문에, 이 방식은 운영 체제 관점에서 부자연스럽지 않습니다.

 

결론

 

Python 언어는 프로그래머에게 대화형 프로그래밍, 실험 및 디버깅을 포함한 다양한 이점을 제공합니다. 변수 선언이나 입력 및 혼동스러운 구두점을 사용할 필요가 없이 인간과 유사한 단순한 언어 구문을 사용합니다. MicroPython은 Python에서 마이크로 컨트롤러 프로그래밍을 가능하게 해주는 Python 3의 변형입니다.

 

위에 설명한 것처럼, Adafruit에서는 MicroPython을 도입하여 실험 및 학습을 더욱 단순화하고 소프트웨어 개발 시간을 단축하기 위한 직접 하드웨어 지원용 CircuitPython을 선보였습니다. CircuitPython은 Microchip의 SAMD21 마이크로 컨트롤러를 기반으로 하는 몇몇 저가형 마이크로 컨트롤러 개발 기판과 Nordic Semiconductor의 BLE 지원 nRF 마이크로 컨트롤러를 기반으로 하는 다른 개발 기판도 지원합니다. 

 

 

 

 

 

 

반응형