마이크로피톤

MicroPython
마이크로피톤
MicroPython new logo.svg
개발자데미안 P.조지
초기 릴리즈2014년 5월 3일, 8년 전(2014-05-03)
안정된 릴리스
1.19[1] / 2022년 6월 16일; 49일 전 (2022년 6월 16일)
저장소
기입처C
플랫폼ARM Cortex-M, STM32, ESP8266, ESP32, 16비트 PIC, Unix, Microsoft Windows, Zephyr, JavaScript, RP2040
면허증.MIT 라이선스[2]
웹 사이트micropython.org

MicroPython은 C로 작성된 Python 3과 대부분 호환되는 프로그래밍 언어의 소프트웨어 구현으로, 마이크로 [3][4]컨트롤러에서 실행되도록 최적화되어 있습니다.

MicroPython은 Python 컴파일러에서 바이트 코드로, 그리고 그 바이트 코드의 런타임 인터프리터로 구성됩니다.지원되는 명령을 즉시 실행하는 대화형 프롬프트(REP)가 사용자에게 표시됩니다.여기에는 핵심 Python 라이브러리가 포함되어 있습니다.MicroPython에는 프로그래머가 낮은 수준의 [5]하드웨어에 접근할 수 있는 모듈이 포함되어 있습니다.

프로젝트의 소스 코드는 MIT 라이선스에 [6]따라 GitHub에서 사용할 수 있습니다.

역사

MicroPython은 호주의 프로그래머이자 이론 물리학자 Damien George가 2013년 [7]Kickstarter 지원 캠페인에 성공한 후 처음 만들었습니다.오리지널 Kickstarter 캠페인은 STM32F4를 탑재한 개발 보드 "pyboard"를 탑재한 MicroPython을 출시했지만 MicroPython은 다수의 ARM 기반 [8]아키텍처를 지원합니다.메인라인에서 지원되는 포트는 ARM Cortex-M(많은 STM32 보드, TI CC3200/WiPy, Teeny 보드, Nordic nRF 시리즈, SAMD21 및 SAMD51) ESP8266, ESP32, 16비트 PIC, Unix, Windows, Zephyr 및 [9]JavaScript입니다.또한 메인 라인에서 [10]지원되지 않는 다양한 시스템 및 하드웨어 플랫폼용 포크가 많이 있습니다.

2016년에는 파이썬 소프트웨어 재단이 [11]BBC와의 마이크로 비트 파트너십에 기여한 일환으로 BBC 마이크로 비트용 마이크로 피톤 버전이 만들어졌습니다.

2017년 7월, MicroPython은 Circuit를 만들기 위해 포크를 만들었다.Python은 교육과 사용 편의성에 중점을 둔 MicroPython 버전입니다.MicroPython 및 회로Python은 다소 다른 하드웨어 세트를 지원합니다(예: Circuit).Python은 Atmel SAM D21 및 D51 보드를 지원하지만 ESP8266)에 대한 지원은 중단되었습니다.버전 4.0에서는 회선Python은 MicroPython 버전 1.9.[12]4를 기반으로 합니다.

2017년 Microsemi는 RISC-V([13]RV32 및 RV64) 아키텍처용 MicroPython 포트를 만들었습니다.

2019년 4월, 레고 마인드스톰 EV3용 마이크로피톤 버전이 [14]개발되었습니다.

2021년 1월, RP2040용의 MicroPython 포토(ARM Cortex-M0+, 라즈베리 파이 피코등의 포토)가 [15]작성되었습니다.

특징들

Python 실행 기능

MicroPython은 Python을 실행할 수 있는 기능을 가지고 있어 사용자가 간단하고 이해하기 쉬운 프로그램을 [16]만들 수 있습니다.MicroPython은 많은 표준 Python 라이브러리를 지원하며 Python에서 가장 많이 사용되는 [16]라이브러리의 80% 이상을 지원합니다.MicroPython은 마이크로컨트롤러와 [17]Python 사이의 일반적인 성능 격차를 지원하기 위해 특별히 설계되었습니다.Python 코드는 하드웨어에 직접 액세스하고 하드웨어와 상호 작용할 수 있으며 운영 [18]체제에서 실행되는 일반 Python 애플리케이션을 사용하면 사용할 수 없는 하드웨어 가능성이 높아집니다.

