¥È¥Ã¥× °ìÍ÷ ¸¡º÷ ¥Ø¥ë¥× RSS ¥í¥°¥¤¥ó

MicroPython ¤ÇÍ·¤Ö(2014/9)¤ÎÊѹ¹ÅÀ

  • Äɲ䵤줿¹Ô¤Ï¤³¤Î¤è¤¦¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
  • ºï½ü¤µ¤ì¤¿¹Ô¤Ï¤³¤Î¤è¤¦¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
{{category ÅŻҹ©ºî}}

!!!MicroPython ¤ÇÍ·¤Ö(2014/9)

*´û¸¤ÎÁȤ߹þ¤ß Python ¤È°ã¤¤¡¢¥Þ¥¤¥³¥ó¾å¤Ç¥¹¥¯¥ê¥×¥È¤Î¥³¥ó¥Ñ¥¤¥ë¤Þ¤Ç¤ä¤Ã¤Æ¤·¤Þ¤¦¤é¤·¤¤¥¹¥°¥ì¥â¥Î¡£

!!ºòº£ÏÃÂê
http://www.slideshare.net/hktechno/micro-python-python

¥á¥¤¥ó¥µ¥¤¥È¤Ï¤³¤³
http://micropython.org/

¥½¡¼¥¹¤½¤Î¤Û¤«¤Ï¤³¤³
https://github.com/micropython

!!°Â²Á¤Ê Cortex-M4 ɾ²Á´ðÈÄ(STM32F4 Discovery)¤ÇÆ°ºî¤¹¤ë¢ª
https://github.com/micropython/micropython/wiki/Board-STM32F407-Discovery

!!!ɬÍפʴĶ­¡Ê@Windows)
+MinGW,msys ¤ò¥¤¥ó¥¹¥È¡¼¥ë (Unix ¼° make ¤Î¤¿¤á¡£Cygwin ¤ä¾¤Î¸ß´¹ make ¤Ç¤â¤è¤¤¤È»×¤ï¤ì¤ë¡Ë
+CPython ¤ò¥¤¥ó¥¹¥È¡¼¥ë¡ÊÀ¸À®¥¹¥¯¥ê¥×¥ÈÍÑ¡Ë
+git ¤ò¥¤¥ó¥¹¥È¡¼¥ë¡Ê¤Ê¤¯¤Æ¤â¥Ó¥ë¥É¤Ç¤­¤ë¤¬¡¢¥Ð¡¼¥¸¥ç¥óÀ¸À®¤Ë»È¤Ã¤Æ¤¤¤ë¡Ë
+arm ¥Ä¡¼¥ë¥Á¥§¥¤¥ó¤ò  ¥¤¥ó¥¹¥È¡¼¥ë

¿ä¾©¥Ä¡¼¥ë¥Á¥§¥¤¥ó¤Ï¤³¤³
https://launchpad.net/gcc-arm-embedded

!!!STM32F4 Discovery ÍѤ˥ӥë¥É¤¹¤ë¼ê½ç¡Ê@Windows)

+arm ¥Ä¡¼¥ë¥Á¥§¥¤¥ó¤Î bin ¥Õ¥©¥ë¥À¤Ë¤¢¤ë gccvar.bat ¤ò²þÊѤ·¤Æ¡¢CPython(python.exe) ¤È make ¤Ë¥Ñ¥¹¤òÄ̤¹
+²þÊѤ·¤¿gccvar.bat ¤Ç¥·¥§¥ë¤òµ¯Æ° 
+micropython-master ¤òŸ³«¤·¤¿¥Õ¥©¥ë¥À¤Î²¼¤Ë¤¢¤ë stmhal ¥Õ¥©¥ë¥À¤Ë°ÜÆ°
+make BOARD=(¥Ü¡¼¥É̾) ¤Ç¥Ó¥ë¥É¤Ç¤­¤ë.
 make BOARD=STM32F4DISC
¤Ç STM32F4 Discovery ÍÑ¥¤¥á¡¼¥¸¤¬¤Ç¤­¤ë

