이 블로그는 Web 환경을 이용한 원격 제어 기술에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 WiFi Module과 Raspberry Pi, Raspberry Pi Pico, ATmega128 보드, Arduino Mega 보드(ATmega2560)를 사용 합니다.

microPython-basic

MicroPython Basic
MicroPython의 이해와 개발 환경 - ESPlorer-MT-Build


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

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

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

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

      MicroPython을 사용하기 위하여는 개발보드에 Firmware가 설치되어 있어야 한다. Firmware는 MicroPython을 사용하기 전에 한번만 설치하면 된다.

      참고자료: "Firmware flashing tool과 Firmware 설치"

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

    • boot.py와 main.py
      • boot.py
        • 이 파일은 전원을 켜거나 재시작(Reset) 시 가장 먼저 실행된다.
        • 일반적으로 부딩 시 보드를 초기화 할 필요가 있는 경우 사용 할 수 있다. 보드 초기화는 main.py 에서도 가능하기 때문에 일반적인 사용자는 이 파일을 수정할 필요가 없다.
        • ampy get 명령("참고: ampy(Adafruit MicroPython tool)를 이용한 File 관리와 프로그램 실행")을 사용하여 이 파일을 PC로 읽어 내용을 확인하고 필요한 경우 수정할 수 있다.
        • ESPlorer-MT-Build(아래 ESPlorer-MT-Build를 개발 도구로 이용하기 참고)를 사용하는 경우, 메세지 창에 Prompt( >>> )가 출력된 상태에서 우측의 "Reload"를 실행하면 ESP에 있는 파일 이름이 출력된다. 여기에 boot.py 파일이 있는 경우 "boot.py" 버튼을 클릭하면 boot.py의 내용이 Console 창에 출력된다. Console 창에서 boot.py의 내용을 Script 창으로 복사하여 편집한 다음 "Save to ESP" 버튼을 사용하여 ESP에 저장한다.
      • main.py
        • 이 파일이 있으면 boot.py 실행 이후에 자동으로 실행된다.
        • 일반적으로 전원을 켜거나 재시작(Reset) 할 때 실행하여야 하는 모든 기본 스크립트를 포함 한다.
        • 전원을 켜거나 재시작(Reset) 할 때 자동으로 실행하여야 파일이 없는 경우 이 파일은 없어도 된다.
        • 개발이 완료된 프로그램을 전원을 켜거나 재시작(Reset) 시 자동으로 실행하고자 하는 경우, 개발 완료된 프로그램의 이름을 main.py로 변경하여 파일 시스템의 루트에 저장한다.
    • 프로그램 개발 시 main.py에 무한 loop 가 포함된 경우
      • main.py에 무한 loop 가 포함된 경우 보드의 전원을 켜거나 재시작(Reset)을 실행하면 main.py 가 자동으로 실행되고, 무한 loop 가 실행되기 때문에 "Ctrl-C" 기능이 없는 개발 도구에서는 보드에 접근할 수 없게 된다. 개발 단계에서 이 문제를 피하기 위하여 일반적으로 개발보드에 내장되어 있는 GPIO0 Button Switch를 이용하여 스크립트를 실행을 종료할 수 있다.

        주: ESPlorer-MT-Build Tool에서는 이문제를 해결하기 위하여 원래 ESPlorer Tool에 없는 "Ctrl-C"버튼을 우측 상단에 추가하여 ESP에서 실행 중인 프로그램을 강제로 종료하고 Prompt( >>> )를 출력할 수 있게 개선 하였기 때문에 이 절을 생략하여도 좋다.

      • button.py
      • 이 프로그램은 GPIO0 Button SW를 이용하여 무한 loop를 종료 시키는 예이다.

          
          from machine import Pin
          from sys import exit
          from time import sleep_ms
          
          # NodeMCU 보드는 GPIO0을 SW input pin으로 사용한다.
          button = Pin(0, Pin.IN, Pin.PULL_UP)
          
          # 무한 Loop를 실행하며 SW 버튼의 상태를 테스트 한다.
          while True:
            # 만약 button(GPIO0)가 눌린 상태이면 "Dropping to REPL" 메세지를 출력하고
            # 프로그램을 종료한다.
            if button.value() == 0:
                print("Dropping to REPL")
                exit()
          
            # 1mSec 동안 Sleep 상태 
            sleep_ms(1)
               
        • 실험 방법
          • 위와 같은 Code를 작성하여 button.py로 저장한다. button.py를 복사하여 main.py를 만들고 이 파일을 보드로 다운로드하여 실행(Reset SW를 사용)한다.
          • cp button.py main.py

            ampy --port /serial/port put main.py

          • 이 코드(main.py)가 보드에 다운로드되면 main.py 이기 때문에 전원을 켜거나 재시작(Reset)을 실행하면 자동으로 시작된다. 이 프로그램 내의 무한 루프는 메세지 등을 출력하지 않기 때문에 프로그램의 종료 여부는 도스 명령창에 Prompt( >>> ) 가 표시되는 것으로 확인할 수 있다.
          • 터미널 프로그램을 실행하고 GPIO0 Button SW를 1초(utime.sleep 시간이 1초 임) 이상 누르면 "Dropping to REPL" 메세지가 출력되고 프로그램이 종료된다.
          • 프로그램이 종료되면 Python Prompt(>>>) 가 표시되고, 다시 도스 명령창에서 ampy 명령(도스 명령창을 사용하기 위하여는 터미널 프로그램을 종료하여야 함) 등을 실행할 수 있다.
          • 개발보드의 Reset SW를 누르면 프로그램이 다시 시작(main.py 이기 때문에 자동으로 시작됨)되어 button.py 프로그램의 무한 루프가 실행된다.
          • 주의: 도스 명령창에서 ampy 명령을 실행하는 COM Port와 터미널 프로그램에서 사용하는 COM Port 가 같기 때문에 두 프로그램을 동시에 사용할 수 없다. 도스 명령창은 ampy 명령을 실행 중인 동안만 COM Port를 사용한다.

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

          
          from machine import Pin
          from sys import exit
          from time import sleep_ms
          
          # NodeMCU 보드는 GPIO0을 SW input pin으로 사용한다.
          button = Pin(0, Pin.IN, Pin.PULL_UP)
          # NodeMCU 보드는 GPIO2를 LED Pin으로 사용한다.
          led = Pin(2, Pin.OUT)
          
          # LED를 점멸하는 무한 Loop
          while True:
            # 만약 button(GPIO0)가 눌린 상태이면 "Dropping to REPL" 메세지를 출력하고
            # 프로그램을 종료한다.
            if button.value() == 0:
                print("Dropping to REPL")
                exit()
            # NodeMCU ESP8266 보드는 LED Pin이 High일 때 Off 되고 Low일 때 On 됨.
            # NodeMCU ESP32 보드는 LED Pin이 High일 때 On 되고 Low일 때 Off 됨.
            # 기타 보드는 다른 GPIO Pin을 LED Pin으로 사용할 수 있으니 확인이 필요하다.
            led.value(1)   # LED(pin2)-> High. ESP8266 -> Off, ESP32 -> On
            sleep_ms(500)  # Sleep for 500 milliseconds
            led.value(0)   # LED(pin2)-> Low. ESP8266 -> On, ESP32 -> Off
            sleep_ms(500)  # Sleep for 500 milliseconds
                 
        • 실험 방법
          • 위와 같은 Code를 작성하여 blinking_led_sw.py로 저장한다. blinking_led_sw.py를 복사하여 main.py를 만들고 이 파일을 보드로 다운로드하여 실행한다.

            cp blinking_led_sw.py main.py

            ampy --port put main.py

            보드가 현재 Python Prompt(>>>) 상태가 아닌 경우 위 명령이 실행되지 않을 수 있다. 이 경우 도스 명령 창에서 "Ctl-C" 를 누르고 다시 명령을 실행한다.

          • 이 코드(main.py)가 보드에 다운로드되면 LED 가 1초 간격으로 무한히 점멸(main.py 이기 때문에 자동으로 시작됨)한다.
          • 개발보드의 GPIO0 Button SW를 0.5초(utime.sleep 시간이 0.5초 임) 이상 누르면 프로그램이 종료 된다.
          • 개발보드의 Reset SW를 누르면 프로그램이 다시 시작(main.py 이기 때문에 자동으로 시작됨)되어 LED 가 점멸한다.

  • ESPlorer-MT-Build를 개발 도구로 이용하기
    • ESPlore IDE 개발 환경은 Lua 프로그램 언어와 MicroPython를 위한 개발 환경이다. 그러나 Lua에 중점을 두고 개발되었기 때문에 MicroPython 개발 Tool로 사용하기에는 부족(기능이 부족하고 일부 명령이 정상 동작하지 않음)하다. 때문에 여기서는 Jos Verlinde이 MicroPython에 적합하도록 개선한 ESPlorer - MT Fork(ESPlorer-MT-Build)을 사용 한다.

    • ESPlorer-MT-Build 설치하기
      • ESPlorer-MT-Build Download
        • "https://github.com/Josverl/ESPlorer/tree/MT-Build"에서 최신 버전을 Download 한다.
        • ESPlorer-MT-Build.zip의 압축을 풀면 ESPlorer-MT-Build 폴더가 만들어 진다.
        • ESPlorer-MT-Build 폴더에는 전체 Code가 포함(ESPlorer-MT-Build 실행에 필요한 파일과 기타 Source code 등)되어 있기 때문에 여기서 필요한 실행 폴더와 파일을 압축한 ESPlorer 25.05.2018.zip 파일을 외부로 복사하고 압축을 해제한다. 압축을 해제한 폴더(ESPlorer 25.05.2018) 내에 있는 "dist" 폴더에 실행에 필요한 폴더와 파일이 모두 포함되어 있기 때문에 이 폴더를 외부로 복사하고 "ESPlorer-MT"로 이름을 변경한다.
        • ESPlorer-MT 폴더 내에 있는 "ESPlorer.bat" 파일이 ESPlorer-MT-Build의 실행 파일(이 파일을 더블 클릭하면 프로그램이 실행됨) 이다.
        • 주: 전체 Code가 필요 없는 경우에는 본인이 실행에 필요한 폴더와 파일만 압축한 "ESPlorer-MT.zip을 다운로드하여 압축을 풀면 바로 실행할 수 있다."

      • ESPlorer.bat을 더블 클릭하여 프로그램을 실행(Java 가 설치되어 있어야 함) 한다.
    • ESPlorer-MT 실행 하기
    • ESPlorer-MT 실행 예

      • ESPlorer-MT폴더 있는 ESPlorer.bat을 더블 클릭하여 프로그램을 실행 한다.
      • ESPlorer 창의 좌측 상단에 있는 "Settings" tab을 클릭하여 Settings 창을 열고 "Select firmware"에 MicroPython 이 선택되어 있는지 확인한다.
      • 주의: nodeMCU는 Lua firmware가 설치된 경우이기 때문에 선택하면 안된다.

      • 개발 보드가 사용하는 COM포트를 선택(Window를 사용하는 경우 장치괸리자에서 확인) 한다.
      • Baudrate를 선택(115200) 한다.
      • Serial Port "Open" 버튼을 클릭 한다.
      • 메세지 창(Console 창: Output window)에 메세지가 출력되고, MicroPython prompt( >>> )가 출력 된다.
      • MicroPython prompt( >>> )가 출력되지 않은 경우에는 ESPlorer 창의 우측 상단에 있는 "Ctl-C" 버튼을 클릭 한다. "Ctl-C" 버튼을 클릭한 다름에도 Prompt( >>> )가 출력되지 않는 경우에는 개발보드의 리셋버튼을 누르면 메세지 창에 메세지가 출력되고, Prompt( >>> )가 출력 된다.
    • MicroPython 프로그래밍 예
      • 다음과 같은 프로그램을 ESPlorer의 왼쪽 창(Script 편집 창)에 입력 한다.
      • 
        from machine import Pin
        from time import sleep_ms
        
        # NodeMCU 보드는 GPIO2를 LED Pin으로 사용한다.
        led = Pin(2, Pin.OUT)
        
        # LED를 점멸하는 무한 Loop
        while True:
          # NodeMCU ESP8266 보드는 LED Pin이 High일 때 Off 되고 Low일 때 On 됨.
          # NodeMCU ESP32 보드는 LED Pin이 High일 때 On 되고 Low일 때 Off 됨.
          # 기타 보드는 다른 GPIO Pin을 LED Pin으로 사용할 수 있으니 확인이 필요하다.
          led.value(1)   # LED(pin2)-> High. ESP8266 -> Off, ESP32 -> On
          sleep_ms(500)  # Sleep for 500 milliseconds
          led.value(0)   # LED(pin2)-> Low. ESP8266 -> On, ESP32 -> Off
          sleep_ms(500)  # Sleep for 500 milliseconds
              
      • File name "blinking_led.py"로 저장 한다.
      • 메세지 창에 Prompt( >>> )가 출력된 상태에서 "Send to ESP" 버튼을 클릭하면 스크립트가 개발보드에 전송되고,
      • 스크립트가 실행되어 개발 보드의 LED가 1Sec 간격으로 점멸 한다.
      • ESPlorer 창의 좌측 상단에 있는 "Ctrl-C" 버튼을 클릭하면 프로그램 실행이 중지되고 메세지 창에 Prompt( >>> )가 출력된다.
    • 자주 사용하는 ESPlorer-MT 버튼
      • ESPlorer-MT 우측 위에 있는 버튼 "Ctrl-C" 버튼
        • 현재 실행중인 프로그램을 정지 시키고 메세지 창에 Prompt( >>> )를 출력한다.
        • 주: 프로그램만 정지 시키고 프로그램이 사용하던 메모리 등의 상태는 그대로 유지하기 때문에 REPL(read-eval-print-loop) 모드에서 큰 프로그램을 실행 시키는 경우, 반복하여 REPL 모드로 큰 프로그램을 실행하면 메모리(RAM) 부족 등 문제가 발생할 수 있다.

      • 개발보드 초기화(Restart) 하기
        • 개발 Board의 "Reset" 버튼을 누르면 Hard reset(Restart) 이 실행되어 MicroPython firmware가 다시 실행되고 메세지 창에 Prompt( >>> )가 출력 된다. 이 경우 메모리 등의 상태도 초기화 된다.
        • 메세지 창에 Prompt( >>> )가 출력된 상태에서 아래와 같은 프로그램을 실행하면 Hard reset과 같은 결과를 얻을 수 있다.
        • import machine

          machine.reset()

          주: REPL(read-eval-print-loop) 모드에서 큰 프로그램을 실행 시키는 경우 "Ctrl-C" 버튼으로 프로그램을 정지 시키고 위 명령을 실행하면 개발보드가 초기화되기 때문에 REPL 모드에서 큰 프로그램을 반복하여 실행하면 발생하는 메모리(RAM) 부족 등의 문제를 피할 수 있다. 아레 "Snippet 버튼(단축 버튼) 사용하기"의 Restart 버튼 만들기를 참고 요.

      • ESPlorer-MT 좌측에 있는 버튼
        • "Save to ESP" 버튼: 현재 Opened file을 ESP에 전송하여 Flash memory에 저장한다. ESP의 Flash memory에 현재 Opened file 이름의 파일이 생성된다.
        • 주: 이 버튼은 개발 보드에 따라 Flash memory에 Write 하는 방법이 다르기 때문에 프로그램이 큰 경우 "Save to ESP" 버튼을 사용한 file 전송 시 Error 가 발생할 수 있다. 이 경우 "ampy Tool"을 사용하여 개발 보드로 file을 전송한다.

        • "Send to ESP" 버튼: Scripts 창에 있는 스크립트를 한 줄씩 ESP에 전송(MicroPython은 Interpreter 언어 이기 때문에 전송된 스크립트는 개발보드의 Flash memory에 저장되지 않고 한 줄씩 바로 실행됨)하여 실행한다. 개발 단계에서 이 버튼을 사용하면 간편하개 Scripts 창에 있는 스크립트를 실행하며 프로그램을 개선할 수 있다. 스크립트를 개발보드에 저장(Flash Memory)하여 실행하기 위하여는 "Save to ESP" 버튼을 사용하여 개발 보드로 file을 전송 하여야 한다.
        • 주: "Send to ESP" 버튼은 현재 Opened file을 REPL 모드로 개발보드에 전송하여 실행한다. REPL(read-eval-print-loop) 모드에서 큰 프로그램을 실행 시키는 경우 "Ctrl-C" 버튼으로 프로그램을 정지 시키고 아래 "Snippet 버튼(단축 버튼) 사용하기"의 "Restart 단축 버튼 만들기 예"에서 만든 Restart 버튼 명령을 실행하면 REPL 모드에서 큰 프로그램을 반복적으로 실행하는 경우 발생하는 메모리(RAM) 부족 등 문제를 피할 수 있다. 아레 "Snippet 버튼(단축 버튼) 사용하기"의 Restart 버튼 만들기를 참고요.

        • "Run" 버튼: "Save to ESP" 버튼으로 ESP에 전송한 파일을 실행한다.
        • 주: ESPlorer-MT 우측에 있는 "Reload" 버튼을 사용하여 개발보드의 파일을 확인하고, 실행하고자 하는 파일에서 마우스 우측 버튼을 사용하여 "Run" 명령을 선택하여 파일(ESP의 Flash memory에 저장된 프로그램)을 실행할 수도 있다.

        • "Upload..." 버튼: PC의 Disk에 있는 파일을 ESP에 직접 Upload 한다. ESPlorer 창의 우측 옆에 있는 폴더 모양의 버튼을 클릭하면 버튼 아래에 현재 ESP 폴더에 저장된 파일명이 출력되어 파일의 Upload 상태를 확인할 수 있다.
        • 주: 개발 보드에 따라 Flash memory에 Write 하는 방법이 다르기 때문에 프로그램이 큰 경우 "Save to ESP" 버튼을 사용하는 경우와 동일한 Error 가 발생할 수 있다. 이런 경우 "ampy Tool"을 사용하여 개발 보드로 file을 전송한다.

    • 스크립트 보내기(Send) 창(ESPlorer 창의 우측 아래에 있음) 사용하기
      • MicroPython 스크립트를 개발보드로 전송하여 실행하기 위한 목적으로 사용된다.

      • 이 창과 "Send" 버튼은 MicroPython prompt( >>> ) 상태에서만 사용 가능한 상태(Active state)로 된다.
      • 이 창에 유효한 MicroPython 스크립트를 입력하고 "Send" 버튼을 누르면 스크립트가 개발보드로 전송되어 실행된다.
      • 사용 예
        • 스크립트 보내기(Send) 창에 "print('Hello, MicroPython!')"을 입력하고 "Send" 버튼을 누르면 스크립트가 전송되어 실행되고 메세지(Consol) 창에 "Hello, MicroPython!" 이 출력된다.
    • Snippet 버튼(단축 버튼) 사용하기
      • 자주 사용하는 스크립트를 단축 버튼으로 설정하여 두면 단축 버튼을 누르는 것 만으로 스크립트를 실행할 수 있다.

      • 단축 버튼 설정과 실행 예
      • Snippts 버튼 설정 창 예

        • 좌측 Script 편집 창 위에 있는 "Snippts" 버튼을 누르면 Snippts 버튼 설정 창이 열린다.
        • Snippts 버튼 설정 창에서 설정을 윈하는 버튼을 누르면 해당 버튼 설정을 위한 창이 활성화 된다.
        • Snippts 버튼 이름을 입력하는 창에 버튼 이름을 입력하고,
        • Snippts 버튼 편집 창에 스크립트을 입력한 다음 "Save" 버튼을 누른다.
        • "Save" 버튼 우측에 있는 "Run" 버튼을 클릭하면 편집 창에 스크립트가 바로 실행된다.
        • "Cancel" 버튼을 클릭하면 현재 편집 중인 버튼의 편집이 중지된다.
        • Snippts 버튼 설정 예
          • 첫번째 Snippts 버튼을 클릭하고 이름을 입력하는 창에 "GPIO2 On"을 입력한다.
          • Snippts 버튼 설정 창에 아래와 같은 스크립트을 입력한 다음 "Save" 버튼을 누른다.
          • import machine

            led = machine.Pin(2, machine.Pin.OUT)

            led.value(1)

          • 이제 메세지(Console) 창 아래에 있는 첫번째 Snippts 버튼 이름이 "GPIO2 On"으로 변경되어 표시된다. 이 Snippts 버튼을 누르면 위에서 설정한 스크립트가 개발보드에 전송되어 실행된다.
          • 실행 결과, 개발보드 GPIO2에 연결된 LED 가 On 상태로 되고 또한 스크립트 실행 과정이 Console 창에 출력된다.
      • Restart 단축 버튼 만들기 예
        • 좌측 Script 편집 창 위에 있는 "Snippts" 버튼을 누르면 Snippts 버튼 설정 창이 열린다.
        • Snippts 버튼 설정 창에서 설정을 윈하는 버튼(예 15번)을 누르면 해당 버튼 설정을 위한 창이 활성화 된다.
        • Snippts 버튼 이름을 입력하는 창에 버튼 이름(Restart))을 입력하고, 아래와 같은 스크립트을 입력한 다음 "Save" 버튼을 누른다.,
        • import machine

          machine.reset()

        • 이제 메세지(Console) 창 아래에 있는 Snippts 버튼(예 15번) 이름이 "Restart"으로 변경되어 표시된다. 메세지 창에 Prompt( >>> )가 출력된 상태에서 이 "Restart" 버튼을 누르면 위에서 설정한 스크립트가 개발보드에 전송되어 실행된다.
        • 실행 결과: 메세지 창에 Prompt( >>> )가 출력된 상태에서 "Restart" 단축 버튼을 누르면 Hard reset과 같은 결과를 얻을 수 있다.
      • Soft reset 단축 버튼 만들기 예
      • Soft reset은 Python interpreter를 Reset 하지만 MicroPython 보드(USB 직렬 또는 Wi-Fi)에 연결하는 방법을 재설정하지 않한다.

        그러므로, MicroPython 보드(USB 직렬 또는 Wi-Fi)에 연결 상태를 유지하며 현재 실행중인 프로그램을 초기화 할 수 있기 때문에 프로그램의 초기화와 시작을 반복하여야 하는 경우(예: 프로그램 개발 시) 유용하게 사용할 수 있다.

        • 좌측 Script 편집 창 위에 있는 "Snippts" 버튼을 누르면 Snippts 버튼 설정 창이 열린다.
        • Snippts 버튼 설정 창에서 설정을 윈하는 버튼(예 14번)을 누르면 해당 버튼 설정을 위한 창이 활성화 된다.
        • Snippts 버튼 이름을 입력하는 창에 버튼 이름(Soft reset))을 입력하고, 아래와 같은 스크립트을 입력한 다음 "Save" 버튼을 누른다.,
        • import machine

          machine.soft_reset()

        • 이제 메세지(Console) 창 아래에 있는 Snippts 버튼(예 14번) 이름이 "Soft reset"으로 변경되어 표시된다. 메세지 창에 Prompt( >>> )가 출력된 상태에서 이 "Soft reset" 버튼을 누르면 위에서 설정한 스크립트가 개발보드에 전송되어 실행된다.
        • 실행 결과: 메세지 창에 Prompt( >>> )가 출력된 상태에서 "Soft reset" 단축 버튼을 누르면 MicroPython 보드에 연결 상태를 유지하며 현재 실행중인 프로그램이 초기화 된다.
      • 개발보드의 Disk와 메모리(RAM) 상태(사용할 수 있는 용량)를 출력하는 단축 버튼 만들기 예
        • 좌측 Script 편집 창 위에 있는 "Snippts" 버튼을 누르면 Snippts 버튼 설정 창이 열린다.
        • Snippts 버튼 설정 창에서 설정을 윈하는 버튼(예 13번)을 누르면 해당 버튼 설정을 위한 창이 활성화 된다.
        • Snippts 버튼 이름을 입력하는 창에 버튼 이름(Free disk,memory)을 입력하고, 아래와 같은 스크립트을 입력한 다음 "Save" 버튼을 누른다.,
        • 
          # df() (disk-free) shows free file space.
          import gc
          import os
          
          def df():
            s = os.statvfs('//')
            return ('{0} MB'.format((s[0]*s[3])/1048576))
          
          # free() shows available ram.
          def free(full=False):
            F = gc.mem_free()
            A = gc.mem_alloc()
            T = F+A
            P = '{0:.2f}%'.format(F/T*100)
            if not full: return P
            else : return ('Total:{0} Free:{1} ({2})'.format(T,F,P))
          
          print("Disk free space: ", df())
          print("Memory free space: ", free())
                  
        • 이제 메세지(Console) 창 아래에 있는 Snippts 버튼(예 13번) 이름이 "Free disk,memory"으로 변경되어 표시된다. 이 Snippts 버튼을 누르면 위에서 설정한 스크립트가 개발보드에 전송되어 실행된다.
        • 실행 결과: 메세지 창에 Prompt( >>> )가 출력된 상태에서 "Free disk,memory" 단축 버튼을 누르면 Disk(Flash memory)와 메모리(RAM)의 상태가 출력된다.
        • 주: 큰 프로그램을 "Send to ESP" 버튼으로 반복하여 실행하여야 하는 경우, 이 버튼을 사용하여 Memory(RAM)의 사용 상태를 확인하고 위에서 설명한 "Restart" 버튼을 사용하여 개발보드를 초기화하면 Memory(RAM) 용량 부족으로 인한 Error를 예방할 수 있다.

    • ESP 보드의 폴더와 파일 관리하기
      • 아래 버튼은 Console 창에 MicroPython prompt( >>> ) 가 표시된 상태에서 사용 가능하다.

      • "FS Info" 버튼
        • File system 정보와 ESP 메모리의 상태(사용 중과 사용할 수 있는 메모리)를 보여 주는 버튼으로 설명되어 있으나 누르면 Error 가 발생한다.
        • 주: "FS Info" 버튼은 누르면 Error 가 발생(사용하는 Firmware 버전 또는 종류 문제인 것 같음)하기 때문에 본인은 사용하지 않는다.

      • "Reload" 버튼
        • 이 버튼을 클릭하면 개발보드의 현재 선택된 디렉토리 내의 파일과 디렉토리 리스트가 버튼으로 출력된다.
      • "폴더 모양.." 버튼(폴더 그림 옆에 점이 2개 있는 버튼)
        • 이 버튼에서 마우스 좌측을 클릭하면 상위 폴더로 이동한다. 현재 root(최상위) 폴더에 위치한 경우에는 현재 폴더의 파일과 디렉토리 리스트가 버튼으로 출력된다.
        • 이 버튼에서 마우스 우측을 클릭하면 "chdir dir" 버튼이 팝업되고 "chdir dir" 버튼을 클릭하면 이 폴더의 상위 이동한다. 현재 root(최상위) 폴더에 위치한 경우에는 현재 폴더의 파일과 디렉토리 리스트가 버튼으로 출력된다.
      • "폴더 모양" 버튼(폴더 그림이 있는 버튼)
        • 이 버튼에서 마우스 좌측을 클릭하면 이 폴더 내로 이동한다. 이 폴더의 파일과 디렉토리 리스트가 버튼으로 출력된다.
        • 이 버튼에서 마우스 우측을 클릭하면 "chdir dir" 버튼이 팝업되고 "chdir dir" 버튼을 클릭하면 이 폴더의 상위 이동한다.
      • "File name" 버튼
        • 파일 이름이 표시되는 버튼으로 이 버튼에서 마우스 좌측을 클릭하면 이 파일을 읽어 메세지 창에 출력한다.
        • 이 버튼에서 마우스 우측을 클릭하면 팝업 창에 아래와 같은 명령 메뉴가 출력된다.
          • Run file name: 이 명령을 클릭하면 ESP에 저장된 해당 프로그램이 실행된다.
          • View file name: 이 파일을 읽어 메세지 창에 출력한다.
          • Hexdump file name: 이 파일을 읽어 Hex format으로 Dump하는 명령이다. 본인의 시스템에서는 Error 가 발생(사용하는 Firmware 버전 또는 종류 문제인 것 같음)하여 사용하지 못함.
          • Rename file name: 이 파일의 이름을 변경하는 창이 열려 이름을 변경할 수 있다.
          • Remove file fame: 이 파일을 삭제한다.
      • "mkdir" 버튼 만들기
        • ESPlorer-MT 개발 Tool에는 mkdir(디렉토리 만들기)와 rmdir(디렉토리 삭제) 기능이 없기 때문에 Snippet 버튼(단축 버튼) 을 이용하여 "mkdir" 버튼과 "rmdir" 버튼을 만드는 예을 소개한다.

        • Script 편집 창 위에 있는 "Snippts" 버튼을 누르면 Snippts 버튼 설정 창이 열린다.
        • Snippts 버튼 설정 창에서 설정을 윈하는 버튼(이 예에서는 12번)을 누르면 해당 버튼 설정을 위한 창이 활성화 된다.
        • Snippts 버튼 이름을 입력하는 창에 버튼 이름(mkdir)을 입력하고,
        • Snippts 버튼 설정 창에 아래와 같은 스크립트을 입력한 다음 "Save" 버튼("Run" 버튼을 사용하여 스크립트을 저장하지 않고 바로 실행할 수도 있음)을 누른다.
          • import os

            os.mkdir('dir')

        • 이제 메세지창 아래 12번 Snippet 버튼(mkdir)을 클릭하고, 메세지창 우측의 "Reload" 버튼을 클릭하면 "dir" 폴더가 생성된 것을 확인할 수 있다.
        • 주: 이 방법은 폴더 이름을 Snippts 버튼 설정 창에서 설정하여야 한다. 예: Test 폴더를 만들고자 하는 경우 Snippts 버튼 설정 창에서 'dir'을 'Test'로 변경하고 "Run" 버튼을 사용하여 바로 실행할 수 있다.

      • "rmdir" 버튼 만들기
        • 위 mkdir(디렉토리 만들기)와 동일한 방법으로 Snippt 버튼(이 예에서는 13번))을 설정하고 사용한다.

        • Snippts 버튼 이름을 입력하는 창에 버튼 이름(rmdir)을 입력하고,
        • Snippts 버튼 설정 창에 아래와 같은 스크립트을 입력한 다음 "Save" 버튼을 누른다.
          • import os

            os.rmdir('dir')

    • 시리얼 통신 관련 버튼과 창
      • 시리얼 포트 Scan 버튼: 통신 가능한 시리얼 포트를 Scan 한다.
      • Baud rate 설정 창: Baud rate를 설정한다.
      • RTS 버튼과 상태 표시등
        • RTS 신호는 원래 RS232 컨트롤 신호로(전송 요청을 의미) 사용한다. 상대 장비에게 송신을 하여도 좋다는 의미와 자신이 송신을 한다는 의미로 사용한다.
        • ESPlorer에서는 ESP 보드의 리셋 신호로 사용할 수 있다. "DTR" 버튼이 Off인 상태에서 "RTS" 버튼를 On -> Off 상태로 변경(클릭)하면 ESP 보드가 Reset 된다. 상대 장비에게 송수신 상태가 되도록 하기 위하여는 다시 "RTS" 버튼를 Off -> On 상태로 변경(클릭)하여야 한다.
        • ESP 보드에 무한 Loop를 포함하고 있는 main.py(or boot,py) 프로그램이 있는 경우 리셋 신호에 의하여 자동으로 무한 Loop 가 실행되기 때문에 메세지 창에 Prompt( >>> ) 가 출력되지 않는다. ESPlorer-MT를 사용하는 경우에는 "Ctrl-C" 버튼을 사용하여 Reset과 동시에 Prompt( >>> ) 가 출력되게 할 수 있다. "Ctrl-C" 버튼이 없는 Tool을 사용하는 경우에는 위 "프로그램 개발 시 main.py에 무한 loop 가 포함된 경우"를 참고하기 바람.
      • DTR 버튼과 상태 표시등
        • 자신이 동작 가능한 상태이면 이 신호를 On 상태로 한다.
        • ESPlorer에서 RTS 버튼을 이용하여 Reset 신호를 발생하는 경우에는 이 버튼을 Off 상태로 한다.
        • ESP 보드에 "Run" 신호를 전송 등 상대 장치와 통신을 하는 경우 이 버튼 On 상태로 한다.

        주: ESPlorer-MT를 사용하는 경우에는 "Ctrl-C" 버튼을 사용하여 ESP 보드를 Reset 할 수 있기 때문에 RTS와 DTR을 On 상태로 하고 사용하는 것이 쉬운 사용 방법이다.

      • Open 상태 표시등: 시리얼 포트 Open 상태를 표시
      • CTS 상태 표시등: RS232 컨트롤 신호(Clear to Send) 이다.

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