코드 휴대성

MicroPython의 하드웨어 추상화층(HAL) 기술 활용을 통해 개발된 코드를 동일한 제품군 또는 플랫폼 내의 다른 마이크로 컨트롤러와 MicroPython을 지원하고 다운로드할 수 있는 장치 간에 이식할 수 있습니다.프로그램은 고성능 마이크로컨트롤러에서 개발 및 테스트되며, 저성능 마이크로컨트롤러에서 [19]사용되는 최종 어플리케이션과 함께 배포됩니다.

모듈

MicroPython은 새로운 코드가 작성되면 프리즈 모듈을 생성하여 개발된 펌웨어의 일부가 될 수 있는 라이브러리로 사용할 수 있는 기능을 제공합니다.이 기능은 이미 오류가 없는 동일한 테스트된 코드를 MicroPython 환경에 반복적으로 다운로드하는 것을 방지하는 데 도움이 됩니다.이 유형의 모듈은 마이크로컨트롤러의 모듈 디렉토리에 저장되며 컴파일 및 마이크로컨트롤러에 업로드됩니다.여기서 Python의 [19]import 명령어를 사용하여 라이브러리를 사용할 수 있습니다.

읽기 평가 인쇄 루프

Read-Eval-Print Loop(REPL; 읽기 평가 인쇄 루프)을 사용하면 개발자는 개별 코드 행을 입력하여 [20]단말기에서 즉시 실행할 수 있습니다.Linux 기반 및 macOS 시스템에는 시리얼 USB 연결을 사용하여 MicroPython 디바이스의 REP에 직접 연결하는 데 사용할 수 있는 터미널 에뮬레이터가 있습니다.코드의 각 부분을 실행하고 결과를 시각적으로 확인할 수 있으므로, REP는 애플리케이션의 일부를 즉시 테스트할 수 있도록 지원합니다.코드의 다른 부분이 REP에 로드되면 추가 REP 기능을 사용하여 코드의 [16]기능을 실험할 수 있습니다.

편리한 REP 명령어(시리얼 [20]콘솔에 접속한 후):

  • CTRL + C: 키보드 인터럽트
  • CTRL + D: 새로고침
  • help(): 도움말메시지
  • help ( ) :내장 모듈 목록
  • import board [ENTER] dir(board): 마이크로컨트롤러 보드의 모든 핀을 프로그램 코드로 사용할 수 있습니다.

제한 사항

MicroPython의 주요 한계는 실행 [16]시 시스템에 의해 코드가 해석되기 때문에 Python에서 채택된 코드의 단순화된 스타일이다.MicroPython 프로그램은 데이터를 사용하고 연결에 액세스할 때 더 높은 정밀도를 요구하며 Python의 [16]단순성으로 인해 속도가 느려질 수 있습니다.

MicroPython은 언어를 지원하는 마이크로컨트롤러 [17]선택지가 적은 Arduino와 같은 다른 인기 플랫폼보다 마이크로컨트롤러 시장에서 하드웨어 지원이 제한적입니다.MicroPython에는 다른 [17]플랫폼과 달리 통합 개발 환경(IDE)이나 특정 편집기가 포함되어 있지 않습니다.

구문 및 의미론

MicroPython의 구문은 명확하고 이해하기 쉬운 스타일과 [21]파워로 인해 Python에서 채택되었습니다.대부분의 다른 프로그래밍 언어와는 달리 구두점은 [16]가독성을 우선시하기 위해 구문적인 조작을 적게 사용합니다.

코드 블록

MicroPython은 Python의 코드 블록 스타일을 채택하여 특정 함수, 조건 또는 루프에 고유한 코드를 들여씁니다. 즉, 조건식이 올바르게 [16]평가되어야만 특정 식이 평가됩니다.이는 일반적으로 기호나 키워드를 사용하여 [16]블록을 구분하는 대부분의 다른 언어와는 다릅니다.

