2022/12/26
2022/12/28
マイクロビット(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