본문 바로가기

전자공학을 즐겁게/누구나 취미전자공학

CircuitPython 시작하기 (feat. xG24 Explorer Kit)

728x90
반응형

Silicon Labs xG24 Explorer Kit과 CircuitPython

작은 MCU(Microcontroller Unit)의 어플리케이션을 위해서는 C 언어로 프로그램하는 것이 대세입니다. 대부분의 MCU 제조사들이 C 언어로 되어 있는 SDK(Software Development Kit)를 제공합니다. 간혹 C++가 사용되기도 하지요. 우리가 흔히 사용하는 개인용 컴퓨터와는 다르게 MCU라고 불리는 이러한 소형 컴퓨터는 주로 하드웨어의 제어에 사용됩니다. 그런데, 파이썬(Python)을 MCU 어플리케이션에서 빠르게 프로토타이핑(Prototyping) 하는 데에 사용할 수 없을까 생각하게 됩니다. 물론 라즈베리파이(Raspberry Pi)에서 파이썬을 사용하여 하드웨어 제어를 하고 동작시키는 것도 가능하지만, 간단한 하드웨어 제어를 하는 데에 라즈베리파이와 같은 고성능, MCU에 비하면 상당히 고성능인 컴퓨터까지 사용할 것까지는 없는 경우가 대부분입니다.

그렇게 나온 것이 MicroPython인데, MicroPython은 동작시킬 수 있는 하드웨어가 다소 제한적인 모양입니다. 그런데, MicroPython을 기반으로 여러 하드웨어에 사용할 수 있도록 하는 오픈소스 프로젝트가 있네요. 바로 CircuitPython입니다. 

 

circuitpython.org

https://circuitpython.org/

다른 공식 사이트와 마찬가지로 CircuitPython의 웹페이지가 있습니다. 일단 Documetation으로 가서 어떤 내용이 있나 둘러보았습니다. 문서 사이트에 가면 어디에서 시작하는지에 대한 내용도 있습니다. 어느 문서를 보더라도 따라 하기와 같은 문서를 찾아서 해 보는 것이 가장 쉽게 접할 수 있는 방법입니다.

 

Silicon Labs xG24 Explorer Kit

Silicon Labs xG24 Explorer Kit

제가 가진 하드웨어입니다. 이 보드에서 파이썬으로 작업을 해 보는 것이 목적이었습니다. CircuitPython 지원 하드웨어 목록에 포함되어 있는 것 같네요. 이 하드웨어에 대한 정보는 다음 웹페이지에서 확인할 수 있습니다. 

https://www.silabs.com/development-tools/wireless/efr32xg24-explorer-kit?tab=overview 

 

EFR32xG24 Explorer Kit - Silicon Labs

The EFR32xG24 Explorer Kit is small form factor development and evaluation platform based on the EFR32MG24 System-on-Chip focused on rapid prototyping and concept creation of IoT applications for 2.4 GHz wireless protocols including Bluetooth LE, Bluetooth

www.silabs.com

이 하드웨어는 Silicon Labs라는 회사의 개발/평가용 보드의 하나로 같은 회사의 EFR32MG24B210F1536IM48라는 무선통신용 MCU가 탑재된 하드웨어입니다. 하드웨어 자체적으로 프로그램/디버그용 J-Link 디버거(debugger)를 가지고 있고, MIKROE의 Click Board를 바로 연결할 수 있는 mikroBUS 커넥터와 SparkFun의 Qwiic 커넥터를 가지고 있습니다. 기본적으로 2개의 푸시 버튼(push button)과 2개의 LED를 가지고 있습니다. 보통은 C 언어로 어플리케이션을 만드는데, CircuitPython도 지원을 하네요.

DigiKey, MOUSER, Arrow, 또는 국내의 여러 온라인 전자부품 구매사이트에서 구매가 가능할 것입니다.

 

CircuitPython 다운로드

우선 처음 시작은 제가 가지고 있는 xG24 Explorer Kit에 설치할 CirvuitPython 이미지를 다운로드하여야 합니다. 

다음 페이지로 가서 하드웨어를 검색해 봅니다. 

https://circuitpython.org/downloads

 

CircuitPython - Downloads

CircuitPython supported boards.

circuitpython.org

 

검색어에 xG24라고 치면 원하는 하드웨어가 목록에 표시될 것입니다. 

CircuitPython 다운로드 페이지에 가서 이미지를 다운로드 합니다.

 

다운로드하는 방법은 워낙 직관적이라 굳이 자세히 설명한 필요는 없겠죠?

adafruit-circuitpython-explorerkit_xg24_brd2703a-en_US-x.x.x.bin과 같은 이름의 파일이 다운로드될 것입니다. 일단 잘 다운로드해 둡니다.

 