이는 시각적 구조가 의미 구조를 반영하기 때문에 MicroPython 코드의 가독성을 보조합니다.이 주요 기능은 간단하지만 잘못된 들여쓰기를 사용하면 코드가 잘못된 조건에서 실행되거나 [16]인터프리터로부터 전체적인 오류가 발생할 수 있기 때문에 중요합니다.

콜론(:)은 조건문의 끝을 나타내는데 사용되는 키 기호이며, 해당 문장이 평가되어야 함을 인터프리터에 전달하고 그 뒤에 이어지는 움푹 들어간 본문을 [16]실행하도록 지시합니다.들여쓰기 크기는 탭 하나 또는 공백 4개에 해당합니다.

운용

MicroPython은 원시적이고 논리적인 [18]연산을 사용하여 다양한 수학적 연산을 수행할 수 있습니다.

지원되는[18] 조작
유형 교환입니다. 이름. 예
산술 + 추가 변수 + 1
- 뺄셈 변수 - 1
* 곱셈 변수 * 4
/ 나누기 변수 / 4
% 모듈로 구 변수 % 4
비교 == 동등. expression1 == expression2
!= 동일하지 않다 expression1 != expression2
< > 보다 적은 expression1 < expression 2
> 보다 크다 expression1 > expression2
<=> 이하 expression1 <= expression2
>= 크거나 같음 expression1 > = expression2
논리 & 비트 및 variable1 & variable2
비트 또는 variable1 variable2
^ 비트 배타적 또는 variable1 ^ variable2
~ 비트 보체 ~4101
그리고. 논리적이고 variable1 및 variable2
또는 논리적인 또는 variable1 또는 variable2

라이브러리

MicroPython은 [22]Python과 유사한 라이브러리를 사용한 Python의 린하고 효율적인 구현입니다.일부 표준 Python 라이브러리는 MicroPython에 동일한 라이브러리의 이름을 지정하여 둘을 구분합니다.MicroPython 라이브러리는 메모리 [18]절약을 위해 널리 사용되는 기능을 제거하거나 수정하여 더 작아졌습니다.

MicroPython [18]라이브러리에는 다음 세 가지 유형이 있습니다.

  • 표준 Python 라이브러리(빌트인 라이브러리)에서 파생됨
  • 특정 MicroPython 라이브러리
  • 하드웨어 기능을 지원하는 특정 라이브러리

MicroPython은 고도의 커스터마이즈와 설정이 가능하며, 각 보드(마이크로 컨트롤러)에 따라 언어가 다르며 라이브러리의 가용성이 다를 수 있습니다.모듈 또는 모듈 전체의 일부 기능 및 클래스는 사용할 수 없거나 [18]변경될 수 있습니다.

MicroPython[5] 표준 Python 라이브러리
라이브러리명 묘사
배열 어레이에서의 조작
cmath 복소수에 대한 산술 함수를 제공합니다.
gc 가비지 콜렉터
수학 는 부동소수점 숫자에 대한 기본적인 연산 기능을 제공합니다.
시스템 시스템 수준 함수. 인터프리터가 사용하는 변수에 대한 액세스를 제공합니다.
ubinascii 바이너리와 ASCII를 변환하는 함수
u컬렉션 다양한 개체를 저장하는 컬렉션 및 컨테이너 유형에 대한 작업
uerno 에러 코드에 액세스 할 수 있습니다.
uhashlib 이진 해시 알고리즘에 대한 연산
우히프 히프 큐알고리즘을 구현하기 위한 조작
우이오 입력/출력 스트림 처리 작업
ujson JSON 문서와 Python 개체 간의 변환을 처리합니다.
uos 파일 시스템 액세스 및 기본 운영 체제 기능을 위한 기능
우레 정규 표현식 매칭 조작을 실장하다
사용하다 여러 스트림에서 이벤트를 처리하는 함수
usocket 소켓에 연결(케이블), 소켓인터페이스에 액세스 제공
구조 기본 데이터 유형을 패킹 및 언팩하여 Python 개체로 변환합니다.
시간 는 시간 간격 측정 및 지연 구현 등 시간과 날짜 기능을 제공합니다.
uzlib 이진 데이터를 압축 해제하는 작업
MicroPython 고유의[5] 라이브러리
라이브러리명 묘사
프레임부 는 디스플레이에 송신하는 비트맵이미지 작성에 사용할 수 있는 프레임버퍼를 제공합니다.
기계. 하드웨어 블록 접근 및 상호작용을 지원하는 기능
마이크로폰 MicroPython 내부 접근 및 제어
네트워크 네트워크 드라이버의 인스톨을 서포트하고, 네트워크를 개입시켜 대화할 수 있도록 합니다.
유형 액세스 바이너리 데이터 구조

