1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

新しい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ブロックに相当します。

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

```python`
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` ブロックに相当します。

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

```python
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?