IoT Wireless

Porting MicroPython to WizFi250 본문

IoT Platform(Script)

Porting MicroPython to WizFi250

DH0815 2015. 3. 27. 09:47

WizFi250에 스크립트 탑재를 검토하고자 MicroPython을 WizFi250에 포팅해 보았다.

물론 가능성 여부만 타진하고자 함이 목적이라서 MicroPython에서 MicroPython 코어 엔진 정도만 올려 보았다.

아래는 MicroPython 소스는 아래 링크에서 받을 수 있다.

https://github.com/micropython/micropython


MicroPython이 2014년에도 KickStarter에서 성공적으로 런칭되었다.

https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers/description


MicroPython GitHub 폴더에는 WIZnet 5x00 시리즈의 드라이버도 지원을 하고 있다.

http://wiznetmuseum.com/portfolio-items/the-micro-python-project/



자, 그럼 이번에는 MicroPython이 포팅된 보드의 MCU에 대한 정보는 아래와 같다.

STM32F405RG

Cortex M4F

1MB Flash, 192KB RAM, 168MHz, 

USB micro connector for device (and host)

Micro SD card

3-axis accelerometer (MMA7660)

Real-time clock, 4 LEDs, 2 switches

30 GPIO: symmetric pin layout, plus extra pins

Internal file system. ”/flash” and ”/sd”


그리고, WizFi250에서 사용되고 있는 MCU 정보는 아래와 같다.

STM32F205RGY6

ARM 32-bit Cortex-M3 CPU

1 MB Flash, 128KB RAM, CPU frequency up to 120MHz

Low-power sleep, standby and stop modes

Extend one 8Mbit Flash memory


전체적으로 WizFi250 MCU의 성능이 조금 낮기는 하지만, 스크립트에서 MCU Peripheral pin들의 라이브러리를 최소한으로 구현하면, 어렵지 않게 포팅될 것이라 믿었다.

(MicroPython 구현에 대한 WizFi250의 코드 사이즈는 별도의 포스팅으로 정리하도록 하겠다.)


MicroPython Project에 WICED Library/Source를 옮기는 것은 불가능하여, MicroPython Port 중에서 Minimal Port 소스들을 WICED ThreadX/NetXDuo Platform에 Migration하는 형태로 작업을 하였다.

컴파일 환경 구성이 매끄럽지는 않았지만, 어렵지 않게 작업은 완료 될 수 있었다.


기본적으로 MicroPython은 Python 3.x를 Base로 개발되었다.

Python 기본 문법과 간단한 문자열 함수나 수치 계산이 가능하고, WizFi250의 Peripheral pin 중에서 GPIO 하나를 작업하여, MicroPython 스크립트 상에서 LED On/Off 하는 것도 테스트 해 보았다.


Micro Python v1.3.10-166-gc832bde-dirty on 2015-03-16; minimal with unknown-cpu
Type "help()" for more information.
>>> 
>>> print('Hello MicroPython')
Hello MicroPython
>>> aaa='abcdABCD'
>>> aaa.upper()
'ABCDABCD'
>>> max(6,7,6,3,10)
10
>>> abs(-100)
100
>>> 9*9
81
>>> 81//9
9
>>> import wicedbd
>>> wicedbd.delay(1)
>>> led = wicedbd.LED(1)
>>> led.on()
>>> led.off()
>>> led.toggle()