0
1

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 5 years have passed since last update.

③Raspberry Pi3でdh11とDBを連携する

Last updated at Posted at 2018-07-25

sqliteインストール

$ sudo apt-get install sqlite3

バージョン確認

$ sqlite3 -version

db、テーブル作成

DB作成

$ sqlite3 test.db

sqlite接続

$ sqlite3 test.sqlite3

テーブル作成

$ CREATE TABLE sensor1 (timestamp [timestamp], temp [integer], humid [integer]);

DHT11のデータをSQLiteに保存するスクリプト

dh11_sqlite.py
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import sqlite3
import dht11
import time
import datetime
 
# initialize GPIO
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.cleanup()
 
# read data using pin 14
instance = dht11.DHT11(pin=14)
 
while True:
    result = instance.read()
    if result.is_valid():
        TIME = str(datetime.datetime.now())
        TEMP = result.temperature
        HUMID =  result.humidity
        #以下のプリントは無くても良い。
        print("Last valid input: " + TIME)
        print("Temperature: %d C" % TEMP)
        print("Humidity: %d %%" % HUMID)
        #データが取れたのでブレイクしてSQLiteに保存
        break;
 
# SQLiteのデータベースの名前と保管場所を指定。
#このコードはdht11.pyと同じ場所に置く必要があります。DBも同じ場所にしてみました。
dbname = '/home/pi/Python-Script/DHT11_Python/dht11_1.db'
# データベース内のテーブルの名前
dbtable = 'sensor1'
# SQLiteへの接続
conn = sqlite3.connect(dbname)
c = conn.cursor()

# SQLiteにテーブルがあるかどうか確認するクエリ
checkdb = conn.execute("SELECT * FROM sqlite_master WHERE type='table' and name='%s'" % dbtable)
# もしテーブルがなかったら新規でテーブルを作成する
if checkdb.fetchone() == None:
    # ID、タイムスタンプ、温度、湿度の4列のテーブルを作成するクエリを作成。IDは自動附番。
    create_table = '''create table ''' + dbtable + '''(id integer primary key autoincrement, timestamp varchar(20),
                  temp real, humid real)'''
    # クエリを実行
    c.execute(create_table)
    # 変更を保存する
    conn.commit()
 
# SQL文に値をセットする場合は,Pythonのformatメソッドなどは使わずに,
# セットしたい場所に?を記述し,executeメソッドの第2引数に?に当てはめる値を
# タプルで渡す.
# 温度、湿度、タイムスタンプを保存。
sql = 'insert into sensor1 (timestamp, temp, humid) values (?,?,?)'
data= (TIME, TEMP, HUMID)
c.execute(sql, data)
conn.commit()
 
#接続を切る
conn.close()

スクリプト実行

sudo python dh11_sqlite.py


DB確認

sqlite3 dht11_1.db
sqlite> select * from sensor1
2018-07-19 04:10:00.944870|28|74
0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?