ラズパイ5 pythonの仮想環境 ③ 温度センサTMP117の測定結果を4桁7セグメントLED表示器に
前回、温度センサTMP117をI2Cバスにつないで、温度を測定しました。ここでは、下記の記事を参照し、4桁7セグメントLED表示器に温度を表示します。
ラズパイ2023年10月更新 bookworm ⑥ CPUの温度を4桁7セグメントLED表示器に
●4桁7セグメントLEDに表示するプログラム
上記のプログラムでは、小数点の処理が複雑になっていたので、変更しました。
初期設定部分です。
HT16K33_GENERIC_SYSTEM_ON = 0x21
HT16K33_GENERIC_DISPLAY_ON = 0x81
i2c.write_byte_data(i2c_address, HT16K33_GENERIC_SYSTEM_ON, 0)
i2c.write_byte_data(i2c_address, HT16K33_GENERIC_DISPLAY_ON, 0)
輝度を設定します。0~15の値で輝度が変わります。
HT16K33_GENERIC_CMD_BRIGHTNESS = 0xe0
i2c.write_byte_data(i2c_address, HT16K33_GENERIC_CMD_BRIGHTNESS, 8)
辞書機能を使って、LEDに表示する数字やマイナス符号、ドットを表示コードをキー (key)にし、表示するコードの値(value)を対応づけます。
num={'0':0x3f,'1':0x06,'2':0x5b,'3':0x4f,'4':0x66,'5':0x6d,'6':0x7d,
'7':0x07,'8':0x7f,'9':0x67, '-':0x40, '.':0x80}
辞書機能を使って、4桁のLEDの桁位置と実際の設定コードを対応付けます。
seg={0:0,1:2,2:6,3:8}
LEDを消灯させる関数です。
clear7segLED()
1~4桁の数字を引数(data)に、LEDを点灯させる関数です。
disp7seg(data)
引数(数値)を文字型に変え、長さを得ます。
dataString = str(data)
dataLength = len(dataString)
表示する文字数分のバッファを用意します。
buf = ([0]*dataLength)
文字型にした数字の列を後ろから1文字ずつbufに入れていきます。
for i in range(dataLength):
buf[i] = dataString[-1*(i+1)]
辞書機能で、表記コードに変換します。
buf[i] = num[buf[i]]
小数点'.'を見つけたら、その次の数字に128を足して、表示時にdotを光らせます。小数点の文字自体を消去します。
for k in range(dataLength-1 if 128 in buf else dataLength):
if buf[k] == 128: # '.'
buf[k+1] = buf[k+1] + 128 # LED dot
del buf[k]
表示コードの並びを逆順にします。
buf.reverse()
実際にLEDを表示します。
for i in range(len(buf)):
# print(buf[i])
i2c.write_byte_data(i2c_address, seg[i], buf[i])
import time i2c_address = 0x71 HT16K33_GENERIC_SYSTEM_ON = 0x21 HT16K33_GENERIC_CMD_BRIGHTNESS = 0xe0 num={'0':0x3f,'1':0x06,'2':0x5b,'3':0x4f,'4':0x66,'5':0x6d,'6':0x7d, def clear7segLED(): def disp7seg(data): buf = ([0]*dataLength) #for i in range(dataLength): for k in range(dataLength-1 if 128 in buf else dataLength): print("test start") clear7segLED() clear7segLED() clear7segLED() |
いくつかのprint文のコメントを外し、実行します。
yoshi@ras05:~ $ source env/bin/activate
(env) yoshi@ras05:~ $ python tmp117-7sega.py
test start
23.4
['4', '.', '3', '2']
[102, 128, 79, 91]
-23.0
['0', '.', '3', '2', '-']
[63, 128, 79, 91, 64]
0
['0']
[63]
105.6
['6', '.', '5', '0', '1']
[125, 128, 109, 63, 6]
●温度を表示する
温度センサTMP117の測定値を表示します。
disp7seg()関数名は、disp7segLED()に変更しました。デバッグ用print文を削除しました。
import time i2c_address = 0x71 def readTMP117temperature(): HT16K33_GENERIC_SYSTEM_ON = 0x21 HT16K33_GENERIC_CMD_BRIGHTNESS = 0xe0 num={'0':0x3f,'1':0x06,'2':0x5b,'3':0x4f,'4':0x66,'5':0x6d,'6':0x7d, def clear7segLED(): def disp7segLED(data): print("test start") while 1: |