이 블로그는 임베디드 컴퓨터를 이용한 장치(시스템) 개발과 원격제어에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 Microchip 사의 ATmega128를 사용한 보드와 Arduino Mega 보드(ATmega2560), Raspberry Pi Pico, Raspberry Pi, WiFi 모듈을 사용 합니다.

pico-microPython-thonny

MicroPython Basic
MicroPython의 이해와 개발 환경 - Thonny IDE


  • MicroPython 은?
    • MicroPython은 마이크로 컨트롤러에서 효율적으로 실행되도록 Python 3의 기능을 일부 제한한 간결한 프로그래밍 언어이다.

      자주 사용하지 않는 표준 라이브러리의 일부 기능을 제거하여 마이크로 컨트롤러에 최적화하였다.

      MicroPython은 인터프리터 언어이기 때문에 컴파일러 언어(c, c++ 등)에 비교하여 실행 속도는 느리지만 대화형 REPL(read-eval-print loop)을 사용하여 번거로운 컴파일 및 업로드 단계 없이 코드를 즉시 실행하고 결과를 볼 수 있기 때문에 프로그램 개발과 유지가 용이하고 프로그램 언어를 배우기 쉽다.

      참고자료: "mPython help documentation" , "MicroPython documentation"

  • MicroPython 시작하기
    • MicroPython을 사용하기 위하여는 MicroPython firmware 가 설치되어 있어야 한다. MicroPython firmware 은 MicroPython script를 실행하고 대화형 REPL(read-eval-print loop)을 사용 가능하게 한다.

    • MicroPython firmware 설치하기
      • Raspberry Pi Pico firmware 다운로드
      • 주: MicroPython Source를 본인이 Building 하고자 하는 경우에는 "Raspberry Pi Pico Python SDK"를 참고 바람.

      • BOOTSEL button을 누른 상태에서 USB Plug를 연결하여 Pi Pico 보드를 USB 저장 장치 모드로 설정한다.
      • Windows 파일 탐색기(Explorer)에서 Pi Pico 가 USB 저장 장치로 인식되었는지 확인한다. 정상적으로 USB 저장 장치로 설정된 경우 Pi Pico 개발 보드는 USB 저장 장치(RPI-RP2)로 표시 된다.
      • Firmware를 USB 저장 장치(RPI-RP2)로 복사한다.
      • 주: Raspberry Pi Pico와 Raspberry Pi Pico W는 다른 MicroPython firmware를 사용하여야 한다.

      • Firmware의 복사가 완료되면 Pi Pico의 USB 저장 장치 모드가 종료되고 자동으로 Firmware가 시작된다.
      • 처음 Firmware를 설치한 다음에는 Pi Pico 보드를 Reset(USB Plug를 분리하였다가 다시 연결)하여야 PC의 장치관리자가 Pi Pico의 USB를 Serial Port로 인식한다.

    • MicroPython 시작 프로그램
      • MicroPython(Firmware)이 설치된 보드의 전원을 켜거나 재시작(Reset) 시 MicroPython은 파일 시스템의 루트에서 boot.py 와 main.py를 순차적으로 찾아 만약 이 파일이 있으면 이 파일을 먼저 실행 한다.

      • boot.py
        • 이 파일은 전원을 켜거나 재시작(Reset) 시 가장 먼저 실행된다.
        • 일반적으로 부딩 시 보드를 초기화 할 필요가 있는 경우 사용 할 수 있다. 보드 초기화는 main.py 에서도 가능하기 때문에 일반적인 사용자는 이 파일을 수정할 필요가 없다.
        • Thonny IDE에서 "MicroPython 장치"에서 읽어오기를 실행하면 boot.py 또는 main.py를 Script 편집 창으로 Load 할 수 있다. Script 편집 창에서 필요한 내용을 수정하고 저장하기를 실행하여 boot.py 또는 main.py를 수정할 수 있다.
      • main.py
        • 이 파일이 있으면 boot.py 실행 이후에 자동으로 실행된다.
        • 일반적으로 전원을 켜거나 재시작(Reset) 할 때 실행하여야 하는 기본 스크립트를 포함 한다.
        • 전원을 켜거나 재시작(Reset) 할 때 자동으로 실행하여야 파일이 없는 경우 이 파일은 없어도 된다.
        • 개발이 완료된 프로그램을 전원을 켜거나 재시작(Reset) 시 자동으로 실행하고자 하는 경우, 개발 완료된 프로그램의 이름을 main.py로 변경하여 파일 시스템의 루트에 저장한다.
    • 터미널 프로그램을 사용하여 REPL 모드에서 Script 실행하기
      • 이 예에서는PuTTY를 사용한다. PuTTY는 Windows를 위한 다목적 터미널 프로그램으로 Telnet, SSH, raw socket 연결과 직렬 포트 연결을 지원 한다.

        참고자료: PuTTY 설치와 PuTTY을 사용한 Serial 통신

      • 터미널 프로그램 연결하기
        • PuTTY를 실행 한다. PuTTY를 실행하면 "PuTTY Configuration" 창이 열리고 "Session" 이 선택된 상태가 된다.
        • "PuTTY Configuration" 창 "Connection type"에서 "Serial"을 선택 하고, "Serial Line"에 연결하고자 하는 장치의 COM Port 번호(예: COM11)를 입력하고, "Speed"에 Serial Port의 Baud rate(115200)를 입력 한 다음 "Open" 버튼을 Click 한다.
        • PuTTY 창에서 "Enter" Key를 입력하면 PuTTY 창에 MicroPython Prompt( >>> )가 출력된다.
        • PuTTY를 Serial 통신 터미널로 사용하기 위한 설정 창 예

      • REPL 모드에서 Script 실행하기
        • PuTTY 창에 Prompt( >>> )가 출력된 상태에서 아래와 같이 Script를 입력하고 "Enter" Key를 누르면 Script가 실행되어 "Hello" 메세지가 출력된다.
        • print("Hello")


  • Thonny IDE를 개발 도구로 이용하기
    • Thonny IDE는 Raspberry Pi 보드에 기본적으로 설치하는 Raspbian OS에 기본적으로 포함되어 있는 Python 개발 Tool 이다.

      또한 Thonny IDE에는 ESP8266, ESP32, Raspberry Pi Pico 개발 보드를 위한 기능이 포함되어 있기 때문에 MicroPython를 이용한 장치 개발에 유용하다.

    • Thonny IDE 설치하기
      • Thonny IDE Download
        • "https://thonny.org/"에서 최신 버전을 Download 한다.
        • Download한 Thonny(thonny-Version번호.exe) .exe를 실행하여 Thonny IDE를 설치한다.
    • Thonny IDE 실행 하기
      • Thonny IDE를 실행 한다.
      • 주: Thonny IDE는 여러 종류의 개발 보드를 지원하기 때문에 처음 Thonny IDE를 실행하는 경우 개발 보드에 따라 적합한 인터프리터(Interpreter)를 선택하여야 한다.

        주: 처음 Thonny IDE를 실행하는 경우 "Couldn't find the device automatically." 메세지가 출력된다.

      • 인터프리터(Interpreter) 선택하기
        • Thonny IDE에서 도구 → 옵션... →를 실행하면 "Thonny 옵션 창"이 열린다
        • "Thonny 옵션 창"에서 인터프리터 메뉴를 클릭하면 인터프리터 창이 열린다.
        • 인터프리터를 선택하는 드롭 박스에서 "MicoPython(Raspberry Pi Pico)"를 선택한다.
        • 포트를 선택하는 드롭 박스에서 "포트 검출 자동으로 시도하기"를 선택한다.
        • "확인" 버튼을 클릭하면 "Thonny 옵션 창"이 닫이고 Thonny IDE의 쉘 창에 MicroPython과 보드 정보가 출력되고 쉘 Prompt 가 출력된다.

        Thonny IDE 실행 예

      • Thonny IDE 실행하면 위와 같은 Thonny IDE 창이 열린다.
      • Script 편집 창: 이 창에서 프로그램( .py)을 편집한다. 하나 이상의 파일을 열 수 있으며 각 파일은 새 Tab으로 열린다.
      • Python shell 창: 이 곳에 Python shell command를 입력하고 실행할 수 있다. 또한 실행 결과(Upload error, syntax errors 등)와 Print 문의 실행 결과가 이곳 출력된다.
    • BM_picozero Library 설치하기
      • picozero Library는 Raspberry Pi Pico에서 전자회로 부품(Switch, LED, Motor, Sensor 등)의 제어를 용이하게 하는 Library 이다.

        참고자료: "picozero Library"

      • picozero Library 설치하기
        • Thonny IDE에서 도구 → 패키지 관리... 를 실행하면 "Raspberry Pi Pico를 위한 패키지 관리" 창이 열린다
        • 검색창에 "picozer"를 입력하고 검색 버튼을 클릭한다.
        • 검색 결과에서 picozero에 "picozer"를 클릭하면 아래와 같이 picozer 버전에 대한 설명과 "설치" 버튼이 있는 창이 열린다.
        • "설치" 버튼을 클릭하면 picozero Library 가 Raspberry Pi Pico 보드(/lib/picozero/picozero.py)에 설치된다.
        • picozero Library를 사용하여 On-board LED를 1초 간격으로 점멸하는 프로그램 예
    • MicroPython 프로그래밍 편집과 실행 예
      • 1초 간격으로 개발 보드의 LED가 점멸하는 프로그램 예
      • Thonny IDE에서 "도구 → 옵션... → 인터프리터"를 선택하여 인터프리터 창을 Open 한다.
      • 인터프리터 창에서 "Thonny 실행에 사용할 장치"를 선택한다. 이 예에서는 MicroPython (Raspberry Pi Pico)를 선택한다.
      • 인터프리터 창에서 개발 보드가 사용하는 COM포트(Window를 사용하는 경우 장치괸리자에서 확인)를 선택한다. 포트를 선택하는 드롭 박스에서 "포트 검출 자동으로 시도하기"를 선택하여도 된다.
      • 인터프리터 창의 확인 버튼을 클릭한다.
      • Python shell 창에 동작 결과를 보여주는 메세지와 MicroPython prompt( >>> )가 출력되었는지 확인한다.
      • 위 프로그램을 Script 편집 창에 입력 한다. 시간 절약을 위하여 위 프로그램을 복사하여 붙여 놓기 하는 것이 편리하다.
      • Script 편집 창의 Script를 File name "blinking_led.py"로 "이 컴퓨터"에 저장한다.
      • 주: Script 편집 창의 Script는 "이 컴퓨터" 또는 "MicroPython 개발 장치"에 저장(Upload)할 수 있다.

      • "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar에 있는 "실행" Icon을 클릭하면 스크립트가 개발보드에 전송되고,
      • 스크립트가 실행되어 개발 보드의 LED가 1Sec 간격으로 점멸 한다.
      • "Stop" 버튼을 클릭하면 프로그램 실행이 중지된다.
    • 자주 사용하는 Thonny IDE 메뉴와 도구 모음
      • 개발보드 사용 환경 설정하기
        • Thonny IDE에서 "도구 → 옵션... → 인터프리터"를 선택하여 인터프리터 창을 Open 한다.
        • 인터프리터 창에서 "Thonny 실행에 사용할 장치"를 선택한다. 이 예에서는 MicroPython (Raspberry Pi Pico)를 선택한다.
        • 인터프리터 창에서 개발 보드가 사용하는 COM포트(Window를 사용하는 경우 장치괸리자에서 확인)를 선택한다. 포트를 선택하는 드롭 박스에서 "포트 검출 자동으로 시도하기"를 선택하여도 된다.
        • 인터프리터 창의 확인 버튼을 클릭한다.
        • Python shell 창에서 동작 결과를 보여주는 메세지와 MicroPython prompt( >>> )의 출력을 확인한다.
      • 프로그램 작성 하기
        • Script 편집 창에서 직접 Script를 편집(작성)하기
        • Script 편집 창에서 일반 Text editor의 기능을 실행할 수 있기 때문에 직접 Script를 작성하고 편집할 수 있다.

        • 이미 작성된 Script를 편집 창에 Load하여 편집하기
          • 파일 메뉴(열기 or 저장)를 실행할 때 열리는 "장치 선택 창" 예

          • 이 컴퓨터에서 Load 하기
            • "파일 -> 열기"를 실행하면 파일이 있는 장치(PC or MicroPython 장치)를 선택할 수 있는 장치 선택 창이 열린다.
            • 장치 선택 창에서 편집할 프로그램이 위치한 장치(이 컴퓨터)를 선택하면 파일 탐색창이 열린다.
            • 탐색기 창에서 파일을 선택하고 "열기" 버튼을 클릭하면 파일이 Load 된다.
            • Load 한 파일을 편집기의 편집 기능을 사용하여 편집한다.
          • MicroPython 장치에서 Load 하기
            • "파일 -> 열기"를 실행하면 파일이 있는 장치(PC or MicroPython 장치)를 선택할 수 있는 장치 선택 창이 열린다.
            • 장치 선택 창에서 편집할 프로그램이 위치한 장치(MicroPython 장치)를 선택하면 파일 탐색창이 열린다.
            • 탐색기 창에서 파일을 선택하고 "확인" 버튼을 클릭하면 파일이 Load 된다.
            • 주: MicroPython 장치에서 Load한 파일은 편집창에 표시되는 파일 이름이 Square brackets(예: [File name.py]) 내에 표시된다.

            • Load 한 파일을 편집기의 편집 기능을 사용하여 편집한다.
        • 작성된 Script를 저장(또는 Upload)하기
          • "파일" 메뉴를 클릭하면 아래와 같은 기능을 실행할 수 있다.

          • 저장: 현재 선택된 편집 창의 파일을 이 파일이 저장된 위치(PC or MicroPython 장치)에 저장한다. 현재 선택된 편집 창의 내용이 변경된 경우에만 실행할 수 있다.
          • 주: "MicroPython 장치"의 파일(Square brackets(예: [File name.py]) 내에 파일 이름이 표시 됨)을 편집하여 저장하는 것은 Upload 동작에 해당된다.

          • 모든 파일 저장하기: 편집 창의 모든 파일을 저장한다.
          • ...(으)로 저장: 현재 선택된 편집 창의 파일을 "이 컴퓨터" 또는 "MicroPython 장치"에 저장(다른 이름으로)한다.
          • 주: "이 컴퓨터의 파일"을 "MicroPython 장치"에 다른 이름으로 저장하는 것은 Upload 동작에 해당된다.

          • 복사본 저장: 현재 선택된 편집 창의 파일의 복사본을 "이 컴퓨터" 또는 "MicroPython 장치"에 저장(동일한 이름 또는 다른 이름으로)한다.
          • 주: "이 컴퓨터의 파일"을 "MicroPython 장치"에 파일을 저장하는 것은 Upload 동작에 해당된다.

          • Move / rename: "이 컴퓨터"에 저장된 파일을 Rename 한다.
        • 파일 삭제하기
          • 아래 "파일" 메뉴를 사용하여 파일을 삭제할 수 있다.

          • 파일 삭제는 "...(으)로 저장", "복사본 저장", "열기" 명령을 실행하면 열리는 탐색기 창에서 실행할 수 있다.
          • 위 명령중 하나를 실행하고 "이 컴퓨터" 또는 "MicroPython 장치"를 선택하면 탐색기 창이 열린다.
          • "MicroPython 장치"를 선택한 경우에는 "Thonny에서 열기", "삭제", "새로운 디렉토리...", "속성들" 메뉴 창이 열리고,

            "이 컴퓨터"를 선택한 경우에는 원도우 탐색기 창이 열린다.

          • 탐색기 창에서 마우스의 좌측 버튼으로 파일을 선택하고 마우스의 우측 버튼을 클릭하면 탐색기 메뉴를 실행할 수 있다.
          • "MicroPython 장치"를 선택한 경우 탐색기 메뉴 창에서 "삭제"를 실행(확인 메세지 창에서 "예"를 클릭)하고 탐색기 창에서 "취소" 버튼을 클릭한다. 만약 확인 버튼을 클릭하면 선택한 동작이 다시 실행되어 삭제한 파일이 다시 저장될 수도 있다.
      • 프로그램 실행 하기
        • 현재 선택된 편집 창의 파일을 직접 실행하기
          • "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭 한다.
          • 현재 선택된 편집 창의 파일이 "이 컴퓨터"에 있는 파일인 경우에는 REPL(read-eval-print loop)로 실행되고,
          • 현재 선택된 편집 창의 파일이 "MicroPython 장치"에 있는 파일인 경우에는 "MicroPython 장치"에 저장(Upload)된 파일이 실행된다.
        • MicroPython 장치에 Upload 하여 실행하기
          • 현재 선택된 편집 창의 파일을 "MicroPython 장치"에 저장(Upload)한다.
          • 주: "MicroPython 장치"에 저장(Upload)한 파일은 편집창에 표시되는 파일 이름이 Square brackets(예: [File name.py]) 내에 표시된다.

          • "실행 -> 현재 스크립트 실행"을 실행하거나 Toolbar의 "실행" Icon을 클릭 한다.
          • 전원이 인가될 때 자동으로 실행하고자 하는 경우에는 파일 이름을 main.py로 변경하여 저장한다.
        • 실행 중인 프로그램 정지하기
          • Toolbar의 "Stop" Icon을 클릭하거나 키보드에서 Ctrl + c 를 입력한다.
    • 자주 사용하는 유용한 도구 프로그램 예
      • Soft reset 실행하기
        • "새 편집 창" 열기를 실행하고 아래와 같은 스크립트을 입력한 다음 파일 이름 "soft-reset.py"로 저장한다.
        • import machine

          machine.soft_reset()

        • Toolbar의 실행 Icon을 클릭하면 Soft reset이 실행된다.
      • 개발보드의 Disk와 메모리(RAM) 상태(사용할 수 있는 용량)를 출력하는 프로그램
        • "새 편집 창" 열기를 실행하고 아래 프로그램을 복사하여 파일 이름 "free-disk-memory.py"로 저장한다.
        • Toolbar의 실행 Icon을 클릭하면 프로그램이 실행되고 Disk(Flash memory)와 메모리(RAM)의 상태가 출력된다.

  • 프로그램 개발 시 main.py에 무한 loop 가 포함된 경우
    • main.py에 무한 loop 가 포함된 경우 보드의 전원을 켜거나 재시작(Reset)을 실행하면 main.py 가 자동으로 실행되고, 무한 loop 가 실행되기 때문에 "Ctrl-C" 기능이 없는 개발 도구에서는 보드에 접근할 수 없게 된다. 이 문제를 피하기 위하여 일반적으로 Button Switch를 이용하여 스크립트를 실행을 종료할 수 있다.

      주: Thonny IDE에서는 Toolbar의 "Stop" Icon을 클릭하거나 키보드에서 "Ctrl-C"버튼을 사용하여 무한 loop 가 포함된 프로그램을 정지할 수 있다.

    • 개발 시 무한 loop 가 포함된 main.py 문제 해결 예
      • 이 프로그램은 LED(GPIO25)가 1초 간격으로 무한히 점멸하는 프로그램이다. 이 프로그램은 Button SW(GPIO22)를 이용하여 무한 loop를 종료 시키는 예 이다.

      • 실험을 위한 준비
        • GPIO22에 Button SW를 연결한다.
      • 실험 방법
        • Thonny IDE의 편집 창에 위Code를 복사하여 blinking_led_sw.py로 저장한다. blinking_led_sw.py를 "...(으)로 저장" 하기를 이용하여 main.py 이름으로 "MicroPython 장치"에 저장한다. 이 파일을 실행(Reset SW를 사용)한다.
        • 이 코드(main.py)가 보드에 다운로드되면 main.py 이기 때문에 전원을 켜거나 재시작(Reset)을 실행하면 자동으로 시작된다. 이 프로그램 내의 무한 루프는 메세지 등을 출력하지 않기 때문에 프로그램의 종료 여부는 터미널 프로그램 창(또는 Thonny IDE의 Shell 창)에 Prompt( >>> ) 가 표시되는 것으로 확인할 수 있다.
        • 개발보드의 GPIO22 Button SW를 0.5초(utime.sleep 시간이 0.5초 임) 이상 누르면 프로그램이 종료 된다.
        • 프로그램이 종료되면 Python Prompt(>>>) 가 표시되고, 다시 명령창에서 REPL(read-eval-print loop) 명령을 실행할 수 있다.
        • 개발보드의 Reset SW를 누르면 프로그램이 다시 시작(main.py 이기 때문에 자동으로 시작됨)되어 LED 가 점멸한다.
        • 주의: 터미널 프로그램에서 개발보드에 접속하는 경우 Thonny IDE와 사용하는 COM Port 가 같기 때문에 두 프로그램을 동시에 사용할 수 없다.


  • MicroPython의 이해와 개발 환경 관련 페이지 보기