IBM Developer Day 2018에서 배포한 IoT 뱃지는 ESP32 Devkit을 기반으로 구성되어 있습니다. 배포 당시 설치된 행사용 소프트웨어 대신 마이크로 파이썬이 포팅된 펌웨어를 설치하면 IoT 뱃지를 개발 보드로 활용할 수 있습니다. 이 튜토리얼에서는 마이크로 파이썬으로 작성된 코드를 개발보드로 업로드하고 실행하는 방법에 대해 학습합니다.

학습 목표

이 튜토리얼을 마치게 되면 다음과 같은 것을 할 수 있습니다:

  • USB 데이터 케이블로 IoT Badge의 마이크로파이썬 REPL 터미널 USB 연결
  • REPL을 이용하여 IoT Badge에 마이크로 파이썬 코드 실행
  • Web Browser에서 IoT Badge의 마이크로파이썬 WebREPL 터미널 연결
  • WebREPL을 이용하여 IoT Badge에 마이크로 파이썬 코드 파일 업로드 및 다운로드

사전 준비 사항

  1. Developer Day 2018 IoT Badge 펌웨어 설치하기
  2. IBM Developer Day 2018 IoT Badge
  3. 데이터 통신용 USB 2.0 Micro B Type 케이블 (마이크로 5핀)
  4. Developer Day 2018 펌웨어 다운로드
  5. 2.4GHz 대역폭 무선 공유기

소요 시간

이 튜토리얼을 완료하기까지 대략 30분 정도가 소요됩니다.

단계

Serial 통신 프로그램 설치

REPL 터미널은 데이터 전송이 가능한 USB 2.0 Micro B Type 케이블 (마이크로 5핀) 케이블을 이용해 IoT뱃지와 컴퓨터를 연결하고 UART 시리얼 통신 프로그램을 이용해야 합니다.

시리얼 통신을 위한 프로토콜 정보는 다음과 같습니다.

설정
Baudrate 115200
Data bits 8
Parity bit None
Stopbit 1
Flow Control OFF

Windows인 경우

Windows는 시리얼 통신용 Software를 별도로 설치해야 합니다. 일반적으로 많이 사용하는 PuTTY를 기준으로 설명합니다.

Putty를 실행하면 PuTTY Configuration화면이 먼저 나타납니다. 여기서 Connection typeSerial로 변경 해 줍니다.

그 다음으로 Serial line에 USB로 연결된 COM값을 입력해 포트를 입력하고, Speed에는 115200을 입력해 baudrate를 설정 후 하단의 Open을 클릭하여 REPL에 접속합니다.

참고로, USB로 연결된 시리얼 포트는 내 컴퓨터장치관리자에서 확인 할 수 있습니다. 실행 명령창에서 devmgmt.mschdwwiz.cpl 명령을 실행합니다.

장치관리자에서 포트(COM & LPT) 항목을 클릭해 Sillicon Labs CP210x USB to UART Bridge 에 할당된 COM 숫자 값을 확인합니다.

설치되는 USB 포트별로 다른 번호가 할당될 수 있고 드라이버 설치에 따라 기기 인식 시간이 지연 될 수 있습니다. 아래 그림에서 확인된 포트 번호는 COM5입니다.

Linux인 경우

접속 환경이 Linux인경우 picocom이나 minicom을 이용할 수 있습니다.

USB 케이블을 연결 후 시리얼 포트 확인을 위해 dmesg | grep tty 명령으로 확인합니다.

$ dmesg | grep tty
[    0.000000] console [tty0] enabled
[    0.924251] 00:05: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[55711.845191] usb 2-2.1: cp210x converter now attached to ttyUSB0

여기서 확인된 /dev/ttyUSB0 포트를 picocom으로 접속하는 경우 다음과 같이 명령을 실행합니다.

$ sudo picocom /dev/ttyUSB0 -b 115200

MacOS인 경우

MacOS의 경우 screen 명령을 이용 할 수 있습니다. 드라이버가 설치되었다면 다음 명령으로 컴퓨터에 연결된 USB 포트 정보를 확인합니다. 드라이버가 정상 설치되었다면 USB로 연결된 시리얼 포트는 /dev/tty.SLAB_USBtoUART가 되며 다음과 같이 명령을 실행합니다.

$ screen /dev/tty.SLAB_USBtoUART 115200

마이크로 파이썬 REPL 사용하기

REPL은 Read-Eval-Print Loop의 약자로 일종의 명령을 입력하면 그 결과를 보여주는 일종의 Shell 같은 서비스를 말합니다. IoT Badge에는 MicroPython 이 포팅되어 있어 USB 케이블을 이용해 Serial 통신 프로그램으로 REPL에 연결 할 수 있습니다. USB 케이블이 연결된 상태라면 시리얼 통신 소프트웨어 실행 상태에서 컴퓨터의 enter 키를 몇 번 입력하면 Shell 프로그램과 비슷하게 >>> 와 같은 Prompt가 나타나는 것을 확인 할 수 있습니다.

