MicroPython REPL 이것저것 on ESP32

  • REPL 접속(?)

micropython은 자체적으로 REPL을 제공한다. UART0를 통해 PC와 연결되며, 이를 사용하기 위해선 시리얼통신 프로그램(picom, putty 등)을 사용하거나, 터미널에서 screen 명령 등을 이용해서 이용 가능하다.

$ screen /dev/tty.SLAB_USBtoUART 115200

접속 종료는 ctrl+a, ctrl+\를 순서대로 누른다.

  • REPL에서 자동완성 기능 사용

import 후, 혹은 내장 펑션을 사용하는 경우에 tab 키를 이용한 자동완성 기능을 제공한다. 예를 들어 machine을 import 하고 machine.까지 입력 후 tab 키를 눌러보면,

>>> import machine
>>> 
>>> machine.
__class__       __name__        ADC             DAC
DEEPSLEEP       DEEPSLEEP_RESET                 EXT0_WAKE
EXT1_WAKE       HARD_RESET      I2C             PIN_WAKE
PWM             PWRON_RESET     Pin             RTC
SLEEP           SOFT_RESET      SPI             Signal
TIMER_WAKE      TOUCHPAD_WAKE   Timer           TouchPad
UART            ULP_WAKE        WDT             WDT_RESET
deepsleep       disable_irq     enable_irq      freq
idle            lightsleep      mem16           mem32
mem8            reset           reset_cause     sleep
time_pulse_us   unique_id       wake_reason
>>> machine.

와 같이 사용가능한 변수 명 함수명을 보여주고, 자동완성도 가능함.

  • 긴 코드 붙여넣기

REPL에서 예제 코드나 좀 긴 코드를 테스트해보고자 할 경우, 복사 붙이기 모드가 지원된다. 한줄씩 입력해야 하는 번거로움을 좀 덜 수 있다. >>> 에서 Ctrl+E키를 누르면,

>>> 
paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== 

와 같이 보이고, 여기에 긴 코드를 입력하던지, 아니면 다른 곳에서 코드를 복사해서 붙인다. 입력이 완료되면, Ctrl+D를 눌러 모드를 종료하면 입력된 코드를 순차적으로 실행한다. 취소하려면 Ctrl+C.

  • PC에서 직접 실행하기

REPL모드가 아니고, PC에서 코드를 완성하고 보드에 옮기지 않고 바로 실행이 가능하다. ampy를 이용하면 되는데,

$ ampy -p /dev/tty.SLAB_USBtoUART run <your_code>.py

와 같이 실행하면 바로 실행 가능.

WordPress에서 사용빈도를 반영한 태그 위젯 만들어 보기

참고링크: https://www.wpbeginner.com/plugins/how-to-display-most-popular-tags-in-wordpress

기본으로 제공되는 Tags 위젯은 사용된 Tag를 순서대로 모두다 보여줘서 좀 번거로운 면이 있다. 사용 빈도를 반영하여 많이 사용된 Tag를 크게 보여주고, 또 원하는 순위까지만 보여주는 것이 좀 괜찮을 것 같은데, 이를 위해선 해당 기능을 포함하는 플러그인을 설치해서 사용하거나, 간단히 functions.php를 수정하면 된다.

사용하는 테마의 디렉토리로 가서, functions.php 파일을 열고, 다음의 구문을 추가한다.

function wpb_tag_cloud() {
$tags = get_tags();
$args = array(
    'smallest'                  => 12,
    'largest'                   => 24,
    'unit'                      => 'px',
    'number'                    => 15,
    'format'                    => 'flat',
    'separator'                 => " ",
    'orderby'                   => 'count',
    'order'                     => 'DESC',
    'show_count'                => 1,
    'echo'                      => false
);

$tag_string = wp_generate_tag_cloud( $tags, $args );

return $tag_string;

}
// Add a shortcode so that we can use it in widgets, posts, and pages
add_shortcode('wpb_popular_tags', 'wpb_tag_cloud');

// Enable shortcode execution in text widget
add_filter ('widget_text', 'do_shortcode');

여기에서 설정할 옵션은

  • smallest: 가장 낮은 순위의 Tag 폰트 크기
  • largest: 가장 높은 순위의 Tag 폰트 크기
  • number: 15 순위까지 보여주기
  • seperator: Tag들 보여줄때 구분자

이와 같이 설정하고, Widget 설정에서 Text 위젯을 추가하고, 내용에 wpb_popular_tags을 입력한다. 결과를 보면,

와 같이 깔끔하게 보인다.

바나나 거치대 (Banana Stand)

바나나를 나무에 걸려 있는 모양으로 두면 보관을 오래할 수 있다고 한다. 옷걸이를 이용해서 만들거나, 파는 제품을 살 수도 있지만, 3D 프린터로 한번 만들어 본다.

