LoginSignup
1
0

More than 1 year has passed since last update.

logモジュールについて

Posted at

新しいPythonエディタのαリリースで使える最新の MicroPython (執筆時点では 2.0.0-2021-10-25)で使える新機能 第2弾です。

log モジュールとは

MakeCode の拡張機能 Data Logger に相当するものです。micro:bit 内のストレージにセンサー値などのデータを溜め込んで、後で参照したり、CSV形式で取り出したり、グラフ表示できます。

スクリーンショット 2021-12-19 10.05.32.jpg

log モジュールのAPI

log.set_labels(*args)

ログのヘッダを設定します。MakeCodeのset columnsブロックに相当します。

ヘッダの項目を文字列で並べて指定します。たとえば温度センサーと光センサーの値を記録するつもりであれば、次のように設定しておきます。

set_labels('temperature', light')

オプションでタイムスタンプの単位を timestamp 引数で指定できます。これはMakeCodeのset timestampブロックに相当します。timestamp引数に指定できる値は次のとおりです。

timestamp 説明
log.MILLISECONDS ミリ秒単位。デフォルト。
log.SECONDS 秒単位
log.MINUTES 分単位
log.HOURS 時単位
log.DAYS 日単位

log.add(log_data)

データを記録します。MakeCodeの log data ブロックに相当します。

データの指定には、名前つき引数で指定する方法と、辞書オブジェクトで指定する方法があります。

add(temperature=t, light=l)  # 引数名はset_labelsに指定した項目名と一致している必要あり

add({"temperature":t, "light":l})  # 辞書のキーはset_labelsに指定した項目名と一致している必要あり

log.delete()

記録されているデータを(ヘッダも含めて)削除します。MakeCodeの~delete log'ブロックに相当します。

set_mirroring(serial)

ログの記録を UART にも出力していきます。MakeCodeに該当する機能はありません。

サンプル

ユーザガイドのData logging with the micro:bitにあるMakeCodeの例をMicroPython用に書き換えてみました。

加速度センサー x, y, z の値が記録されます。
Aボタンで記録する/しない状態を切り替えます。
A+Bボタンでログを削除します。

今のところ、ログ領域がフルになったことを検出する機能は無いので、ログが一杯になったら記録を止める機能は実現していません。

from microbit import (accelerometer,
                      display, Image, 
                      button_a, button_b,
                      run_every)
import log


logging = False
log.set_labels('x', 'y', 'z', timestamp=log.SECONDS)


@run_every(ms=100)
def logging_xyz():
    if logging:
        log.add(x=accelerometer.get_x(),
                y=accelerometer.get_y(),
                z=accelerometer.get_z())


def on_button_a_pressed():
    global logging
    logging = not logging
    if logging:
        display.show(Image.HEART)
    else:
        display.clear()


def on_button_a_and_b_pressed():
    display.scroll("deleting log")
    log.delete()


@run_every(ms=100)
def hundle_button_action():
    if button_a.is_pressed() and button_b.is_pressed():
        while button_a.is_pressed() or button_b.is_pressed():
            pass
        on_button_a_and_b_pressed()
    elif button_a.is_pressed():
        while button_a.is_pressed():
            pass
        on_button_a_pressed()

実行すると、MICROBIT フォルダに MY_DATA.HTM というファイルができるので、これを開いて表示します。

スクリーンショット 2021-12-19 10.57.51.jpg

次のように表示されます。Download ボタンをクリックするとCSVファイル形式でデータをダウンロードできます。

スクリーンショット 2021-12-19 10.59.47.jpg

View preview ボタンをクリックすると、データをグラフ表示できます。

スクリーンショット 2021-12-19 11.02.30.jpg

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0