ふくふくHukuhuku Inc.
EP.08Sensor Log対象: 中1以上 8分公開: 2026-05-10

1 週間ログを取る:SD カード保存・時刻同期・バッテリー駆動

数日〜数週間の連続記録には、ストレージ・時刻精度・電源持続の 3 課題がある。M5Stack の SD カード書込み、RTC で時刻を維持、リポバッテリーで安定運用する方法を扱う。

#ログ#SDカード#RTC#バッテリー
CO📔 Google Colab で開く(上から順にセルを実行)
シェア

長期計測 には独特の難しさがあります。「24 時間取れた」の次に挑む「1 週間取れた」「1 ヶ月取れた」を実現するための実装パターン集です。

1. 長期計測の 3 大課題

  • ストレージ: 内蔵フラッシュは小さい (micro:bit 約 32 KB)。SD カードを使う
  • 時刻精度: マイコン単独では時刻がずれる。RTC + NTP で同期
  • 電源: USB 給電 or 大容量モバイルバッテリー or 省電力スリープ

2. SD カード書込み (M5Stack)

M5Stack: 1 分間隔で SD カードに追記
Python
from m5stack import sdcardimport os, time
sdcard.SDCard()LOG_DIR = '/sd/logs'os.makedirs(LOG_DIR, exist_ok=True)
def get_log_path():    """日次でファイルを切替: /sd/logs/2026-05-15.csv"""    t = time.localtime()    return f'{LOG_DIR}/{t[0]:04d}-{t[1]:02d}-{t[2]:02d}.csv'
def log_row(values: list):    """1 行を CSV に追記、毎回 flush"""    path = get_log_path()    is_new = not os.path.exists(path)    with open(path, 'a') as f:        if is_new:            f.write('timestamp,temp,humidity,pressure\n')        f.write(','.join(str(v) for v in values) + '\n')        f.flush()

3. RTC と NTP 同期

起動時に NTP で時刻取得
Python
import network, ntptime, machine
# WiFi 接続wifi = network.WLAN(network.STA_IF)wifi.active(True)wifi.connect('YOUR_SSID', 'YOUR_PASSWORD')while not wifi.isconnected():    time.sleep(0.5)
# NTP で同期 (UTC が返るので日本時間 +9h する場合は別途)ntptime.host = 'ntp.nict.jp'ntptime.settime()print('Time synced:', time.localtime())

4. 電源持続のテクニック

パターン持続目安向き
USB 常時給電永久据え置き計測 (室内)
M5Stack 内蔵リポのみ6〜12 時間短期計測 (1 日以内)
モバイルバッテリー 10000 mAh1〜2 週間屋外・移動計測
測定 → 深いスリープ → 起動 のループ1〜3 ヶ月省電力本格運用
ソーラー + バッテリー充電理論的には永久完全屋外、上級

5. データの破損対策

  • 毎行 flush(): 書込みバッファを残さず即時保存
  • 日次でファイル分割: 1 ヶ月のデータが 1 ファイルだと、壊れた時の被害が大きい
  • バックアップ: 週 1 回 SD カードを抜いて PC にコピー
  • チェックサム: 高度なら CSV 末尾に各行のハッシュ

6. データ取得後の Colab 解析

1 週間分のファイルをまとめて読み込み
Python
import pandas as pdimport glob
# /sd/logs/*.csv を全部読み込む (PC にコピー後)files = sorted(glob.glob('logs/*.csv'))dfs = [pd.read_csv(f) for f in files]df = pd.concat(dfs, ignore_index=True)df['time'] = pd.to_datetime(df['timestamp'], unit='s')print(df.info())print(df.describe())

7. 次の話

EP.09 では取れたデータの 「ノイズ」 にどう向き合うかを扱います。移動平均・外れ値除去・スムージングといった、生データから意味を引き出す前処理の技術です。

シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp