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

Advertisements

짜장밥

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

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

끝!.

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

카레

준비물: 돼지고기 or 소고기, 양파 2개, 당근 반개, 감자 반개, 카레 고형분 2인분, 버터 쪼금

  1. 양파, 당근, 감자는 얇게 채 썰기해서 준비. 당근, 감자는 채칼을 이용하면 쉽게 가능.
  2. 후라이팬에 버터 (없으면 올리브유)를 넣고, 양파를 다 넣고 살짝 갈색이 될때까지 볶는다.
  3. 고기를 넣고 볶는다.
  4. 고기가 핏기가 사라지면, 당근, 감자를 넣고 볶는다.
  5. 야채가 숨이 죽고 좀 익었다 싶으면 (이때쯤 양파는 좀더 진한 갈색으로 변함), 물을 700ml 정도 넣고 끓인다.
  6. 물이 끓기 시작하면, 카레를 넣고 저어준다.
  7. 야채가 완전히 익을때까지 저어준다.

끝!.

양파가 볶으면 볶을수록 단맛이 올라와, 아이들도 좋아하는 달달한 맛을 느낄수 있음. 거의 익어버려 양파의 아삭한 감이 사라지므로 먹기도 편함.

Jetson Nano GPIO 사용 해보기

Jetson Nano에는 라즈베리파이와 마찬가지로 40핀의 GPIO 헤더가 존재한다. 이를 이용해 다양한 외부기기와 연결 가능한데, python의 라이브러리를 이용하면 사용자가 제어 가능하다.

먼저 필요한 패키지를 설치한다. python3는 기본 설치되어 있고, pip3는 설치해야 한다.

$ sudo apt install python3-pip

다음으로 Jetson.GPIO 패키지를 설치한다.

$ sudo pip3 install Jetson.GPIO

이제 python3를 실행하고 설치한 패키지를 import 해보면 다음과 같이 퍼미션 에러가 발생한다. 몇가지 설정이 필요하다.

>>> import Jetson.GPIO
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/dist-packages/Jetson/GPIO/__init__.py", line 1, in <module>
    from .gpio import *
  File "/usr/local/lib/python3.6/dist-packages/Jetson/GPIO/gpio.py", line 33, in <module>
    raise RuntimeError("The current user does not have permissions set to "
RuntimeError: The current user does not have permissions set to access the library functionalites. Please configure permissions or use the root user to run this

gpio 그룹을 생성하고 사용자를 gpio 그룹에 추가한다.

$ sudo groupadd -f -r gpio
$ sudo usermod -a -G gpio <user_id>

다음으로 udev 룰을 rules.d 디렉토리로 복사한다.

$ sudo cp /opt/nvidia/jetson-gpio/etc/99-gpio.rules /etc/udev/rules.d/

재부팅하거나, 다음과 같이 입력하여 udev 룰을 다시 불러온다. (재부팅해야 함.)

$ sudo udevadm control --reload-rules && sudo udevadm trigger

이제 python3를 실행한 다음, 패키지를 import 해보면, 정상적으로 사용 가능하다. 몇가지 예제 코드들이 /opt/nvidia/jetson-gpio/samples에 있으므로 참고하면 될듯하다. 사용법은 RPi.GPIO와 동일하다.

>>> import Jetson.GPIO as GPIO
>>> GPIO.setmode(GPIO.BOARD)
>>> GPIO.setup(33, GPIO.OUT)
>>> GPIO.output(33, GPIO.HIGH)
>>> GPIO.output(33, GPIO.LOW)

위와 같이 간단히 사용 가능하고, 인터럽트, 콜백함수 등 다양한 기능을 지원한다. 몇가지 주의 사항으로는,

  • GPIO의 전압은 5V가 아닌 3.3V
  • PWM 기능은 지원하지 않음
  • I2C, SPI는 각각 두개씩 지원
  • 몇가지 특수펑션들 사용하고, 전원관련 핀을 빼면 여분의 GPIO는 별로 없는듯.

상세한 핀아웃은 https://www.jetsonhacks.com/nvidia-jetson-nano-j41-header-pinout/을 참고하면 됨.

Jetson Nano Developer Kit 사양 & 크기 정보

Technical Specifications

GPU128-core Maxwell
CPUQuad-core ARM A57 @ 1.43 GHz
Memory4 GB 64-bit LPDDR4 25.6 GB/s
StoragemicroSD (not included)
Video Encode4K @ 30 | 4x 1080p @ 30 | 9x 720p @ 30 (H.264/H.265)
Video Decode4K @ 60 | 2x 4K @ 30 | 8x 1080p @ 30 | 18x 720p @ 30 (H.264/H.265)
Camera1x MIPI CSI-2 DPHY lanes
ConnectivityGigabit Ethernet, M.2 Key E
DisplayHDMI 2.0 and eDP 1.4
USB4x USB 3.0, USB 2.0 Micro-B
OthersGPIO, I2C, I2S, SPI, UART
Mechanical100 mm x 80 mm x 29 mm

보드 자체의 크기는 실제 측정해보면 100mm x 79mm 이다. 나사 홀의 위치는 다음과 같다.