マイクロビット(m_14)モジュール micropython
module – micropython
thonny-microbitには「antigravity、array、audio、builtins、collections|ucollections、gc、love、machine、math、microbit、micropython、music、neopixel、os、radio、random、speech、sys、struct|ustruct、time|utime、this」のモジュールがあります。※microbitモジュールは既に記載しました。
(d-09)micropython-module
micropythonモジュールを読み込むと「const, opt_level, mem_info, qstr_info, stack_use, heap_lock, heap_unlock, kbd_intr」の関数が使えます。
(9-01)micropython.const(expr)
式が定数であることを宣言します。定数名がアンダースコアで始まっていれば不可視となります。
「const_d.py」として
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import micropython
CONST_X = micropython.const('abc') #定数を宣言
CONST_Y = micropython.const(2 * CONST_X)
# Thonny組込みのpythonの状態にしてmicrofs等でファイルをmicro:bitに送ります。
>>> microfs.put('const_d.py')
True
>>> microfs.ls()
['main.py', 'boot.py', 'const_d.py']
他のスクリプトで読み込んでもそのまま定数が使えます。(BBC:MicroPythonに切り替え)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from microbit import *
from const_d import * #モジュールを読み込む
display.scroll(CONST_X) #定数がそのまま使える
print(CONST_X)
print(CONST_Y)
実行結果
>>> %Run 1006_const.py
abc
abcabc
(9-02)micropython.opt_level([level])
※よくわかりません。
デフォルトの最適化レベルは通常レベル 0 です。
levelを指定した場合、後続のスクリプトのコンパイルレベルを設定して None を返します。
指定しない場合は、現在の最適化レベルを返します。
アサーション
レベル 0 では、アサーションステートメントが有効になり、バイトコードにコンパイルされます。
レベル 1 以上ではアサーションがコンパイルされません。
ビルトイン __debug__ 変数:
レベル 0 でこの変数が True に展開されます。
レベル 1 以上では False で展開されます。
ソースコード行番号
レベル 0, 1, 2 では行番号が格納され、例外が発生した行番号を報告することができます。
レベル 3 以上では行番号が格納されません。
>>> import micropython
>>> micropython.opt_level() # 指定しない場合は、現在の最適化レベルを返す
0 # 通常レベル 0
>>> micropython.opt_level(1) # 指定した場合は、レベルを設定してNone を返す
>>> micropython.opt_level()
1
>>> micropython.opt_level(0)
(9-03)micropython.mem_info([verbose])
現在使っているメモリに関する情報を表示します。 verbose を指定すると詳しい情報を表示します。
>>> micropython.mem_info()
stack: 516 out of 1800
GC: total: 10048, used: 7408, free: 2640
No. of 1-blocks: 165, 2-blocks: 63, max blk sz: 19, max free sz: 125
>>> micropython.mem_info(True)
stack: 524 out of 1800
GC: total: 10048, used: 3680, free: 6368
No. of 1-blocks: 67, 2-blocks: 31, max blk sz: 19, max free sz: 333
GC memory layout; from 200001f0:
00000: h=h==================h============h==================h=SSh=h=SSh
00400: =BB........hh..Shh=Sh=h========hh=======h=====....h==h===h......
(5 lines all free)
01c00: .......BDB...........h=Dh=SShSShh=ShShShh=ShS.SS.......h=====h==
02000: =hh=h=h=hSSSSh=h=h=hSh=hSh=h=hSSh=Sh=SSh=hShSh=ShSSh=========h=S
02400: Sh=h=SSSSh=hSS...............h=h=h=.................
Symbol Meaning
. free block
h head block
= tail block
m marked head block
T tuple
L list
D dict
F float
B byte code
M module
(9-04)micropython.qstr_info([verbose])
現在のところのインターンド文字列に関する情報を表示します。verbose を指定すると詳しい情報を表示します。
※よくわかりません。
>>> import micropython
>>>
>>> micropython.qstr_info()
qstr pool: n_pool=1, n_qstr=5, n_str_data_bytes=31, n_total_bytes=127
micropython.qstr_info(1)はエラーで表示できませんでした。
(9-04)micropython.stack_use()
現在使われているスタックのサイズを表す整数を返します。
>>> micropython.stack_use()
484
>>>
(9-06)micropython.heap_lock()
(9-07)micropython.heap_unlock()
ヒープをロックまたはロック解除します。ロックされているとメモリ割り当ては発生せず、ヒープを割り当てようとした場合は MemoryError が発生します。
heap_lock()、heap_unlock()どちらも同じようにMemoryErrorになり止まりませんでした。※よくわかりません。
>>> import micropython
>>> micropython.heap_unlock()
MemoryError:
>>> MemoryError:
>>> MemoryError:
>>> MemoryError:
>>> MemoryError:
>>>
========================= RESTART =========================
>>>
(9-08)micropython.kbd_intr(chr)
KeyboardInterrupt 例外を発生させる文字を設定します。
デフォルトでは、Ctrl-C(割り込み停止) に該当する 3 が設定されています。-1 を渡すと Ctrl-C が無効になります。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from microbit import *
import micropython
micropython.kbd_intr(-1) #Ctrl-Cを無効
while True:
for i in range(10):
print(i)
if i>5:
micropython.kbd_intr(3) #Ctrl-Cを有効
sleep(1000)
実行結果
>>> %Run 1005_test_01.py
0
1 # i>5にならないとCtrl-Cが効かない。
2
3
4
5
6
Traceback (most recent call last):
File "C:\Py_B551\02tes\1005_test_01.py", line 13, in
KeyboardInterrupt:
>>>
– micro:bit V2 –
(9-09)micropython.schedule(func, arg) -v2
関数 func が「非常にすぐに」実行されるようにスケジュールします。
この関数には、単一の引数として値 arg が渡されます。
コールバックのような感じでしょうか?。素人の私には使い方がよくわかりません。
from microbit import *
import micropython
def func(arg): # Scheduled
print(arg,list(arg))
def cb1(arg):
micropython.schedule(func, arg)
print(arg)
cb1('abc')
print('END')
実行結果
>>> %Run -c $EDITOR_CONTENT a
abc
END
abc ['a', 'b', 'c'] # func 遅れ?
>>>
まとめ
thonny-microbitのモジュール micropython について記載しました。