커스텀 MicroPython 라이브러리

개발자가 새로운 애플리케이션을 만들기 시작하면 표준 MicroPython 라이브러리와 드라이버는 조작이나 계산이 불충분하여 요건을 충족하지 못할 수 있습니다.Python과 마찬가지로, MicroPython의 기능을 기존 라이브러리와 [19]펌웨어의 기능을 확장하는 커스텀 라이브러리로 확장할 수 있습니다.

MicroPython에서 .py로 끝나는 파일은 사용자가 기존 [18]라이브러리의 사용 및 구현을 확장할 수 있는 다른 라이브러리 별칭보다 우선합니다.

지원 하드웨어

MicroPython의 구현과 인기가 계속 증가함에 따라 MicroPython을 실행할 수 있는 보드가 많아졌습니다.많은 개발자들이 서로 다른 마이크로 컨트롤러에 다운로드할 [18]수 있는 프로세서별 버전을 구축하고 있습니다.마이크로 컨트롤러에 MicroPython을 설치하는 것은 문서화되어 있어 사용자에게 편리합니다.[19]MicroPython은 마이크로컨트롤러 하드웨어와 애플리케이션 간의 상호작용을 단순하게 함으로써 리소스가 제한된 환경에서 높은 수준의 [16]응답성으로 작업하는 동안 다양한 기능에 액세스할 수 있도록 합니다.

MicroPython을 [18]실행하는 데 사용된 두 가지 유형의 보드:

  • MicroPython은 제조 시 로드됩니다. 즉, MicroPython만 실행할 수 있습니다.
  • 보드에 MicroPython을 설치할 수 있는 펌웨어가 있는 보드.

코드 실행

프로그램을 MicroPython 보드로 이동하려면 파일을 생성하여 마이크로컨트롤러에 복사하여 실행합니다.컴퓨터와 같은 장치에 연결된 하드웨어를 사용하면 보드의 플래시 드라이브가 장치에 나타나 파일을 플래시 드라이브로 이동할 수 있습니다.기존 python 파일인 boot.py과 main.py은 일반적으로 수정되지 않습니다.마이크로컨트롤러가 부팅될 때마다 프로그램을 실행하고 싶다면 main.py을 변경할 수 있습니다.그렇지 않으면 프로그램은 REP [18]콘솔을 사용하여 실행됩니다.

칠판

파이보드는 MicroPython의 소프트웨어 기능을 완전히 지원하는 공식 MicroPython 마이크로 컨트롤러 보드입니다.파이보드의 하드웨어 기능은 다음과 같습니다.[5]

기동 프로세스

파이보드에는 /flash라는 이름의 내장 드라이브(파일 시스템)가 포함되어 있으며, 보드의 플래시 메모리에 저장되어 있으며, 마이크로SD 카드를 슬롯에 삽입하여 /sd를 통해 액세스할 수 있습니다.부팅 시 파이보드는 /flash 또는 /sd에서 부팅할 파일 시스템을 선택해야 하며 현재 디렉토리는 /flash 또는 /sd로 설정됩니다.기본적으로는 SD 카드가 삽입되어 있는 경우 /sd가 사용되며 삽입되어 있지 않은 경우 /flash가 사용됩니다.필요한 경우 /flash/SKIPSD라는 이름의 빈 파일을 생성하여 SD 카드를 사용하지 않도록 할 수 있습니다.이 파일은 보드에 남아 있으며, Pyboard가 부팅될 때 존재하며, 부팅 [5]프로세스에서 SD 카드를 건너뜁니다.

부트 모드