CAD를 이용해서 모양을 만들고 (구조는 대단히 단순함)…

3D 프린터로 뽑아주면 (채움 20%, PETG 필라멘트 사용)…

이제 바나나를 걸어주면~~~~!!!

안정적으로 잘 매달려 있게 된다. 좀더 큰 것을 걸어두면 어떨런지는 모르겠는데, 일단은 만족!

Setup MicroPython on ESP32 (for macOS)

CP210x 드라이버 설치 (https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)

esptool 설치 (pip3가 없는 경우, homebrew를 이용해 설치한다)

$ pip3 install esptool

보드를 연결하고, 기존 flash 모두 초기화

$ esptool.py --chip esp32 -p /dev/tty.SLAB_USBtoUART erase_flash

esptool.py v2.6
Serial port /dev/tty.SLAB_USBtoUART
Connecting........__
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 84:0d:8e:0c:c9:f0
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 2.9s
Hard resetting via RTS pin...

펌웨어 다운로드 (https://micropython.org/download/#esp32)

펌웨어를 보드에 Flash 한다.

$ esptool.py --chip esp32 -p /dev/tty.SLAB_USBtoUART write_flash -z 0x1000 esp32-bluetooth.bin

esptool.py v2.6
Serial port /dev/tty.SLAB_USBtoUART
Connecting.....
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
MAC: 84:0d:8e:0c:c9:f0
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1549888 bytes to 970594...
Wrote 1549888 bytes (970594 compressed) at 0x00001000 in 85.5 seconds (effective 145.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

보드의 전원을 껐다가 다시 인가하고, 터미널에서 다음과 같이 입력하여 REPL 환경으로 진입.

$ screen /dev/tty.SLAB_USBtoUART 115200

처음엔 아무런 내용이 나타나지 않지만, 명령어를 입력하면 됨. 평소 사용한 REPL 환경와 동일.

>>> print("hello")
hello
>>> 

REPL 환경에서 나오려면, ctrl + a, ctrl + \ 키를 순서대로 누르고, 화면 밑 프롬프트가 나오면 y를 눌러 종료 가능.

Adafruit에서 제공하는 Micro Python Tool을 이용해 보드 내부의 파일 시스템에 파일을 넣거나 스크립트를 실행할 수 있음.

$ pip3 install adafruit-ampy

보드 내부 파일 시스템에 있는 파일들 표시

$ ampy -p /dev/tty.SLAB_USBtoUART ls

/boot.py

다음의 명령어를 이용해 파일들 조작 가능.

ampy
Usage: ampy [OPTIONS] COMMAND [ARGS]...

  ampy - Adafruit MicroPython Tool

  Ampy is a tool to control MicroPython boards over a serial connection.
  Using ampy you can manipulate files on the board's internal filesystem and
  even run scripts.

Options:
  -p, --port PORT    Name of serial port for connected board.  Can optionally
                     specify with AMPY_PORT environment variable.  [required]
  -b, --baud BAUD    Baud rate for the serial connection (default 115200).
                     Can optionally specify with AMPY_BAUD environment
                     variable.
  -d, --delay DELAY  Delay in seconds before entering RAW MODE (default 0).
                     Can optionally specify with AMPY_DELAY environment
                     variable.
  --version          Show the version and exit.
  --help             Show this message and exit.

Commands:
  get    Retrieve a file from the board.
  ls     List contents of a directory on the board.
  mkdir  Create a directory on the board.
  put    Put a file or folder and its contents on the board.
  reset  Perform soft reset/reboot of the board.
  rm     Remove a file from the board.
  rmdir  Forcefully remove a folder and all its children from the board.
  run    Run a script and print its output.

보드에 있는 LED로 GPIO 테스트. 13번 핀에 연결되어 있음.

>>> import machine
>>> led = machine.Pin(13, machine.Pin.OUT)
>>> led.value(1)
>>> led.value(0)

일단은 여기까지.

참고링크: https://github.com/pvanallen/esp32-getstarted

짜장밥

준비물: 돼지고기, 양파 2개, 감자 반개, 호박 반개, 당근 반개, 짜장가루 (2인분)

  1. 양파를 채 썰고, 후라이펜에 기름을 두르고 볶는다.
  2. 양파가 갈색이 되면 돼지고기를 넣고 또 볶는다.
  3. 돼지고기에 핏기가 사라지면, 감자, 양파, 호박, 당근을 넣고 또 볶는다.
  4. 3번에 넣은 야채가 좀 익었다 싶으면, 물 700ml를 넣고 끓인다.
  5. 야채가 거의다 익었으면, 짜장가루를 넣고 불을 줄인 후 살살 섞어준다.

끝!.

전반적인 과정은 카레와 완전 비슷. 다만 야채의 모양을 좀 다르게 해주는게 나은 듯. 짜장밥에 들어가는 야채는 깍뚝썰기로.