著者:米田 聡
シェルスクリプトマガジンでは、小型コンピュータボード「Raspberry Pi」(ラズパイ)向けのセンサー搭載拡張ボード「ラズパイセンサーボード」を制作しました。第13 回では、同ボードに搭載された湿温度・気圧センサー「BME280」から取得したデータをグラフ化する準備をします。
シェルスクリプトマガジン Vol.66は以下のリンク先でご購入できます。![]()
![]()
図2 PythonからSQLiteを操作するサンプルプログラム(test_sqlite3.py)
import sqlite3
DBNAME = "test.sqlite3" # データベースファイル名
conn = sqlite3.connect(DBNAME) # SQLite 3に接続
cur = conn.cursor() # カーソルを得る
cur.execute("SQL文") # SQLを発行
conn.commit() # コミット
data = cur.fetchall() # 結果をdataに格納
conn.close() # データベースを閉じる
図3 温度、湿度、気圧のデータをSQLiteに保存するプログラム(storebme.py)
import time, os, sys, signal
import smbus2
import bme280
import sqlite3
BME280_ADDR = 0x76
BUS_NO = 1
DBNAME = 'weather.sqlite3'
def store_values(values):
conn = sqlite3.connect(DBNAME)
cur = conn.cursor()
sql = "INSERT INTO bme(dt,temp,hum,press) VALUES(datetime('now', '+9 hours'),?,?,?)"
cur.execute(sql,(values[0],values[1],values[2]))
conn.commit()
conn.close()
def signal_handler(sig, handler):
sys.exit()
# テーブル作成
if not os.path.exists(DBNAME):
conn = sqlite3.connect(DBNAME)
cur = conn.cursor()
cur.execute("CREATE TABLE bme(id INTEGER PRIMARY KEY AUTOINCREMENT, dt TEXT,temp REAL, hum REAL, press REAL)")
conn.commit()
conn.close()
# BME280
i2c = smbus2.SMBus(BUS_NO)
bme280.load_calibration_params(i2c, BME280_ADDR)
# signal
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
# メインループ
while True:
data = bme280.sample(i2c, BME280_ADDR)
store_values([data.temperature,data.humidity,data.pressure ])
time.sleep(60)