Micro Python で組み込み Python@hktechnoHirotaka Kawata
@hktechno川田 裕貴 (かわた ひろたか)
● PyCon JP 2013-2014 Staff (Program Team)● 筑波大学 システム情報工学研究科
コンピュータサイエンス専攻○ 修士 1年
● Open Design Computer Project○ 2011 未踏ITなんとか スーパークリエイター○ http://open-arch.org/
Micro Python● Python for microcontrollers
○ マイコンで使える Python○ KICKSTARTER で 97,803 GBP (約1500万円) 獲得
● The pyboard○ Micro Python 用のマイコン基板
http://micropython.org/
面白そう
Micro Python● Python 3 互換の Python 処理系
○ マイコン向けに再実装 (CPython ではない)○ ライブラリも基本的なものは使える
● マイコン上で Python が動く○ Arduino のような手軽さ○ しかも Python で書ける○ Python 内でインラインアセンブラが使えたり... (!!)
● REPL も使える○ マイコン上でインタラクティブシェル
The pyboard● Micro Python board
○ STM32F4 (Cortex-M4)○ microSD slot○ microUSB○ Accelerometer○ 4 LED○ Switch…
● KICKSTARTER○ $20 (early-bird price)○ $24
vs Raspberry Pi● GPIO
○ Raspberry Pi はちょっと少なめ○ (Type B+ で少し増えました)
● Price○ 3940円...
● 開発が面倒くさい○ Raspberry Pi の Linux で開発する or SSH○ そもそもマイコンではない...
vs mruby思想の違い● mruby
○ 組み込み機器で C から Ruby を扱う○ ソフトウェアに組み込みもできる (Lua のような)○ 主に、バイトコンパイルしたバイナリを投入
● Micro Python○ Python で基本的に完結する○ マイコン、ホビー用途向け○ Python スクリプトを書き込む○ REPL でインタラクティブにも操作可能
しかし...● pyboard は現在入手不可能
○ KICKSTARTER の購入分は発送済み○ 次のロットを生産するらしい?○ どちらにしてもすぐには入手不可能...
● 予め登録してあった人の先行販売も...○ 手元に使えるカードがなくて決済失敗○ Out of stock! orz
諦めるのはまだ早い!
手軽に Micro Python● STM32F4 Discovery
○ ST Micro 純正の STM32F407 評価ボード○ 秋月電子通商で 1,750 円
● 機能○ 192KB RAM○ 1MB Flash○ LED x 4○ Accelerometer○ D-class AMP○ Microphone○ USB (mini + micro)
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 の方を使う。ただし電源供給されないので両方刺す。
接続・書き込み
● USB ストレージとして認識する○ boot.py: 起動時に実行される○ main.py: メインプログラム○ ソース (main.py) をコピーするだけで良い○ 自分で作ったモジュールも書き込み・利用できる
● REPL を立ち上げる○ USB 仮想シリアルポートも作られる
■ Linux の場合 /dev/ttyACM0○ 接続すると Micro Python REPL シェルが使える
pyb Module● pyboard を操作するモジュール
○ pyb.Pin○ pyb.LED○ pyb.Switch○ pyb.SPI○ pyb.I2C○ pyb.UART...○ http://micropython.org/doc/module/pyb/
● pyboard 向けだが...○ Discovery ボードでも一部は利用可能
Micro Python REPL● Python の REPL とほぼ同じ
○ インタラクティブにマイコンを操作できる○ デバッグに便利○ モジュールを書き込んでおけば、それも使える
● Ctrl-D で soft-reset○ main.py やモジュールを書き換えた時に使う
● Ctrl-C で interrupt○ main.py の実行を止める
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)
Switch● Switch で Callback が使える
def toggle():pyb.LED(1).toggle()pyb.delay(10)
sw = pyb.Switch()sw.callback(toggle)
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()
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
市販の LCD を使う # pyb.LCD は、pyboard 専用
● SC1602 シリーズ (定番のアレ)○ 秋月電子通商で売ってます○ バックライトなしであれば 500 円から
● Python で LCD ドライバを書いてみました○ https://github.com/techno/micropython_modules○ sc1602.py
LCD
いろいろ DEMO
Performance● (当たり前だけど) 結構遅い
○ Teensy 3.1 (96MHz ARM)○ C++ (Arduino like) とくらべて、約 100 倍遅い
○ https://github.com/micropython/micropython/wiki/Performance
● Arduino で十分な用途なら問題にならない○ Arduino Pro Mini (C++) から比べて4倍ぐらい○ せっかく速いクロック数は無駄になるが...
Inline Assembly
インラインアセンブラの例
@micropython.asm_thumbdef asm_add(r0, r1): add(r0, r0, r1)
Development Sprint● 14日 Development Sprint やります
○ http://pyconjp.connpass.com/event/8105/
● Micro Python Sprint○ 触ったことない人でも OK○ STM32F4 Discovery ボードを持ってくると Better
● やりたいこととか○ ボード搭載のD級アンプ・マイクのドライバ○ 他のボードへ移植
他のマイコンへの移植
● GR-SAKURA へ移植を試みた○ Renesas RX63N
● 進捗○ インタプリタは動いた○ print はできる○ まだ: pyb モジュール○ まだ: REPL
結論: まだSTM32以外に移植するのは大変そう興味があったら Sprint or Office hour で...
まとめ
● Micro Python なかなかよさそう○ ただし、まだまだ改善の余地がありそう○ 他のボードへの移植に期待
● Raspberry Pi 使ったほうが良さそうな用途○ ネットワーク○ Wi-Fi, Bluetooth○ USB…
ボードだけで完結するなら Micro Python!
Top Related