파이보드의 전원이 정상적으로 켜지거나 재설정 버튼을 누르면 파이보드가 표준 모드로 부팅됩니다. 즉, boot.py 파일이 실행되며 USB가 구성되고 마지막으로 파이썬 프로그램이 [5]실행됩니다.

보드가 부트 처리 중일 때 사용자 스위치를 누른 후 사용자 스위치를 계속 누른 상태에서 reset을 누르면 표준 부트 시퀀스를 덮어쓸 수 있습니다.Pyboard의 LED는 모드 간에 점멸하며 LED가 사용자가 원하는 모드에 도달하면 사용자 스위치를 놓으면 보드가 특정 [5]모드로 부팅됩니다.

부트 모드는 다음과 같습니다.[5]

  • 표준 부트: 녹색 LED만 (boot.py 다음 python 프로그램 참조)
  • 세이프 부트: 오렌지 LED만 (부팅 중에는 스크립트를 실행하지 않음)
  • 파일 시스템 리셋: 녹색 LED와 주황색 LED를 함께 사용(플래시 드라이브를 공장 출하 시 상태로 리셋하고 세이프 모드로 부팅)
  • 파일 시스템이 손상되었을 때 수정으로 사용됨

에러

  • 빨간색 LED와 녹색 LED가 번갈아 깜박이는 경우 python 스크립트에 오류가 있으므로 REP를 사용하여 디버깅해야 합니다.
  • 4개의 LED가 모두 켜졌다 꺼졌다 하면 하드 장애가 발생하여 복구할 수 없으며 하드 [5]리셋이 필요합니다.

프로그래밍[18] 예시

예 1: Hello world 프로그램:

시리얼 콘솔로의 인쇄 수  인쇄물(안녕, 세상아!) 

예 2:Import + LED 켜기

수입품 pyb  # LED 점등  pyb.이끌었다(1).에() 

예 3: 파일 읽기 + 루프

수입품 os  # 파일 열기 및 읽기  와 함께 열다.(‘/재기동작.txt’) ~하듯이 f:  인쇄물(f.읽어주세요()) 

바이트 코드

MicroPython은 MicroPython 바이트 코드(파일 확장자 .mpy)를 생성하는 크로스 컴파일러를 포함합니다.Python 코드는 마이크로 컨트롤러에서 직접 바이트 코드로 컴파일하거나 다른 곳에서 미리 컴파일할 수 있습니다.

MicroPython 펌웨어는 컴파일러 없이 빌드할 수 있으며, 미리 컴파일된 mpy 프로그램을 실행할 수 있는 가상 머신만 남습니다.

구현 및 사용방법

MicroPython은 표준 소프트웨어에 의해 특정 마이크로컨트롤러에 로드된 펌웨어를 통해 플래시 메모리에 사용되며 시리얼 인터페이스를 [19]에뮬레이트하는 컴퓨터에 로드된 터미널 애플리케이션을 사용하여 통신합니다.

MicroPython의 주요 용도는 세 가지 [19]범주로 일반화할 수 있습니다.

  • 교육 목적: MicroPython의 Read – Eval – Print Loop(REPL)을 사용하여 마이크로컨트롤러와 상호 작용함으로써 데이터 처리 및 보드와의 통신 개념을 보다 복잡한 프로그래밍 언어보다 간단한 방법으로 시각적으로 설명할 수 있습니다.
  • 디바이스 및 센서 설계 개발 및 테스트: MicroPython은 주변기기 통신 셋업 및 제어 구현이라는 공통 개발자의 태스크를 해결하는 마이크로컨트롤러에서 사용되는 인터페이스의 검증되고 버그가 없으며 철저하게 테스트된 참조 구현을 제공합니다.MicroPython은 디바이스 레지스터에 대한 직접적이고 인터랙티브한 접근성을 제공하며, 이를 통해 기능을 쉽게 검증하고 디바이스 제어 및 데이터 수집을 위한 하드웨어 부품과 디바이스 및 알고리즘을 개발하고 테스트할 수 있습니다.
  • 복잡한 애플리케이션 설계를 위한 감시 및 구성 도구: 특정 애플리케이션에는 고성능 마이크로 컨트롤러에 특정 애플리케이션이 필요합니다.MicroPython은 상태 모니터링 및 시스템 파라미터 설정을 지원합니다.

