稼働中

マイクロビット(c_06)BH1750FVI – GY-302用モジュール

BH1750FVI (I2C)   c_lcd1608a_00.py

BH1750FVIはI2C接続の照度センサーです。※詳細はデータシートを参照ください。
BH1750FVI-GY-302センサーモジュールで使う自作の’c_bh1750_00.py’を作成しました。(※記事e_013を元にクラスにしました。)
‘c_bh1750_00.py’は末尾にあります。使い方だけを記載します。

使い方

ファイル転送
micro:bitへ’c_bh1750_00.py’を送った後でimportして使います。micro:bitに直接ファイルをアップロード出来ない場合(Thonny 3.1.12など)は、microfsなどを使ってアップロードします。
※microfsについては、当サイト内のこちらを参照ください。
※c_bh1750_00.pyの末尾に、使用例(c_bh1750_ex.py)の## example以降をコピペ追加しても動作確認できます。

メソッド
‘c_bh1750_00’をimportすると「’bh_mes’,’w_reg’ 」のメソッドが使えるようになります。

BH1750(mode)で初期化します。
測定の解像度、繰返し、ワンタイムの組合せで6種類あります。
defaultでは繰返し、高解像1lx 0x10にしています。
変更したい場合にはBH1750(0x20)のようにします。(ワンタイム、高解像1lx)

(1)bh_mes(mode=0x10)
照度を測定して値を返します。
(2)w_reg(value)
オペコードを送信します。リセットなど個別に操作します。※コード値はデータシートを参照を下さい。

使用例

照度を測定します。


c_bh1750_ex.py
from microbit import *
from c_bh1750_00 import BH1750
## example--------------------------------
# BH1750FVI GY-302
a=BH1750()          # instance 
lux=a.bh_mes()      # 測定
print('Lux= %6.1f(lx)' % lux )

実行結果


>>> %Run c_bh1750_ex.py
Lux= 1050.0(lx)

Thonnyのshellで実行
>>> a.w_reg(0x07)   # 0x07(reset)
>>> a.bh_mes()      # 測定
0.0
>>> a.w_reg(0x10)   # 0x10(mode) resetするとmodeの再設定が必要
>>> a.bh_mes()      # 測定
1055.83
>>> 

モジュール


c_bh1750_00.py
from microbit import *
# i2c.init(freq=100000, sda=pin20, scl=pin19)
## example--------------------------------
# BH1750FVI GY-302
class BH1750:
    def __init__(self,gain=0x10,address=0x23):
        #  (0x10)cont_H-resp(1lux/bit) ~65536lx -max180msec
        # ADDR='L'0x23(35)  ADDR='H' 0x5c(92)
        self.addr=address
        self.mode=gain
        #mesure mode set
        self.w_reg(self.mode)
        sleep(500)
    # write opecode 
    def w_reg(self,opecode):
        buf=bytearray(1)
        buf[0]=opecode
        i2c.write(self.addr,buf)
        sleep(500)
    # measuring lux
    def bh_mes(self):
        #H,L 2byte read data
        r_data=i2c.read(self.addr,2)

        H_byte=r_data[0]
        L_byte=r_data[1]

        # calculate
        d_lux=H_byte << 8 | L_byte
        self.lux=d_lux/1.2
        return self.lux