26
Micro Python 組み込み Python @hktechno Hirotaka Kawata

Micro Python で組み込み Python

Embed Size (px)

DESCRIPTION

Micro Python を使って組み込み Python プログラミングを行う方法を紹介

Citation preview

Page 1: Micro Python で組み込み Python

Micro Python で組み込み Python@hktechnoHirotaka Kawata

Page 2: Micro Python で組み込み Python

@hktechno川田 裕貴 (かわた ひろたか)

● PyCon JP 2013-2014 Staff (Program Team)● 筑波大学 システム情報工学研究科

コンピュータサイエンス専攻○ 修士 1年

● Open Design Computer Project○ 2011 未踏ITなんとか スーパークリエイター○ http://open-arch.org/

Page 3: Micro Python で組み込み Python

Micro Python● Python for microcontrollers

○ マイコンで使える Python○ KICKSTARTER で 97,803 GBP (約1500万円) 獲得

● The pyboard○ Micro Python 用のマイコン基板

http://micropython.org/

面白そう

Page 4: Micro Python で組み込み Python

Micro Python● Python 3 互換の Python 処理系

○ マイコン向けに再実装 (CPython ではない)○ ライブラリも基本的なものは使える

● マイコン上で Python が動く○ Arduino のような手軽さ○ しかも Python で書ける○ Python 内でインラインアセンブラが使えたり... (!!)

● REPL も使える○ マイコン上でインタラクティブシェル

Page 5: Micro Python で組み込み Python

The pyboard● Micro Python board

○ STM32F4 (Cortex-M4)○ microSD slot○ microUSB○ Accelerometer○ 4 LED○ Switch…

● KICKSTARTER○ $20 (early-bird price)○ $24

Page 6: Micro Python で組み込み Python

vs Raspberry Pi● GPIO

○ Raspberry Pi はちょっと少なめ○ (Type B+ で少し増えました)

● Price○ 3940円...

● 開発が面倒くさい○ Raspberry Pi の Linux で開発する or SSH○ そもそもマイコンではない...

Page 7: Micro Python で組み込み Python

vs mruby思想の違い● mruby

○ 組み込み機器で C から Ruby を扱う○ ソフトウェアに組み込みもできる (Lua のような)○ 主に、バイトコンパイルしたバイナリを投入

● Micro Python○ Python で基本的に完結する○ マイコン、ホビー用途向け○ Python スクリプトを書き込む○ REPL でインタラクティブにも操作可能

Page 8: Micro Python で組み込み Python

しかし...● pyboard は現在入手不可能

○ KICKSTARTER の購入分は発送済み○ 次のロットを生産するらしい?○ どちらにしてもすぐには入手不可能...

● 予め登録してあった人の先行販売も...○ 手元に使えるカードがなくて決済失敗○ Out of stock! orz

Page 9: Micro Python で組み込み Python

諦めるのはまだ早い!

Page 10: Micro Python で組み込み Python

手軽に Micro Python● STM32F4 Discovery

○ ST Micro 純正の STM32F407 評価ボード○ 秋月電子通商で 1,750 円

● 機能○ 192KB RAM○ 1MB Flash○ LED x 4○ Accelerometer○ D-class AMP○ Microphone○ USB (mini + micro)

Page 11: Micro Python で組み込み Python

STM32F4 Disvoery 準備

● Micro Python セットアップ方法○ https://github.

com/micropython/micropython/wiki/Board-STM32F407-Discovery

$ cd stmhal$ make BOARD=STM32F4DISC

● ファームウェアを書き換える必要がある○ BOOT0 - Vdd をショート

■ 裏側のジャンパを使うとよい (JP2, JP3)○ DFU (dfu-util) で build/flash.dfu を書き込み

■ microUSB の方を使う。ただし電源供給されないので両方刺す。

Page 12: Micro Python で組み込み Python

接続・書き込み

● USB ストレージとして認識する○ boot.py: 起動時に実行される○ main.py: メインプログラム○ ソース (main.py) をコピーするだけで良い○ 自分で作ったモジュールも書き込み・利用できる

● REPL を立ち上げる○ USB 仮想シリアルポートも作られる

■ Linux の場合 /dev/ttyACM0○ 接続すると Micro Python REPL シェルが使える