MicroPython의 실장은 표준 라이브러리 및 지원 라이브러리의 가용성, 마이크로컨트롤러의 플래시 메모리 및 [19]RAM 크기에 따라 다를 수 있습니다.

레퍼런스

  1. ^ https://github.com/micropython/micropython/releases/tag/v1.19 를 참조해 주세요.
  2. ^ George, Damien P. (4 May 2014). "micropython/LICENSE at master · micropython/micropython". GitHub. Retrieved 11 February 2017.
  3. ^ Venkataramanan, Madhumita (6 December 2013). "Micro Python: more powerful than Arduino, simpler than the Raspberry Pi". Wired. Retrieved 15 December 2016.
  4. ^ Yegulalp, Serdar (5 July 2014). "Micro Python's tiny circuits: Python variant targets microcontrollers". InfoWorld. Retrieved 15 December 2016.
  5. ^ a b c d e f g h i "MicroPython - Python for microcontrollers". micropython.org. Retrieved 12 August 2017.
  6. ^ "MicroPython on GitHub". GitHub. 7 February 2022.
  7. ^ "Micro Python: Python for microcontrollers". Kickstarter. Kickstarter. Retrieved 15 December 2016.
  8. ^ Beningo, Jacob (11 July 2016). "Prototype to production: MicroPython under the hood". EDN Network. Retrieved 15 December 2016.
  9. ^ George, Damien P. "micropython/ports at master · micropython/micropython". GitHub. Retrieved 22 October 2019.
  10. ^ Sokolovsky, Paul. "Awesome MicroPython". GitHub. Retrieved 22 October 2019.
  11. ^ Williams, Alun (7 July 2015). "Hands on with the BBC Micro-Bit user interface". ElectronicsWeekly.com. Retrieved 8 July 2015.
  12. ^ Shawcroft, Scott (22 May 2019). "CircuitPython 4.0.1 released!". Adafruit Blog. Adafruit Industries. Retrieved 11 June 2019.
  13. ^ "RISC-V Poster Preview — 7th RISC-V Workshop" (PDF). 28 November 2017. Retrieved 17 December 2018.
  14. ^ "LEGO releases MicroPython for EV3 based on ev3dev and Pybricks". www.ev3dev.org. Retrieved 21 April 2020.
  15. ^ "Meet Raspberry Silicon: Raspberry Pi Pico now on sale at $4". www.raspberrypi.org. 21 January 2021. Retrieved 21 January 2021.
  16. ^ a b c d e f g h i j k Alsabbagh, Marwan (2019). MicroPython Cookbook. Birmingham, UK: Packt Publishing.
  17. ^ a b c Bruno, P. "An Introduction to MicroPython". All3DP. All3DP. Retrieved 9 May 2022.
  18. ^ a b c d e f g h i j k Bell, Charles (2017). MicroPython for the Internet of Things. Berkeley, USA: Apress.
  19. ^ a b c d e f g Gaspar, G.; Kuba, P.; Flochova, J.; Dudak, J.; Florkova, Z. (2020). Development of IoT applications based on the MicroPython platform for Industry 4.0 implementation. 2020 19th International Conference on Mechatronics – Mechatronika (ME). pp. 1–7.
  20. ^ a b Rembor, K. "The REPL Welcome to CircuitPython!". Adafruit Learning System. Adafruit Learning System. Retrieved 9 May 2022.
  21. ^ Wang, L.; Li, Y.; Zhang, H.; Han, Q.; Chen, L. (2021). An Efficient Control-flow based Obfuscator for Micropython Bytecode. 2021 7th International Symposium on System and Software Reliability (ISSSR). pp. 54–63.
  22. ^ Khamphroo, M.; Kwankeo, N.; Kaemarungsi, K.; Fukawa, K. (2017). MicroPython-based educational mobile robot for computer coding learning. 2017 8th International Conference of Information and Communication Technology for Embedded Systems (IC-ICTES). pp. 1–6.

외부 링크