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

Micro Python で組み込み Python

Nov 29, 2014

Download

Engineering

Hirotaka Kawata

Micro Python を使って組み込み Python プログラミングを行う方法を紹介
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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