無線モジュールでI2C通信できる温度センサADT7410から温度情報を得ようとしたプログラムが次のものです。
このプログラムでの温度情報の読み取りを10秒おきとかに変更したいのですがどうしたらよいでしょうか
Python
1import struct, binascii, serial 2import time 3 4# I2Cを制御する関数 5def accessI2C(s, sendto = 0x05, reqno = 0x00, command = 0x01, 6 i2caddress = 0x00, i2ccommand = 0x00, 7 data = [], readbyte = -1): 8 9 # データを作成する 10 if readbyte == -1: 11 # dataを書き込む 12 sendbytes = [sendto, 0x88, reqno, command, i2caddress, i2ccommand, len(data)] 13 # dataを加える 14 sendbytes.extend(data) 15 else: 16 # readbyteだけ読み取る(dataは利用しない) 17 sendbytes = [sendto, 0x88, reqno, command, i2caddress, i2ccommand, readbyte] 18 19 # チェックサムを計算する 20 chksum = 0 21 for val in sendbytes: 22 chksum = (chksum + val) & 0xff 23 sendbytes.append((0x100 - chksum) & 0xff) 24 25 # 16進数文字列に変換する 26 bytelen = len(sendbytes) 27 ss = struct.Struct(str(bytelen) + "B") 28 outstring = str(binascii.hexlify(ss.pack(*sendbytes)), 'utf-8').upper() 29 30 # TWE-Liteに送信する 31 s.write(bytes(":" + outstring + "\r\n", 'utf-8')) 32 33 # 結果を待つ 34 # 10回繰り返す 35 for i in range(10): 36 status = str(s.readline(), 'utf-8') 37 if status[0:9] == ":" + outstring[0:2] + "89" + outstring[4:8]: 38 # 該当の応答結果である 39 # 行頭の「:」と行末の改行を取り除く 40 status = status[1:].rstrip() 41 # バイトデータに変換する 42 ss = struct.Struct(">BBBBBB") 43 parsed = ss.unpack(binascii.unhexlify(status[0:12])) 44 if status[4]: 45 # I2Cへのアクセスに成功 46 # 得たバイトを戻り値として返す 47 ss = struct.Struct(str(parsed[5]) + "B") 48 result = ss.unpack(binascii.unhexlify(status[12:len(status) - 2])) 49 return result 50 else: 51 # 失敗 52 return False 53 break 54 return False 55# COM5を開く 56s = serial.Serial(4, 115200) 57 58while 1: 59 # コンフィグレーションレジスタを設定して初期化する 60 # 16ビット、ワンショットモード 61 accessI2C(s, command = 0x01, i2caddress = 0x48, i2ccommand = 0x03, data=[0x80], sendto = 0x05) 62 time.sleep(0.300) 63 # 温度の値を読み取る 64 result = accessI2C(s, command = 0x04, i2caddress = 0x48, i2ccommand = 0x00, readbyte = 2) 65 if result: 66 # 16ビットの値に変換 67 val = result[0] * 256 + result[1] 68 # 温度に変換 69 if val & 0x8000 : 70 # 負の温度 71 t = (val - 32768) / 128.0 72 else: 73 # 正の温度 74 t = val / 128.0 75 print("温度=" + str(t)) 76 else: 77 print("読み取りエラー") 78 79# COMを閉じる 80s.close() 81
回答1件
あなたの回答
tips
プレビュー