Ubuntu Weekly Recipe

第587回 RISC-Vベースの“AIoTカメラ”であるM5StickVをUbuntuで使う

この記事を読むのに必要な時間:およそ 7 分

シリアルコンソールによるデバッグ

M5StickVではUSBケーブル越しにシリアルコンソールを取得可能です。Ubuntuならminicomやgkermitなどいくつかのシリアル通信ソフトウェアがありますが,今回はGNU Screenを使うことにします。

$ sudo apt install screen

screenをインストールしたら,M5StickVをPCに接続し,シリアルコンソールを表示させます。

$ screen /dev/ttyUSB0 115200
[MAIXPY]Pll0:freq:832000000
[MAIXPY]Pll1:freq:398666666
[MAIXPY]Pll2:freq:45066666
[MAIXPY]cpu:freq:416000000
[MAIXPY]kpu:freq:398666666
[MAIXPY]Flash:0xc8:0x17
open second core...
gc heap=0x8016fbe0-0x801efbe0
[MaixPy] init end

 __  __              _____  __   __  _____   __     __
|  \/  |     /\     |_   _| \ \ / / |  __ \  \ \   / /
| \  / |    /  \      | |    \ V /  | |__) |  \ \_/ /
| |\/| |   / /\ \     | |     > <   |  ___/    \   /
| |  | |  / ____ \   _| |_   / . \  | |         | |
|_|  |_| /_/    \_\ |_____| /_/ \_\ |_|         |_|

M5StickV by M5Stack : https://m5stack.com/
M5StickV Wiki       : https://docs.m5stack.com
Co-op by Sipeed     : https://www.sipeed.com

[MAIXPY]: result = 0
[MAIXPY]: numchannels = 1
[MAIXPY]: samplerate = 44100
[MAIXPY]: byterate = 88200
[MAIXPY]: blockalign = 2
[MAIXPY]: bitspersample = 16
[MAIXPY]: datasize = 158760
init i2c2
[MAIXPY]: find ov7740

起動状態でscreenを接続すると,一旦リセットがかかるようです。結果として,screenの画面にはM5StickVの起動ログが表示されています。MaixPyはK210向けにMicroPythonを移植したものです。アプリケーションがPythonスクリプトであることからもわかるように,M5StickVではFreeRTOS上でPythonが動いています。

標準のアプリケーションの場合,⁠Ctrl-C」を入力するとPythonの対話的なインタプリタ(REPL)に移行します。

MicroPython v0.4.0-46-gf46e4c423-dirty on 2019-08-30; M5StickV with Kendryte K210
Type "help()" for more information.
>>>
>>>

あとは普通にPythonのREPLを使う感覚で,トライアンドエラーができます。help()と入力すると基本的な使い方が表示されます。特にソフトリセットがかかる「Ctrl-D」はよく使うことになるはずです。

>>> help()
Welcome to MicroPython on the Sipeed Maix!

For generic online docs please visit https://maixpy.sipeed.com

Official website : http://www.sipeed.com


Control commands:
  CTRL-A        -- on a blank line, enter raw REPL mode
  CTRL-B        -- on a blank line, enter normal REPL mode
  CTRL-C        -- interrupt a running program
  CTRL-D        -- on a blank line, do a soft reset of the board
  CTRL-E        -- on a blank line, enter paste mode

For further help on a specific object, type help(obj)
For a list of available modules, type help('modules')

他にもhelp(モジュール名)でモジュールのドキュメントを表示できます。

>>> help(lcd)
object <module 'lcd'> is of type module
  __name__ -- lcd
  init -- <function>
  deinit -- <function>
  width -- <function>
  height -- <function>
  type -- <function>
  freq -- <function>
  set_backlight -- <function>
  get_backlight -- <function>
  display -- <function>
  clear -- <function>
  direction -- <function>
  rotation -- <function>
  mirror -- <function>
  draw_string -- <function>
  XY_RLUD -- 0
  YX_RLUD -- 32
  XY_LRUD -- 64
  YX_LRUD -- 96
  XY_RLDU -- 128
  YX_RLDU -- 160
  XY_LRDU -- 192
  YX_LRDU -- 224
  BLACK -- 0
  NAVY -- 15
  DARKGREEN -- 992
  DARKCYAN -- 1007
  MAROON -- 30720
  PURPLE -- 30735
  OLIVE -- 31712
  LIGHTGREY -- 50712
  DARKGREY -- 31727
  BLUE -- 31
  GREEN -- 2016
  CYAN -- 2047
  RED -- 63488
  MAGENTA -- 63519
  YELLOW -- 65504
  WHITE -- 65535
  ORANGE -- 64800
  GREENYELLOW -- 45029
  PINK -- 63519

他にも各種モジュールの使い方はMaixPy「Modules/Libs」などにまとまっています。

とりあえずディスプレイに何か文字列を表示させたいなら,次のように実行してください。

>>> import lcd
>>> lcd.draw_string(0, 0, "Test", lcd.WHITE, lcd.BLACK)

MicroPythonそのものはほぼPythonそのままです。Ubuntuに標準でインストールされているPython実装(CPython)との違いは,MicroPythonのドキュメントにまとまっていますので,そちらを参照してください。

さらにMircopython-Editorが搭載されているので,microSDカード上のファイルの編集も可能です。

>>> os.listdir("/")
['flash', 'sd']
>>> os.getcwd()
'/sd'
>>> os.listdir()
['boot.py']
>>> pye("boot.py")

キーバインドはMicropython-Editorのhelp.txtに詳細な記述がありますが,まずは「Ctrl-z」でアンドゥ,⁠Ctrl-s」で保存,⁠Ctrl-q」もしくは「Alt-q」で終了ということだけ覚えておけばなんとかなるでしょう。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。