Page 13: Micro Python で組み込み Python

pyb Module● pyboard を操作するモジュール

○ pyb.Pin○ pyb.LED○ pyb.Switch○ pyb.SPI○ pyb.I2C○ pyb.UART...○ http://micropython.org/doc/module/pyb/

● pyboard 向けだが...○ Discovery ボードでも一部は利用可能

Page 14: Micro Python で組み込み Python

Micro Python REPL● Python の REPL とほぼ同じ

○ インタラクティブにマイコンを操作できる○ デバッグに便利○ モジュールを書き込んでおけば、それも使える

● Ctrl-D で soft-reset○ main.py やモジュールを書き換えた時に使う

● Ctrl-C で interrupt○ main.py の実行を止める

Page 15: Micro Python で組み込み Python

LED ON / OFF● とりあえず L チカ

led = pyb.LED(1)

while True:led.off()pyb.delay(500)led.on()pyb.delay(500)

これでもよい

led = pyb.LED(1)

while True:led.toggle()pyb.delay(500)

Page 16: Micro Python で組み込み Python

Switch● Switch で Callback が使える

def toggle():pyb.LED(1).toggle()pyb.delay(10)

sw = pyb.Switch()sw.callback(toggle)

Page 17: Micro Python で組み込み Python

GPIO● pyb.Pin を使う

pin = pyb.Pin(pyb.Pin.board.PD2, pyb.Pin.OUT_PP)pin.high()pin.low()

pin_value = pin.value()pin.value(False) # => pin.low()

Page 18: Micro Python で組み込み Python

STM32F4DISC STAccel● 2種類の加速度センサー

○ ボードのロットによって違う○ LIS302DL (古い)○ LIS3DSH (新しい, 高機能)

● staccel.py : STAccel # pyb.Accel は pyboard 専用

○ 手軽に加速度センサを扱えるモジュール○ stmhal/boards/STM32F4DISC/staccel.py

○ LIS3DSH 対応パッチを投げて merge された○ https://github.com/micropython/micropython/pull/852

Page 19: Micro Python で組み込み Python

市販の LCD を使う # pyb.LCD は、pyboard 専用

● SC1602 シリーズ (定番のアレ)○ 秋月電子通商で売ってます○ バックライトなしであれば 500 円から

● Python で LCD ドライバを書いてみました○ https://github.com/techno/micropython_modules○ sc1602.py

LCD

Page 20: Micro Python で組み込み Python

いろいろ DEMO

Page 21: Micro Python で組み込み Python

Performance● (当たり前だけど) 結構遅い

○ Teensy 3.1 (96MHz ARM)○ C++ (Arduino like) とくらべて、約 100 倍遅い

○ https://github.com/micropython/micropython/wiki/Performance

● Arduino で十分な用途なら問題にならない○ Arduino Pro Mini (C++) から比べて4倍ぐらい○ せっかく速いクロック数は無駄になるが...

Page 22: Micro Python で組み込み Python

Inline Assembly

インラインアセンブラの例

@micropython.asm_thumbdef asm_add(r0, r1): add(r0, r0, r1)

Page 23: Micro Python で組み込み Python

Development Sprint● 14日 Development Sprint やります

○ http://pyconjp.connpass.com/event/8105/

● Micro Python Sprint○ 触ったことない人でも OK○ STM32F4 Discovery ボードを持ってくると Better

● やりたいこととか○ ボード搭載のD級アンプ・マイクのドライバ○ 他のボードへ移植

Page 24: Micro Python で組み込み Python

他のマイコンへの移植

● GR-SAKURA へ移植を試みた○ Renesas RX63N

● 進捗○ インタプリタは動いた○ print はできる○ まだ: pyb モジュール○ まだ: REPL

結論: まだSTM32以外に移植するのは大変そう興味があったら Sprint or Office hour で...

Page 25: Micro Python で組み込み Python

まとめ

● Micro Python なかなかよさそう○ ただし、まだまだ改善の余地がありそう○ 他のボードへの移植に期待

● Raspberry Pi 使ったほうが良さそうな用途○ ネットワーク○ Wi-Fi, Bluetooth○ USB…

ボードだけで完結するなら Micro Python!

Page 26: Micro Python で組み込み Python