YAS's VB.NET Tips
 
ラズベリーパイ活用
ラズベリーパイ活用 >> 記事詳細

2019/08/14

温度・湿度・気圧ロガー

| by:YAS


 先日作った,BME280ボードを使って,温度・湿度・気圧ロガーを作ってみました。画面の表示はpygameを使っています。1秒ごとに測定と画面更新を行い,10秒ごとにログに出力します。ログは日が変わる毎に新しく作られます。480 x 320のミニ液晶が前提で,フルスクリーン表示で起動します。ESCキーで終了します。
 今後は,画面タッチで1日の変化をmatplotlibを使ってグラフ表示するよう機能追加をしていきます。

☆コード
 pygameではデフォルトでは日本語を表示できないので,IPAゴシックをダウンロードし,同じフォルダに配置して使っています。
import smbus2 
import bme280
import datetime
import time
import pygame
from pygame.locals import *
import sys
import csv

BME280_PORT = 1
BME280_ADDRESS = 0x76
PYGAME_SCREEN_SIZE = (480320)
LOG_INTERVAL = 10

# BME280初期設定
bus = smbus2.SMBus(BME280_PORT)
calibration_params = bme280.load_calibration_params(bus, BME280_ADDRESS)

# pygame初期設定
pygame.init()
screen = pygame.display.set_mode((PYGAME_SCREEN_SIZE), FULLSCREEN)
pygame.display.set_caption("温度・湿度・気圧計"
myfont1 = pygame.font.Font("ipag.ttf"35)
myfont2 = pygame.font.Font("ipag.ttf"62)

old_time = time.perf_counter()
while True:
    new_time = time.perf_counter()
    if new_time - old_time >= 1:
        old_time = new_time
        # BME280からデータを読み出す
        data = bme280.sample(bus, BME280_ADDRESS, calibration_params)
        timestamp_str = "{0:%Y年%m月%d日 %H時%M分%S秒}".format(data.timestamp)
        temperture_str = "温度:{0:>6.1f} ℃".format(data.temperature)
        humidity_str = "湿度:{0:>6.1f} %".format(data.humidity)
        pressure_str = "気圧:{0:>6.1f} hPa".format(data.pressure)
        # pygameでデータを表示する
        timestamp = myfont1.render(timestamp_str, True, (255255255))
        temperture = myfont2.render(temperture_str, True, (255255255))
        humidity = myfont2.render(humidity_str, True, (255255255))
        pressure = myfont2.render(pressure_str, True, (255255255))                       
        screen.fill((000))
        screen.blit(timestamp, (010))
        screen.blit(temperture, (070))
        screen.blit(humidity, (0155))
        screen.blit(pressure, (0240))
        pygame.display.update()
        # 10秒毎にCSVに保存する
        if data.timestamp.second % 10 == 0:
            filename = "./BME280log/{0:%Y.%m.%d} BME280.log".format(datetime.date.today())
            f = open(filename, "a")
            writer = csv.writer(f)
            csvrow = []
            csvrow.append("{0:%Y/%m/%d %H:%M:%S}".format(data.timestamp))
            csvrow.append("{0:.1f}".format(data.temperature))
            csvrow.append("{0:.1f}".format(data.humidity))
            csvrow.append("{0:.1f}".format(data.pressure))
            writer.writerow(csvrow)
            f.close()
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN and event.key == K_ESCAPE:
            pygame.quit()
            sys.exit()                

23:45