다음은 Linux 환경의 picocom에서 REPL 터미널로 연결된 모습입니다.

REPL에서 Tab 키를 누르면 현재 사용할 수 있는 명령이 제시되며 별다른 입력이 없는 상태에서는 전역으로 입력할 수 있는 객체 정보가 출력됩니다.

>>> 
>>> 
__class__       __name__        execfile        gc
json            machine         network         run
sys             time            ugfx            uos
bdev            webrepl         sta_if          ap_if
util            rtc             appname         startup
display_logo    home            reboot          restart
unload          get_version     Config          wait_network
>>> 

IoT 뱃지에는 작게나마 File System이 준비되어 있습니다. 현재 저장된 파일의 정보를 확인하기 위해 uos 패키지를 이용합니다. uos 패키지는 일반적인 파이썬에서 제공하는 os 패키지를 마이크로 파이썬에 맞춰 축약해 놓은 것입니다. uos.lsdir() 명령으로 현재 디렉토리에 포함된 파일 목록을 볼 수 있습니다.

>>> uos.listdir()
['boot.py', 'ibm_logo.gif', 'main.py', 'util.py', 'version.txt', 'config', 'apps', 'webrepl_cfg.py']

IoT 뱃지용 애플리케이션이 설치된 apps 폴더에 포함된 파일 목록도 볼 수 있습니다.

>>> uos.listdir('apps')
['netconfig', 'home', 'appmanager', 'nametag', 'rps']

이제 간단한 python 프로그램을 실행해 볼까요? REPL 상에서 print(`Hello, World`) 라고 입력합니다.

그리고 다음과 같이 Hello, World가 출력되는지 확인합니다.

>>> print(`Hello, World`)
Hello, World
>>>

이번에는 변수를 활용해 보도록 합니다. 다음과 같이 4줄을 입력하여 3이 출력되는지 확인합니다.

>>> a = 1
>>> b = 2
>>> c = a + b
>>> print(c)
3
>>> 

이번에는 test라는 이름의 함수 하나를 만들어서 실행해 보도록 합니다.

def test(a, b):
    return a + b

그리고 다음과 같이 실행합니다.

>>> print(test(1, 2))
3
>>>

REPL 입력 모드

기존 입력 내용

최대 8개까지 기존 입력 내용을 기억하고 있습니다. 방향키 위/아래를 이용합니다.

라인 편집

  • 방향키 왼쪽/오른쪽으로 커서를 이동할 수 있습니다.
  • 해당 입력 줄의 처음으로 이동: Home 또는 Ctrl-A (단, MacOS의 screen경우 Ctrl-A가 예약 단축키이므로 동작하지 않음)
  • 해당 입력 줄의 마지막으로 이동: End 또는 Ctrl-E

붙여넣기 모드

REPL에서 Ctrl-E 키를 누르면 일반 모드에서 붙여넣기 모드로 전환되며, 클립보드에 있는 여러 줄의 파이썬 코드를 붙여넣을 수 있습니다. 붙여넣기가 완료 후 Ctrl-D 를 누르면 일반모드로 전환되며 REPL에서 사용자가 입력한 것 처럼 붙여 넣은 내용을 실행합니다.

  • 주의 할 점은 통신환경에 따라 많은 내용을 한번에 입력할 때 간혹 내용이 누락되는 경우가 발생합니다. 정확하게 입력되었는지 그리고 그 결과가 맞는지 확인이 필요하며, 한 번에 많이 입력하기 보다는 코드를 여러 번 나누어 되도록 짧은 코드가 입력되도록 합니다.
  • 코드 양이 많아지는 경우 나누어 입력하기 어려우므로 이런 경우는 보다 안정적으로 연결되는 WebREPL 이용하기를 이용하도록 합니다.

WebREPL 이용하기

USB 시리얼 통신으로 연결되는 REPL을 이더넷 네트워크를 통해 웹브라우저로 제공하는 것을 WebREPL이라 말합니다. 이를 이용하면 USB 드라이버나 데이터 케이블이 없어도 없이 IoT 뱃지와 컴퓨터가 동일한 네트워크 망에 연결되어 있다면 컴퓨터에서 웹 브라우저에서 IoT 뱃지에 접속 할 수 있습니다.

참고로, IoT Badge에는 WiFi 모듈이 내장되어 있지만 2.4GHz 대역만 접속이 가능합니다. 5GHz 대역인 경우는 사용할 수 없으니 주의 해야 합니다.

IoT 뱃지 WiFi 연결

IoT 뱃지의 방향키를 움직이면 메뉴를 선택 할 수 있고, 방향키 오른편에 있는 두 개의 버튼 중 왼쪽에 있는 A 버튼을 누르면 선택한 메뉴를 실행할 수 있습니다. 초기 화면에서 Apps 메뉴로 진입하면 IoT 뱃지에 설치된 애플리케이션 리스트를 볼 수 있습니다. 여기에서 Network Config 애플리케이션을 선택 후 실행합니다.

