마이크로피톤
MicroPython개발자 | 데미안 P.조지 |
---|---|
초기 릴리즈 | 2014년 5월 | , 전(
안정된 릴리스 | 1.19[1] / 2022년 6월 16일; 2022년 16일) |
저장소 | |
기입처 | C |
플랫폼 | ARM Cortex-M, STM32, ESP8266, ESP32, 16비트 PIC, Unix, Microsoft Windows, Zephyr, JavaScript, RP2040 |
면허증. | MIT 라이선스[2] |
웹 사이트 | micropython |
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]연산을 사용하여 다양한 수학적 연산을 수행할 수 있습니다.
유형 | 교환입니다. | 이름. | 예 |
---|---|---|---|
산술 | + | 추가 | 변수 + 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]변경될 수 있습니다.
라이브러리명 | 묘사 |
---|---|
배열 | 어레이에서의 조작 |
cmath | 복소수에 대한 산술 함수를 제공합니다. |
gc | 가비지 콜렉터 |
수학 | 는 부동소수점 숫자에 대한 기본적인 연산 기능을 제공합니다. |
시스템 | 시스템 수준 함수. 인터프리터가 사용하는 변수에 대한 액세스를 제공합니다. |
ubinascii | 바이너리와 ASCII를 변환하는 함수 |
u컬렉션 | 다양한 개체를 저장하는 컬렉션 및 컨테이너 유형에 대한 작업 |
uerno | 에러 코드에 액세스 할 수 있습니다. |
uhashlib | 이진 해시 알고리즘에 대한 연산 |
우히프 | 히프 큐알고리즘을 구현하기 위한 조작 |
우이오 | 입력/출력 스트림 처리 작업 |
ujson | JSON 문서와 Python 개체 간의 변환을 처리합니다. |
uos | 파일 시스템 액세스 및 기본 운영 체제 기능을 위한 기능 |
우레 | 정규 표현식 매칭 조작을 실장하다 |
사용하다 | 여러 스트림에서 이벤트를 처리하는 함수 |
usocket | 소켓에 연결(케이블), 소켓인터페이스에 액세스 제공 |
구조 | 기본 데이터 유형을 패킹 및 언팩하여 Python 개체로 변환합니다. |
시간 | 는 시간 간격 측정 및 지연 구현 등 시간과 날짜 기능을 제공합니다. |
uzlib | 이진 데이터를 압축 해제하는 작업 |
라이브러리명 | 묘사 |
---|---|
프레임부 | 는 디스플레이에 송신하는 비트맵이미지 작성에 사용할 수 있는 프레임버퍼를 제공합니다. |
기계. | 하드웨어 블록 접근 및 상호작용을 지원하는 기능 |
마이크로폰 | 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] 예시
시리얼 콘솔로의 인쇄 수 인쇄물(안녕, 세상아!)
예 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 크기에 따라 다를 수 있습니다.
레퍼런스
- ^ https://github.com/micropython/micropython/releases/tag/v1.19 를 참조해 주세요.
- ^ George, Damien P. (4 May 2014). "micropython/LICENSE at master · micropython/micropython". GitHub. Retrieved 11 February 2017.
- ^ Venkataramanan, Madhumita (6 December 2013). "Micro Python: more powerful than Arduino, simpler than the Raspberry Pi". Wired. Retrieved 15 December 2016.
- ^ Yegulalp, Serdar (5 July 2014). "Micro Python's tiny circuits: Python variant targets microcontrollers". InfoWorld. Retrieved 15 December 2016.
- ^ a b c d e f g h i "MicroPython - Python for microcontrollers". micropython.org. Retrieved 12 August 2017.
- ^ "MicroPython on GitHub". GitHub. 7 February 2022.
- ^ "Micro Python: Python for microcontrollers". Kickstarter. Kickstarter. Retrieved 15 December 2016.
- ^ Beningo, Jacob (11 July 2016). "Prototype to production: MicroPython under the hood". EDN Network. Retrieved 15 December 2016.
- ^ George, Damien P. "micropython/ports at master · micropython/micropython". GitHub. Retrieved 22 October 2019.
- ^ Sokolovsky, Paul. "Awesome MicroPython". GitHub. Retrieved 22 October 2019.
- ^ Williams, Alun (7 July 2015). "Hands on with the BBC Micro-Bit user interface". ElectronicsWeekly.com. Retrieved 8 July 2015.
- ^ Shawcroft, Scott (22 May 2019). "CircuitPython 4.0.1 released!". Adafruit Blog. Adafruit Industries. Retrieved 11 June 2019.
- ^ "RISC-V Poster Preview — 7th RISC-V Workshop" (PDF). 28 November 2017. Retrieved 17 December 2018.
- ^ "LEGO releases MicroPython for EV3 based on ev3dev and Pybricks". www.ev3dev.org. Retrieved 21 April 2020.
- ^ "Meet Raspberry Silicon: Raspberry Pi Pico now on sale at $4". www.raspberrypi.org. 21 January 2021. Retrieved 21 January 2021.
- ^ a b c d e f g h i j k Alsabbagh, Marwan (2019). MicroPython Cookbook. Birmingham, UK: Packt Publishing.
- ^ a b c Bruno, P. "An Introduction to MicroPython". All3DP. All3DP. Retrieved 9 May 2022.
- ^ a b c d e f g h i j k Bell, Charles (2017). MicroPython for the Internet of Things. Berkeley, USA: Apress.
- ^ 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.
- ^ a b Rembor, K. "The REPL Welcome to CircuitPython!". Adafruit Learning System. Adafruit Learning System. Retrieved 9 May 2022.
- ^ 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.
- ^ 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.
외부 링크
- 공식 웹사이트
- GitHub의 마이크로폰
- GOTO 2016 · MicroPython & Internet of Things · Damien George on YouTube
- YouTube의 MicroPython 플레이리스트 • Tony DiCola / Adafruit의 튜토리얼