초기 준비를 위한 도구

이미지는 받았는데, 이 이미지를 하드웨어에 심어 주어야 합니다. 이것을 위한 도구를 준비해 봅시다.

xG24 Explorer Kit는 J-Link 디버거를 포함하고 있기 때문에 펌웨어(firmware) 이미지를 심기 위하여 별도의 하드웨어는 필요하지 않습니다. C-Type USB 케이블만 있으면 되는데, 키트에는 포함되어 있지 않습니다. 주의할 점은 USB 케이블 중에 전원만 공급할 목적으로 데이터선은 연결되어 있지 않고, 전원만 연결되어 있는 USB 케이블도 있다는 점을 주의하세요. 데이터 통신 가능한 케이블이어야 합니다.

소프트웨어 도구는 Silicon Labs의 Simplicity Studio만 설치하면 한 방에 해결되지만, 단순히 이미 가지고 있는 이미지를 심기만 하면 되는데 굳이 Simplicity Studio를 모두 설치할 필요는 없습니다. 그래도 굳이 모두 설치해 보고 싶다면 다음 링크를 찾아가세요. 

https://www.silabs.com/developers/simplicity-studio

 

Simplicity Studio - Silicon Labs

Simplicity Studio simplifies IoT development by giving developers everything needed to complete projects using an integrated development environment (IDE).

www.silabs.com

 

펌웨어 이미지를 키트에 심기 위해서는 Simplicity Studio에 포함되어 있는 도구 중에 Simplicity Commander만 있으면 됩니다. J-Link 디버그 인터페이스를 통하여 MCU를 프로그램하거나 정보를 읽어 올 수 있는 도구입니다. Simplicity Studio와 별도로 Commander만 따로 내려받을 수 있습니다. 다음 Link를 찾아가세요. 

https://www.silabs.com/developers/simplicity-studio#commander

 

Simplicity Studio - Silicon Labs

Simplicity Studio simplifies IoT development by giving developers everything needed to complete projects using an integrated development environment (IDE).

www.silabs.com

 

그리고, Simplicity Studio를 설치하면, J-Link 소프트웨어까지 설치를 하는데, Commander만 따로 설치하는 경우에는 J-Link 소프트웨어를 따로 설치해 주어야 합니다. 다음 링크를 찾아가세요. 

https://www.segger.com/downloads/jlink/

 

SEGGER - The Embedded Experts - Downloads - J-Link / J-Trace

Our downloads are protected and signed with SEGGER emSecure! More information about signed downloads, how signatures are created and how easy downloaded files can be verified.

www.segger.com

 

두 가지 모두 Windows, Linux, macOS 각 OS에 맞는 설치 파일이 있습니다. 사용하는 OS에 적합한 설치 파일을 내려받아서 설치하세요. 

정리하면 우리는 당장 2가지만 있으면 됩니다. 

 

CircuitPython 이미지 심기

예전에는 ROM을 굽는다라는 말을 쓰긴 했었는데, 기록 가능한 ROM에 이미지를 심을 때, 내부의 퓨즈를 끊는 과정에서 따뜻하게 열이 나는 것 때문에 그렇게 부르긴 했었죠. 요즘에는 그냥 프로그램한다고 하죠. 옛날처럼 따뜻하게 열이 난다거나 하는 것을 느끼지 못하니까요. 그냥 지나는 여담이고요.

이제는 CircuitPython 페이지에서 내려받은 CircuitPython 이미지를 키트에 심어 봅시다. 

 

  • 먼저 xG24 Explorer Kit을 USB 케이블을 사용하여 연결합니다.
  • Simplicity Commander를 실행합니다. 다음에 나오는 그림의 과정을 따릅니다. 
    1. Kit를 연결합니다. J-Link 소프트웨어가 정상적으로 설치되었고, USB 케이블이 이상이 없다면 이 부분에서 키트의 디버그 인터페이스의 시리얼 번호가 보일 것입니다. 시리얼 번호를 선택하면 연결이 됩니다.
    2. "Flash" 아이콘을 선택하여 화면을 이동합니다. 이 화면이 이미지를 선택하여 키트에 심는, 정확히는 키트에 있는 MCU의 플래시 메모리에 심는 화면입니다. 
    3. CircityPython 페이지에서 내려받은 이미지를 선택합니다. 어디에 저장했는지 잘 기억하고 있어야겠죠?
    4. "Flash" 버튼을 눌러 이미지를 전송합니다. 아래의 메시지 창을 잘 확인하세요. 오류 없이 성공했다는 메시지가 나오면 됩니다.

Silicon Labs의 Simplicity Commander를 이용하여 이미지를 심는 과정입니다.

