マイクロビット(m_18)モジュール struct |ustruct time | utime
module – struct |ustruct time | utime
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」のモジュールがあります。
(d-16)ustruct|struct
ustruct、またはstructでインポートできます。
モジュールを読み込むと「calcsize, pack, pack_into, unpack, unpack_from」が使えるようになります。※詳細はPythonのドキュメントサイトなどを参照してください。
(16-01)ustruct.pack(fmt,v1,v2…)
書式文字列 fmt を指定して bytes 型に変換します。
(16-02)ustruct.unpack(fmt,buffer)
buffer を、書式文字列 fmt に従ってアンパックします。
>>> import ustruct
>>> a=1
>>> b='ABC'
>>> c=5
>>> fmt='h3sh' # 2byte整数、3byte文字、2byte整数
>>> d=ustruct.pack(fmt,a,b,c) # fmtの形式でbytes型に変換
>>> d
b'\x01\x00ABC\x00\x05\x00'
>>> ustruct.unpack(fmt,d) # fmtの形式で元に戻す
(1, b'ABC', 5)
(16-03)ustruct.calcsize(format)
書式文字列 fmt に従って作成されるバイト列のサイズを返します。
>>> import ustruct
>>> fmt='s' #文字char(1byte)
>>> ustruct.calcsize(fmt)
1
>>> fmt='h' #整数(2bytes)
>>> ustruct.calcsize(fmt)
2
>>> fmt='i' #整数(4bytes)
>>> ustruct.calcsize(fmt)
4
>>> fmt='3sh2i'
>>> ustruct.calcsize(fmt)
16
(16-04)ustruct.pack_into(fmt, buffer, offset, v1, v2, …)
書き込み可能なfmt形式のバッファデータをoffset位置から書き換える。
>>> a=bytearray(b'\x01\x02\x03\x04')
>>> ustruct.pack_into('4b',a,0,5,6,7,8)# aの0番から4つ書き換える
>>> a
bytearray(b'\x05\x06\x07\x08') #5,6,7,8になった
(16-05)ustruct.unpack_from(fmt, buffer, offset=0)
fmt形式のバッファのoffsetからアンパックします。結果はタプルになります。
>>> import ustruct
>>> a= bytes(b'\x01\x02\x03\x04\x05\x06\x07')
>>> ustruct.unpack_from("b", a, 2) # a 2番から1byteアンパック
(3,)
>>> ustruct.unpack_from("3b", a, 2) # a 2番から3bytesアンパック
(3, 4, 5)
– micro:bit V2 –
モジュール名がustructだけに変わっています。
>>> import struct
>>> help(struct)
object <module 'ustruct'> is of type module
(d-17)utime -module
utime モジュールは、標準の Python の time モジュールの MicroPython 版です。import utime でもimport time でもインポートできます。モジュールは同じものです。
utimeモジュールを読み込むと「sleep, sleep_ms, sleep_us, ticks_ms, ticks_us, ticks_add, ticks_diff」の関数が使えます。
(17-01)utime.sleep(seconds)
指定された秒数の間スリープします。浮動小数点数も使えます。
(17-02)utime.sleep_ms(ms)
指定のミリ秒間だけ遅延します。整数だけです。
(17-03)utime.sleep_us(us)
指定のマイクロ秒間だけ遅延します。整数だけです。
>>> import utime
>>> utime.sleep(1) # 1 sec
>>> utime.sleep_ms(1000) # 1 sec
>>> utime.sleep_us(1000000) # 1 sec
>>> utime.sleep(0.001) # 1 msec
>>> utime.sleep(0.000001) # 1 μsec
>>>
>>> from microbit import *
>>> sleep(1000) # 1 sec
(17-04)utime.ticks_ms()
呼出し時点でのmicro:bitが起動してからの時間をミリ秒単位で返します。
最大値に達すると一周して最低値に戻ります。
最大値は’0x_3fff_ffff’(1073741823)です。
(17-05)utime.ticks_us()
utime.ticks_ms() と同じですが、マイクロ秒単位です。
microbit moduleにあるrunning_time(ms)とutime.ticks_ms(ms)は同じ機能のようです。
>>> from microbit import *
>>> import utime
>>> utime.ticks_ms()
2285445
>>> running_time()
2288079
(17-06)utime.ticks_add(ticks, delta)
与えた数をticks値からのオフセットとして加算した値を返します。
delta値は正でも負でもかまいません。
r=running_time()
t=utime.ticks_ms()
s=utime.ticks_add(utime.ticks_ms(),-100)
#running_time,utime.ticks_ms
print(t, r)
print(t-100, s)
実行結果
>>> %Run 1010_ticks_01.py
5679487 5679487 # running_time, utime.ticks_ms
5679387 5679388 # utime.ticks_msの加減と同じ
(17-07)utime.ticks_diff(ticks1, ticks2)
utime.ticks_ms() や ticks_us() 関数の戻り値の差を計算します。
utime.ticks_diff(ticks1, ticks2) は ticks1 – ticks2 と同じです。
start = utime.ticks_ms() # 開始した稼働時間
print('start')
# 現在の稼働時間-開始した稼働時間(動作時間)が1sec以下ならprint
while utime.ticks_diff(utime.ticks_ms(), start) < 1000:
sleep(250)
print(start,utime.ticks_ms()) # 開始した稼働時間 現在の稼働時間
実行結果
>>> %Run 1010_ticks_02.py
start
6784115 6784369
6784115 6784626
6784115 6784883
6784115 6785139 #開始から1000msec超えたので停止
– micro:bit V2 –
モジュール名がutimeだけに変わっています。
>>> import time
>>> help(time)
object <module 'utime'> is of type module
まとめ
thonny-microbitのモジュール struct |ustruct、time | utime について記載しました。