2021年4月15日木曜日

Raspberry Pi Zeroに接続したCDSとMCP3425で取得した明るさのデータをPostgreSQLに保存する

CDSとMCP3425で取得した明るさのデータをPostgreSQLに保存するには以下の手順を実行します。

※Raspberry Pi ZeroとCDSとMCP3425の接続は以下の記事を参照してください。
Raspberry Pi ZeroとCDSとMCP3425で明るさを測る
https://serverarekore.blogspot.com/2021/04/raspberry-pi-zerocdsmcp3425.html

実行手順

1. データ保持用のテーブル作成
PostgreSQL側でデータ保持用のテーブルをあらかじめ作成しておきます。テーブル名称は適宜変更してください。

create table cds_sensor
(
  device_name varchar(30) not null,
  data_ts timestamp not null,
  cds_value float,
  constraint pk_cds_sensor primary key (device_name, data_ts)
);

2. pipenvの導入
pipenvをインストールしていない場合は、以下のコマンドを実行します。
sudo apt-get update

sudo apt-get -y install python3-pip python3-distutils python3-dev

sudo pip3 install --upgrade pip

sudo pip3 install --upgrade setuptools

sudo pip3 install pipenv

echo "export PIPENV_VENV_IN_PROJECT=true" >> ~/.bashrc

source ~/.bashrc

3. smbusとpsycopg2モジュールがインストールされた仮想環境作成
pipenvを使用する場合は以下のコマンドで、smbusとPostgreSQL用の仮想環境を作成します。
sudo apt-get -y install libpq-dev

mkdir -p ~/smbus_pg

cd ~/smbus_pg

pipenv --python 3

pipenv install psycopg2-binary smbus

pipenv shell

4. センサーデータ取得・記録プログラム
以下のプログラムを保存します。

record_cds.py
import os
import psycopg2
import psycopg2.extras
import smbus
import time

i2c = smbus.SMBus(1)
addr_mcp3425=0x68

FIELD_PGA_GAIN_1X = 0x00 # gain 1X
FIELD_SAMPLE_RATE_15SPS_16BIT = 0x08 # 15SPS 16bit sampling
FIELD_CONV_MODE = 0x00 # one-shot
FIELD_READY = 0x80

def read_cds():
  i2c.write_byte(addr_mcp3425, FIELD_PGA_GAIN_1X | FIELD_SAMPLE_RATE_15SPS_16BIT | FIELD_CONV_MODE| FIELD_READY)
  time.sleep(0.15)
  dat = i2c.read_i2c_block_data(addr_mcp3425, 0x00, 3)
  val = (dat[0] << 8) | dat[1]
  return val

while True:
  val= read_cds()
  print("cds:{}".format(val))
  device_name = 'mcp3425'
  sql = """insert into cds_sensor values (%s, current_timestamp, %s)"""
  conn = psycopg2.connect(host=os.environ['PG_HOST'], port=os.environ["PG_PORT"], database=os.environ['PG_DB'], user=os.environ['PG_USER'], password=os.environ['PG_PASS'])
  with conn.cursor(cursor_factory=psycopg2.extras.DictCursor) as cur:
    cur.execute(sql , (device_name, val))
  conn.commit()
  time.sleep(1)

5. プログラムの実行
データベースの接続情報を環境変数に設定してrecord_cds.pyを実行します。
export PG_HOST=データベースホスト名またはIP
export PG_PORT=データベースのポート番号(※通常5432)
export PG_DB=データベース名
export PG_USER=ユーザ名
export PG_PASS=パスワード

python3 record_cds.py

0 件のコメント:

コメントを投稿