Simplicity Commander는 설치한 이후에 설치한 경로를 PATH에 포함시켜 놓으면 편리합니다. GUI를 실행하지 않고, Command Line에서 직접 하는 방법도 있는데, 여기에서는 그냥 GUI를 사용합니다.

 

CircuitPython 실행시켜 보기 - REPL

이젠 이미지를 심었으니 일단 실행시켜 보도록 합시다. USB 케이블은 그대로 연결해 두도록 하세요. USB 케이블은 디버그 인터페이스로의 연결을 제공하기도 하지만, UART 시리얼포트 연결을 제공하기도 합니다. 

xG24 Explorer Kit에서 동작하는 CircuitPython은 UART 시리얼포트를 통하여 REPL(Read-Evaluation-Print-Loop)를 제공합니다. 간단하게 말해서 대화형 모드입니다. PC에서도 파이썬을 실행시키면 대화형 모드(Interactive Mode)가 실행되지요?

UART 시리얼포트를 통하여 REPL이 실행되기 때문에 시리얼포트로부터 문자를 수신해서 출력하고, 키보드 입력을 시리얼포트를 통해서 보내 주는 프로그램이 필요합니다. 

 

Windows에서는 TeraTerm을 많이 사용합니다. 내려받기와 설치 방법은 홈페이지를 참조하세요. 

https://ttssh2.osdn.jp/index.html.en

 

Tera Term - Terminal Emulator for Windows

Tera Term is a terminal emulator running on Windows. It supports telnet/ssh/serial connection.

ttssh2.osdn.jp

 

저는 리눅스(Linux), 더 정확하게 말하자만 우분투(Ubuntu)를 사용합니다. 여러 가지가 있는 것 같은데, minicom을 사용합니다. 설치는 인터넷 연결된 상태에서 다음 명령으로 합니다. 

sudo apt update
sudo apt install minicom

 

반드시 위에 제가 사용하는 프로그램만 사용하여야 하는 것은 아닙니다. 선호하는 시리얼통신 프로그램이 있다면 사용하면 됩니다. 

 

xG24 Explorer Kit을 USB 케이블(반드시 데이터 통신이 가능한 케이블인지 확인하세요)을 통하여 연결하면, Windows의 경우에는 COM? 과 같은 시리얼포트가 생길 것입니다. 이름은 J-Link CDC UART Port와 같이 보일 것입니다. Windows의 장치관리자에서 확인할 수 있습니다.

Windows 장치관리자에서 표시되는 UART Port

 

Linux에서는 /dev 디렉터리에 해당 디바이스가 보일 것입니다. 주로 /dev/ttyACM0로 나타나는데,  Explorer Kit을 연결하고 다음 명령으로 확인을 할 수가 있습니다. 

dmesg | grep -B5 ttyACM

 

다음과 같은 내용을 찾을 수 있을 것입니다.

[ 2684.315893] usb 1-1.4.1: New USB device found, idVendor=1366, idProduct=0105, bcdDevice= 1.00
[ 2684.315895] usb 1-1.4.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2684.315896] usb 1-1.4.1: Product: J-Link OB
[ 2684.315897] usb 1-1.4.1: Manufacturer: Silicon Labs
[ 2684.315898] usb 1-1.4.1: SerialNumber: 000440282460
[ 2684.330539] cdc_acm 1-1.4.1:1.0: ttyACM0: USB ACM device

 

Windows에서는 설치한 TeraTerm을 실행하면, 연결하고자 하는 시리얼포트를 선택하는 화면이 나옵니다. 이때, 장치관리자에서 확인한 COM 포트를 선택해 주면 됩니다. 

TeraTerm 시작 화면

 

Linux에서는 저는 다음 명령으로 minicom을 실행합니다.

minicom -D /dev/ttyACM0 -b 115200

-D 또는 --device 다음에 시리얼포트 디바이스를 적어 주면 됩니다. -b는 시리얼포트의 데이터속도인데, CDC UART에서는 큰 의미는 없습니다. 

 

연결이 된 것 같으면, xG24 Explorer Kit의 오른쪽 위에 RST라고 씌어 있는 버튼을 눌렀다가 떼어 보세요. 다음에 나오는 화면처럼 나온다면 제대로 연결이 된 것입니다. 아무 키나 누르면 REPL을 시작한다고 나오는데, 그 이전의 출력 내용은 code.py가 실행된 내용입니다. "Hello, World!"라고 찍었죠? Explorer의 CircuitPython 파일시스템의 code.py가 실행된 것입니다. 이것은 나중에 또 해 보도록 하구요.

아무 키나 눌러서 REPL에 진입을 해 봅니다. PC에서 실행되는 Python 인터프리터의 대화형 모드와 거의 동일할 것입니다. 