Network config에서 WiFi를 선택하면 현재 주위의 WiFi SSID 목록을 표시합니다. 이 중 자신의 컴퓨터에 연결 가능한 WiFi 공유기의 SSID를 선택합니다.

해당 공유기의 WiFi 비밀번호를 입력 후 를 선택합니다.

정상적으로 연결되면 Network configuration Saved라는 메시지와 함께 IoT 뱃지가 재부팅합니다.

WebREPL 활성화

이번엔 WebREPL을 활성화합니다. 앞서 WiFi 네트워크 설정을 했던 Network Config 애플리케이션을 실행하고 B 버튼을 누르면 현재 IoT 뱃지에 할당된 IP 정보가 표기됩니다. 이 IP는 컴퓨터에서 접속할 WebREPL 주소가 되므로 잘 기억해 두어야 합니다.

방향키를 눌러 Webrepl 메뉴로 진입하면 WiFi 비밀번호 설정과 유사한 화면이 나타납니다.

이는 WebREPL의 경우 IP를 알면 누구나 IoT 뱃지에 접속할 수 있으므로 이에 대한 기초적인 비밀번호를 설정하는 것입니다. 임의의 값을 입력 후 WebREPL 연결 시 입력하도록 합니다.

그리고, 를 선택하면, Webrepl password saved. 란 메시지와 함께 IoT 뱃지가 재부팅됩니다.

WebREPL 코드 설치

이제는 컴퓨터에서 WebREPL을 준비할 차례입니다. 아래 URL에서 WebREPL 코드를 다운로드 받아 놓습니다.

파일 압축을 해제하면 webrepl.html 파일이 있는 것을 볼 수 있습니다. 이 파일을 웹브라우저에서 열면 WebREPL 화면이 나타납니다.

접속 URL을 IoT뱃지의 IP에 맞춰 변경합니다. IP가 192.168.1.58인 경우 ws://192.168.1.58:8266/와 같습니다.

Connect 버튼을 클릭하면 비밀번호 요구하는 화면이 나타납니다.

앞서 설정한 비밀번호를 입력하면 시리얼 케이블로 연결한 REPL과 같은 화면이 나타나고 정상적으로 명령을 인식하고 실행하는 것을 확인 할 수 있습니다.

WebREPL을 이용한 파일 송수신

REPL과 달리 WebREPL은 파일 전송 기능이 있습니다. WebREPL의 오른쪽 메뉴를 보면 Send a fileGet a file이란 부분이 있습니다. Send a file은 파일을 컴퓨터에서 IoT 뱃지로 파일을 보내는 경우, Get a file은 IoT 뱃지의 파일을 컴퓨터로 내려 받는 경우 사용합니다.

파일 송수신 시 신경 써 주어야 할 부분이 있는데, WebREPL에서 파일을 송/수신할 때는 IoT 뱃지의 현재 디렉토리를 기준으로 처리합니다. uos.chdir 명령으로 위치를 변경하게 되면 변경된 곳을 기준으로 파일을 송수신하게 되므로 주의해야 합니다.

WebREPL CLI를 이용한 파일 전송

애플리케이션을 개발할 때 WebREPL을 이용하여 코드나 파일을 전송할 수 있습니다. 그러나, Web browser를 이용하는 경우는 전송 경로 설정이나 버튼을 클릭과 같은 사용자가 직접 해당 동작을 직접 수행해야 합니다. 이는 개발 시 단순 반복되면서 일정 시간이 소요되는 것으로 소프트웨어 개발 업무 효율을 떨어뜨리게 됩니다. 게다가 Web Browser를 통해 동작하므로 자동화 스크립트나 외부 도구를 사용하기 어렵게 됩니다. 이를 위해 WebREPL에서는 CLI(webrepl_cli.py)를 제공합니다. 단, Python 실행 환경이 필요하므로 이는 미리 준비되어 있어야 합니다.

만약 특정 경로의 파일을 IoT 뱃지의 특정 경로로 전송하고 싶은 경우 다음과 같이 webrepl_cli.py를 실행합니다.

webrepl_cli.py -p helloiot test.py 192.168.1.58:/apps/test/

위와 같은 경우 IoT 뱃지의 IP는 192.168.1.58 그리고 WebREPL 접속 비밀번호는 helloiot, 전송하고자하는 파일은 test.py 그리고 전송되는 위치는 /apps/test/ 디렉토리입니다.

WebREPL CLI를 이용하면 일반적인 IDE에서 제공하는 Script 실행 기능을 활용하여 파일 업데이트 스크립트 세트도 구성 할 수 있습니다.

맺음말

이 튜토리얼에서는 Develper Day 2018 IoT 뱃지의 REPL 및 WebREPL 터미널을 연결방법과 활용 방법에 대해 알아 보았습니다. 이제 여러분만의 마이크로 파이썬 코드를 작성하고 이를 IoT 보드에 직접 올려서 실행하고 테스트해서 다양하게 확장해 가시길 바랍니다.