!!!µ¤¤Å¤¤¤¿ÅÀ(2014/9/27 »þÅÀ)
+Windows ¤Ç USB-CDC ¤Î±þÅú¤¬»þÀޤʤ¯¤Ê¤ë¡£Ctrl-D ¤Ï¸ú¤¯¤Î¤Ç¡¢ÊÒÆ»¤Ä¤Þ¤ë¡© Mac OS X ¤Ç¤ÏÌäÂê¤Ê¤¯Æ°ºî¤¹¤ë¡£

¤ª¤½¤é¤¯¤³¤ÎÌäÂê
https://github.com/micropython/micropython/issues/587

!!!¤È¤ê¤¢¤¨¤º TTL-Serial ¤ò¥³¥ó¥½¡¼¥ë¤Ë¤¹¤ë(STM32F4DISC, Ver1.3.3)

MicroPython ¥µ¥ó¥×¥ë½¸
https://github.com/dhylands/upy-examples
¤Ë¤¢¤ë¡¢boot.py ¤ò USB-MSC ¥É¥é¥¤¥Ö¤Ë¾å½ñ¤­¥³¥Ô¡¼¤·¤Æ¡¢

 def init():
     if False:¡¡¡ã¡Ý¡¡¤³¤³¤ò False ¤«¤é True ¤Ë
         uart = pyb.UART(6,115200)
         pyb.repl_uart(uart)
         print("REPL is also on UART 6 (Y1=Tx Y2=Rx)")

¾åµ­¤Î²Õ½ê¤ò False ¤«¤é True ¤Ë¤·¤Æ¤ª¤¯¤È¡¢
UART6 ¤¬¥³¥ó¥½¡¼¥ë¤È¤·¤Æ»È¤¨¤Þ¤¹¡£

STM32F4DISC ¤Ç¤Ï¡¢UART6 ¤Ï PC6(TX),PC7(RX) ¤È¤Ê¤Ã¤Æ¤¤¤Æ¡¢
USB ¥³¥Í¥¯¥¿(STM32 ËÜÂΤÎ)¤Î±¦¡¢GND ¤Î¤¹¤°¤½¤Ð¤Ë½Ð¤Æ¤¤¤ë¤Î¤Ç¡¢
¤³¤³¤Ë TTL-Serial ¥É¥ó¥°¥ë¤òÀܳ¤¹¤ë¤È¥³¥ó¥½¡¼¥ë¤È¤·¤Æ»È¤¨¤Þ¤¹¡£

!!!¤È¤ê¤¢¤¨¤º builtin ¥â¥¸¥å¡¼¥ë¤ò¤Ç¤Ã¤Á¤¢¤²¤ë¤Ë¤Ï(ver 1.3.3)

¤Þ¤À¤Þ¤À¥À¥¤¥Ê¥ß¥Ã¥¯¤ËÊѹ¹¤¬¤¢¤ë¤È»×¤¤¤Þ¤¹¤Î¤Ç¥á¥âÄøÅ٤ˡ£

!!£±¡Ë¥â¥¸¥å¡¼¥ë¥Õ¥¡¥¤¥ë¤ò½ñ¤¤¤ÆÊÌ¥Õ¥©¥ë¥À¤Ë¤Þ¤È¤á¤ë

¥â¥¸¥å¡¼¥ë¥Õ¥¡¥¤¥ë¤Î¥µ¥ó¥×¥ë¤Ï¡¢extmod ¤Î¤â¤Î¤¬¤ï¤«¤ê¤ä¤¹¤¤¤È»×¤¤¤Þ¤¹¡£
¤È¤ê¤¢¤¨¤ºÀâÌÀÍѤΥÀ¥ß¡¼¥â¥¸¥å¡¼¥ë {{ref testmod.zip}} ¤ò $(TOP)/testmod ¤ËÃÖ¤­¤Þ¤¹¡£

!!£²¡Ë¥Ø¥Ã¥À¤È¥·¥ó¥Ü¥ë¤È¤Î·ë¹ç¤ò½ñ¤¯

¡ã¥×¥é¥Ã¥È¥Õ¥©¡¼¥àÈó°Í¸¥â¥¸¥å¡¼¥ë¤Î¾ì¹ç¡ä
¡úpy/builtin.h ¤Î¤½¤ì¤Ã¤Ý¤¤¾ì½ê¤Ë
 // extmod modules
 extern const mp_obj_module_t mp_module_test;