minicom에서 xG24 Explorer Kit의 CircuitPython REPL을 연결한 모습

CircuitPython을 실행하는 하드웨어는 여러 가지가 있고, 다들 다릅니다. board라는 모듈은 현재의 하드웨어가 가지는 특성값들을 가지고 있습니다. 예를 들면, board.board_id가 현재 하드웨어의 이름을 가지고 있습니다. 

 

이제는 PC에서 하듯 Python 대화형 모드를 사용할 수 있습니다. 

 

스크립트의 실행

이제는 스크립트를 파일로 만들어서 실행시켜 보도록 하겠습니다. 

가장 쉽게 사용하는 것은 간단한 IDE(Integrated Development Environment)를 사용하는 것인데, Thonny가 처음 접근하기가 수월해 보입니다.

다음 홈페이지가 공식페이지입니다. https://thonny.org/

 

Thonny, Python IDE for beginners

Thonny 4 is dedicated to Ukraine fighting the Russian invasion. 🇺🇦 Please support Ukraine! 🇺🇦 Download version 4.1.1 for  •   •  Thonny Python IDE for beginners Features Easy to get started. Thonny comes with Python 3.10 built in, so ju

thonny.org

 

Linux에서는 다음 명령으로 설치할 수 있습니다. 

sudo apt update
sudo apt install thonny

만약 Linux에서 실행할 때, 크래쉬가 발생하면 unifont를 설치해 보세요. 저는 이것으로 해결되었습니다. 

sudo apt update
sudo apt install unifont

 

설치 후에는 사용할 인터프리터를 지정하는데, CircuitPython을 선택할 수 있고, 사용할 UART 포트를 지정할 수 있습니다. 

실행 후, Tools > Options... > Interpreter에 가서 Interpreter는 CircuitPython (generic)을 Port는 사용할 시리얼포트를 선택합니다. CircuitPython (generic) 대신 MicroPython (generic)을 선택하여도 동작은 하는 것 같습니다.

 

정상적으로 설정이 되면 Thonny의 실행화면이 다음에 보이는 것처럼 됩니다. 화면을 분할하여 윗부분은 코드 편집에, 아래쪽은 Shell을 보여 주는 데에 사용이 됩니다. 

Thonny 실행 화면

 

IDE 실행했으면 코드 스크립트를 만들어서 실행을 해 봐야겠죠? 역시 임베디드 MCU 어플리케이션의 Hello world는 LED 깜빡이기 아니겠습니까? xG24 Explorer Kit 위에 2개의 LED가 있는데, 번갈아 깜박이는 프로그램을 만들어 보겠습니다. 

 

import board
import digitalio
import time

print('Start main')

led0 = digitalio.DigitalInOut(board.LED0)
led1 = digitalio.DigitalInOut(board.LED1)

led0.direction = digitalio.Direction.OUTPUT
led1.direction = digitalio.Direction.OUTPUT

led0.value = 0
led1.value = 1

count = 0

while(True):
    if (count%2 == 0):
        led0.value = 1
        led1.value = 0
    else:
        led0.value = 0
        led1.value = 1
    time.sleep(1)
    count = (count+1) % 2

 

그냥 파이썬과 똑같죠? 라즈베리파이에서 Rpi.GPIO 모듈을 사용하는 대신, digitalio라는 모듈을 사용합니다.

모두 작성했으면, 파일을 Save 합니다. 그러면, "This Computer" (현재 작업하고 있는 PC)에 저장할 것인지, "CircuitPython device" (여기에서는 xG24 Explorer Kit)에 저장할 것인지 물어봅니다. 어디에 저장해도 상관없습니다. 최소한 지금까지는요. 현재 작업하고 있는 PC에 저장을 해도, 시리얼포트를 통한 REPL의 보이지 않는 동작으로 코드를 전송하고 실행하게 됩니다. 

실행과 중지

모두 작성했으면, "Run current script"를 선택하여 실행합니다. 오류가 있다면, Traceback을 출력하면서 실행이 멈추는 것은 동일합니다. 실행을 중지시키고 CircuitPython 장치를 처음 REPL 상태로 돌리고자 한다면, "Stop/Restart backend"를 선택합니다.

Run 메뉴에서도 찾을 수 있고, 위의 그림에 표시한 것처럼 아이콘도 있습니다. 

 

Run 하여 실행해 보세요. 1초 간격으로 2개의 LED가 번갈아 켜질 것입니다. 

Hello world 해 봤으면 프로그래밍 언어 다 배운 것처럼, 임베디드 MCU는 LED 켜 봤으면 다 배운 것 아닌가요? 

728x90
반응형