- https://docs.m5stack.com/#/en/quick_start/m5stickv/m5stickv_quick_start
- https://maixpy.sipeed.com/en/
- https://github.com/sipeed/MaixPy/tree/master/components/micropython/port/src/omv/img
- https://docs.openmv.io/library/omv.image.html
M5Stack - A series of modular stackable development devicesのページからダウンロードできるEasyLoaderを使ってファームウェアをアップデートできる。
2019/8/13現在リリースされている、EasyLoader_M5StickV_0813.exeを使うと、MaixPy IDEとの連携が強化された M5StickV_Firmware_0813.kfpkg が書き込まれる。
M5StickVとPCをUSBケーブルで接続してEasyLoaderを起動後、M5StickVが接続されているポートを選択し、Burnボタンを押すと、ファームウェアが書き込まれる。
このドキュメントは、EasyLoaderで書き込まれる M5StickV_Firmware_0813.kfpkg を使っていることを想定している。
開発版のファームウェアを利用したい場合は、kflash_gui を使ってファームウェアアップデートする。
まず、M5StickVをPCに接続して、kflash_guiを起動後、M5StickVを認識しているシリアルポートを「Port」で指定する。 次に「Open File」ボタンを押して書き換えたいファームウェアのファイルを選択後、「Download」ボタンを押すとファームウェアの書き換えが実行される。
開発版のファームウェアのダウンロードはこちら。
頻繁にリリースされているので、変更点はcommit logなどを参照のこと。
kflash_guiを使ってファームウェアアップデートするとflashにあるファイルが読み書きできなくなることがある。 その場合はkflash_guiを使って以下のkfpkgを書き込み、ファイルをクリアする。
販売時初期状態で書き込まれているのは、以下URLからダウンロードできる m5stickV_Firmware_0630Fixed.kfpkg
Pythonスクリプトを書いてすぐに動かしてみたい場合は、MaixPy IDEを使うのがお手軽。 MaixPyを使うと、PC上のテキストエディタで編集したプログラムをすぐにM5StickV上で実行することができる。
- http://dl.sipeed.com/MAIX/MaixPy/ide/
- 今回は、maixpy-ide-windows-0.2.4.exe を使用
まず、MaixPy IDEを起動したら、ボード設定でM5StickVを選択しておく。
次に、テキストエディタに適当にプログラムを書く。 とりあえず、ここではMaixPy IDEを起動した直後に記入されている初期状態のスクリプトをそのまま使うことにする。
M5StickVをPCに接続している状態で、 ウインドウ左下に表示されている接続ボタンを押す。
ポートを選択するダイアログが表示されるので、M5StickVが接続されているポートを選択する
M5StickVとMaixPy IDEとの接続が確立したあと、スクリプトの実行ボタンを押すと、テキストエディタに書かれているスクリプトがM5StickVへ転送&実行される。
実行中は、カメラの画像がMaixPy IDEに表示される。
ウインドウ左下の停止ボタンを押すと実行中のスクリプトは停止する。
(2019/8/13コメント : 20190813版ファームウェアでMaixPy IDE連携が強化されたので、それに合わせて文章を修正)
uPyLoaderは、MaixPy環境にファイルをアップロードするためのツール。
- https://github.com/BetaRavener/uPyLoader/releases
- 今回は、0.1.4のuPyLoader-win.exeを使用
まず、uPyLoader-win.exeを起動する前に他のプログラムでM5StickVのCOMポートを開いている場合は、あらかじめ閉じておくこと。MaixPy IDEの場合はターミナルウインドウを閉じておくこと。
uPyLoader-win.exeを起動したら次の手順でM5StickVへ接続する
- uPyLoader-win.exeの「Connection」の項目で、M5StickVが接続されているCOMポートを選択する
- M5StickVのAボタンを押しっぱなしにする
- uPyLoader-win.exeの「Connect」ボタンを押して、M5StickVへ接続する
- (Connectボタンを押した瞬間にM5StickVのリセットがかかるので、この時にAボタンを押しっぱなしにしてスクリプトを実行しないようにする)
接続に成功すると、初回接続時に「Transfer scripts for UART are either missing or have wrong version...」というダイアログが表示される。
ダイアログが表示される場合は、メニューから「File→Init transfer files」を選択して、uPyLoader-win.exeのファイル転送に必要なファイルを転送する。 __upload.pyと__download.pyがM5StickV上に転送できれば準備完了。
PC上のファイルをM5StickV上へ転送する場合は、まずメニューの「File→Navigate」を選択してディレクトリを選択する。
ディレクトリが選択されると左側の「Local」に選択したディレクトリ内にあるファイル一覧が表示される。 転送するファイルを選択し、「Transfer」ボタンを押すとファイルがM5StickV上へ転送される。
電源ボタンは、側面ボタンコネクタに近い方
- 電源ON : 電源ボタンを2秒長押し
- 電源OFF : 電源ボタン6秒長押し
USB接続していると電源が切れないので要注意…
横240, 縦135
- https://github.com/sipeed/MaixPy/blob/master/projects/maixpy_m5stickv/config_defaults.mk#L19 より
カメラのキャプチャ画像をそのまま表示していると、画像の一部分しか表示しないため、妙に画角の狭い画がLCD画面に表示されてしまう。 適当に、リサイズしてから画面に表示するのがよいと思われる。
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA) # キャプチャ解像度として 320x240 を設定
.
.
.
while(True):
img = sensor.snapshot()
tmp = img.resize(180, 135) # LCD画面内に収まるようにリサイズ
lcd.display(tmp)
電源ON時に実行されるプログラムの優先順位は次の通り。
- (1) microSDが差し込まれていてそこにboot.pyがある場合は、/sd/boot.pyが起動される。
- (2) 本体flashにboot.pyがある場合は、/flash/boot.pyが起動される。
- (3) 本体flashにboot.pyがない場合は、デフォルトのboot.pyがflashに書き込まれ、/flash/boot.pyが起動される
flashにboot.pyがない場合、boot.pyが書き込まれる処理は次の部分。
3で書き込まれる内容は、変数boot_pyに格納されている文字列。
3のスクリプトは、認識した顔ROIに矩形を描画するサンプル。 起動時にAボタン(本体前面にある大きなボタン)を押しっぱなしにしておくと、プログラムが終了するように作られている。
M5StickVをPCに接続すると、FTDIのシリアルデバイスとして認識される。 認識されたCOMポートをputtyなどで開くと、MaixPyのREPL環境にアクセスできる。 (8n1, 115200bps)
キーバインドは次の通り
- ctrl + c : 実行中のスクリプトを止める
- ctrl + d : ソフトリセット (プロンプトが>>>の時に入力)
help()でヘルプ表示。 help("modules")で利用可能なモジュール一覧表示。 help("os")などモジュール名を指定するとモジュールのヘルプ表示。
os.listdir()を使う。
MaixPyのREPL環境にはMicropython-Editorが用意されている。 puttyとかのVT100ターミナルで使える。
- 起動はpye("ファイル名.py")
- 終了はctrl+Q
- その他のキーバインドはMicropython-Editorを参照。
ただし、プログラムを書く場合はMaixPy IDE、ファイルをアップロードする場合はuPyLoaderを使うのが楽。
REPL環境にはraw REPLモードというMaixPy IDEなどから利用する場合に使うコントロールコードが用意されているが、通常は人間がつかわなくてもOK。
- ctrl + a : raw REPL modeへ移行
- ctrl + b : raw REPL modeから通常のREPLモードへ戻る
- ctrl + d : raw REPL modeで入力された文字列をスクリプトとして実行する
MaixPy IDEの初期状態のスクリプトは、次のように修正して使うのが吉
import sensor, image, time, lcd
from Maix import GPIO
from fpioa_manager import *
lcd.init()
lcd.rotate(2) # 画面の向きとカメラの向きをそろえておく
fm.register(board_info.BUTTON_A, fm.fpioa.GPIO1) # Aボタンを使う設定
but_a=GPIO(GPIO.GPIO1, GPIO.IN, GPIO.PULL_UP) # Aボタンのプルアップ設定
if but_a.value() == 0:
sys.exit() # 起動時にAボタンが押されていたらスクリプトを停止する
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time = 2000)
clock = time.clock()
while(True):
clock.tick()
img = sensor.snapshot()
lcd.display(img)
print(clock.fps())
修正ポイントは次の2点
- 画面の向きとカメラの向きをそろえておく (lcd.rotate(2)の設定)
- 起動時にAボタンが押されていたら、スクリプトを停止するようにする (uPyLoader対策)