¡úpy/builtintables.c ¤Î¤½¤ì¤Ã¤Ý¤¤¾ì½ê¤Ë
 // extmod modules
 #if MICROPY_PY_TESTMOD
     { MP_OBJ_NEW_QSTR(MP_QSTR_testmod),(mp_obj_t)&mp_module_test },
 #endif

¡ã¥×¥é¥Ã¥È¥Õ¥©¡¼¥à°Í¸¤Î¾ì¹ç¡ä
¡ústmhal/mpconfigport.h ¤Î¤½¤ì¤Ã¤Ý¤¤¾ì½ê¤Ë
 extern const struct _mp_obj_module_t mp_module_test;

 #define MICROPY_PORT_BUILTIN_MODULES \
 ¡ÊÃæά¡Ë
     { MP_OBJ_NEW_QSTR(MP_QSTR_testmod), (mp_obj_t)&mp_module_test }, \

!!3)Makefile ¤Î½¤Àµ

¤½¤ì¤Ã¤Ý¤¤¾ì½ê¤òõ¤·¤Æ

¡ú¥·¥ó¥Ü¥ë¡¢¥Ï¥Ã¥·¥å(qstr)´ØÏ¢¤ÎÁÞÆþ
 # qstr definitions (must come before including py.mk)
 QSTR_DEFS = qstrdefsport.h $(BUILD)/pins_qstr.h ../testmod/testqstr.h

¡ú¥â¥¸¥å¡¼¥ë¤Î¥Ó¥ë¥ÉÀßÄê¤òÁÞÆþ
 # for test module
 MICROPY_PY_TESTMOD = 1¡¡¢«¤³¤ì¤Ï¤¤¤ó¤Á¤­¡£
 ifeq ($(MICROPY_PY_TESTMOD),1)
 TESTMOD_DIR=testmod
 INC += -I$(TOP)/testmod
 CFLAGS_MOD += -DMICROPY_PY_TESTMOD=1
 SRC_MOD += $(addprefix $(TESTMOD_DIR)/,\
      modtest.c \
      )
 endif

!!£´¡Ë»î¤·¤Æ¤ß¤ë

 Micro Python inchiki on 2014-10-05; F4DISC with STM32F407
 Type "help()" for more information.
 >>> import testmod
 >>> dir(testmod)
 ['__name__', 'hello1']
 >>> testmod.hello1([1,2,3])
 '[1, 2, 3]'
 >>>

!!!TI ¤Î CC3000 WLAN ¥â¥¸¥å¡¼¥ë¤ò»È¤Ã¤Æ¤ß¤ë(ver 1.3.3 , 2014/10/12)

¡¦¥Ó¥ë¥É

 make V=1 BOARD=STM32F4DISC MICROPY_PY_CC3K=1

¡¦¤³¤ó¤Ê´¶¤¸¤Ç¤¹

 >>> import network
 
 >>> dir(network)
 ['__name__', 'CC3k', 'route']
 
 >>> dir(network.CC3k)
 ['connect', 'disconnect', 'is_connected', 'ifconfig', 'patch_version', 'patch_program', 'WEP', 'WPA', 'WPA2']
 
 ### CC3k(spi, pin_cs, pin_en, pin_irq)
 ### B13=SCK, B14=MISO, B15=MOSI
 >>> a = network.CC3k(pyb.SPI(2), pyb.Pin.cpu.A15,  pyb.Pin.cpu.B10, pyb.Pin.cpu.B11)
 
 #¤Ê¤¼¤« E15 ¤Ç¤Ï¥À¥á
 #>>> a = network.CC3k(pyb.SPI(2), pyb.Pin.cpu.E15,  pyb.Pin.cpu.B10, #pyb.Pin.cpu.B11)
 
 >>> dir(a)
 ['connect', 'disconnect', 'is_connected', 'ifconfig', 'patch_version', 'patch_program', 'WEP', 'WPA', 'WPA2']
 
 >>> a.patch_version()
 (1, 24)
 
 >>> a.is_connected()
 False 
 
 >>> a.connect('SSID','password')
 
 >>> a.is_connected()
 True
 
 >>> a.ifconfig()
 IP:192.168.1.16
 Mask:255.255.255.0
 GW:192.168.1.1
 DHCP:192.168.1.1
 DNS:192.168.1.1
 MAC:ho:ge:ho:ge:fu:ga
 SSID: SSID
 
 >>>