【Python】Raspberry Piで部屋の明るさを計測

pigpioを使い部屋の明るさをPythonで取得してみたので、自分用に内容を記事にしときたいと思います。

前回の記事でフォトトランジスタを動かす為の配線を行いましたので、これを動かしていきます。

今回はSPI通信を利用しますのでRaspberry Piの設定でオンにしておきましょう。

プログラムは、こちらの記事の物をほぼほぼ流用しており、1秒ごとに明るさを示す数値を表示するものです。

# coding: utf-8

# spi, time ライブラリをインポート
import pigpio
import time

pi = pigpio.pi()

sensor = pi.spi_open(0, 1000000, 0) # デバイスオープン

# IC からデータを取得する関数を定義
def measure(ch):
    # SPI インターフェイスでデータの送受信を行う

    #start connection bit 0111 1000 
    #1=X
    #2=X
    #3=X
    #4={MSBF=1,LSB=0}
    #5={CH0=0,CH1=1}
    #6={SINGLE ENDED MODE=1,PSEUDO-DIFFERENTIAL MODE=0}
    #7=1
    #8=X
    c, ad = pi.spi_xfer( sensor, [ 0x68 | ch, 0x00 ] )
    #
    
    val = ((ad[0] & 0x03) << 8) + ad[1] 
    # 受信した2バイトのデータを10 ビットデータにまとめる
    # output code = 1024 * Vin / Vdd 
    voltage =  ( val * 3.3 ) / 1024
    # 結果を返す
    return val, voltage

# 例外を検出
try:
    # 無限ループ
    while 1:
        # 関数を呼び出してch0 のデータを取得
        ch0_val, ch0_voltage  = measure(0x00)
        # 関数を呼び出してch1 のデータを取得
        ch1_val, ch1_voltage  = measure(0x10)

        # 結果を表示
        print  ('ch0 = {:4d}, {:2.2f}[V], ch1 = {:4d}, {:2.2f}[V]'.format(ch0_val, ch0_voltage, ch1_val, ch1_voltage))
        
        # 1 秒待つ
        time.sleep(1)

# キーボード例外を検出
except KeyboardInterrupt:
    # 何も処理をしない
    pass

# SPI を開放
pi.spi_close(sensor)
pi.stop()
実行結果

ch0 = 0, 0.00[V], ch1 = 12, 0.04[V]
ch0 = 20, 0.06[V], ch1 = 12, 0.04[V]
ch0 = 0, 0.00[V], ch1 = 14, 0.05[V]
ch0 = 21, 0.07[V], ch1 = 13, 0.04[V]
ch0 = 0, 0.00[V], ch1 = 10, 0.03[V]
ch0 = 0, 0.00[V], ch1 = 10, 0.03[V]

関連記事