稼働中

マイクロビット(c_14)DS3231 用モジュール (2)

DS3231(I2C) DS3231T_c.py

DS3231はリアルタイムクロックです。デバイスの温度測定ができます。※詳細はデータシートを参照ください。
DS3231モジュールの温度測定で使う自作の’DS3231T_c.py’を作成しました。使い方だけを記載します。(※記事e_019を元にクラスにしました。)
‘DS3231T_c.py’は末尾にあります。使い方だけを記載します。

使い方

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

メソッド
‘DS3231T_c’をimportすると「DS_TEMP」のメソッドが使えるようになります。
DS3231T()()で初期化します。
(1)DS_TEMP()
DS3231の温度レジスタの値を返します。

使用例1

DS3231デバイスの温度を測定します。


DS3231T_ex.py
from microbit import *
from DS3231T_c import DS3231T
# RTC DS3231 Temperature Register 10bit(0x11,0x12) 0.25c/bit
## example ------------------
i2c.init()
a=DS3231T()             # instance
temp=a.DS_TEMP()
print('temp= %5.2f ℃' %temp )

実行結果


>>> %Run DS3231T_ex.py
temp= 29.25 ℃

DS3231 温度測定用モジュール


DS3231T_c.py
from microbit import *
# RTC DS3231 Temperature Register 10bit(0x11,0x12) 0.25c/bit
class DS3231T:
    def __init__(self):
        # RTC DS3231 slave address hex(104)'0x68'
        self.adr=0x68
    # ゼロ穴埋め8ビット
    def z_padd(self,dat):  # int
        dat=bin(dat)  # str
        value='0b'+'0'*(8-len(dat[2:])) + dat[2:]      # str 8bit
        return value
    # 符号付き計算
    def sign(self,dat,bit_num):
        if dat >= (2**(bit_num-1)):
            dat=dat-(2**bit_num)
        #print(bin(dat), dat, bin(dat & 0xf))
        return dat

    # temperature reading  10bit(0x11,0x12)
    def DS_TEMP(self):
        # read temp data 0x11(bit7_sign-0 ),0x12(bit7-6)
        s_reg=bytearray(1)
        s_reg[0]=0x11
        i2c.write(self.adr,s_reg)

        # temperature 2byte data 
        r_reg=i2c.read(self.adr,2) 
        
        #10bit ajust data 10bitデータに変換
        t_dat='0b'+self.z_padd(r_reg[0])[2:]+self.z_padd(r_reg[1])[2:4] 
        #print(len(t_dat),t_dat)

        sig_t=self.sign(int(t_dat),10)        #符号付きに
        tc=0.25*sig_t # Temperature=0.25c/bit
        return tc