Smart gadget SHT4x を使って電子百葉箱を作る ⑥ ラズパイ+表示器HT16K33

 前回、Smart gadget SHT4xからラズパイで温度と湿度を読み出しました。

表示器HT16K33

 I2CのインターフェースをもつコントローラHT16K33は、マトリクスで構成された複数LEDを点灯します。7セグメントLED、14セグメントLED、ドット・マトリクスなどに対応します。

 ここでは、4桁の14セグメントLEDを利用します。ebayで緑色を指定したら、最初の2桁が赤色、残りが緑色の製品が届きました。

表示器をつなぐ

 4桁の14セグメントLEDをつないで、温度と湿度を表示します。

 接続はI2Cです。写真の右二つの端子は電源用です。

プログラム

 HT16K33を駆動するプログラムをLED14seg.pyで保存します。

  Raspberry Pi 4 + Python3入門 <STEP1> (6) 7セグメントLED HT16K33 その1 QUAD ALPHANUMERIC 4桁

  Raspberry Pi 4 + Python3入門 <STEP1> (7) 7セグメントLED HT16K33 その2 BME280のデータ表示


import smbus, time
i2c = smbus.SMBus(1)
HT18K33_address = 0x70
# copyright David Johnson-Davies - www.technoblogy.com - 16th December 2019
#         0    1     2     3     4      5      6    7     8     9
num = [0xc3f, 0x6, 0xdb, 0x8f, 0xe6, 0x2069, 0xfd, 0x7, 0xff, 0xef]
minus = 0xc0
 
i2c.write_byte(HT18K33_address, (0x20 | 0x01))  # system setup
i2c.write_byte(HT18K33_address, (0x80 | 0b00000001))  # dispaly setup blink OFF
 
def clear():
    i2c.write_i2c_block_data(HT18K33_address, 0x00, [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
 
def digitData(n):
    nn = list(str(n))
    ff = []
    x = 0
    number = 0
    if '-' in str(n):
        number = [minus, minus >> 8]
        ff = ff + number
        nn = nn[1:]
        n = abs(n)
    dotnumber = str(n).index('.')
    for x in range(len(str(n))-3):
        lookupNumber = int(nn[x])
        num[lookupNumber] = num[lookupNumber] & ~0x4000
        number = [num[lookupNumber], num[lookupNumber] >> 8]
        ff = ff + number
    # dot number
    lookupNumber = int(nn[dotnumber-1])
    num[lookupNumber] = num[lookupNumber] | 0x4000  # dot
    number = [num[lookupNumber], num[lookupNumber] >> 8]
    ff = ff + number
    # last digit
    lookupNumber = int(nn[dotnumber+1])
    num[lookupNumber] = num[lookupNumber] & ~0x4000
    number = [num[lookupNumber], num[lookupNumber] >> 8]
    ff = ff + number
    return ff
 
def disp14seg(nnnn):
    i2c.write_i2c_block_data(HT18K33_address, 0x00, digitData(nnnn))

 本体のプログラムはsht40-HK.pyの名前で保存しました。


from bluepy import btle
import struct
import time
import LED14seg as LED14

LED14.clear()
LED14.disp14seg(0.0)

T_Characteristic_UUID = "00002235-b38d-4985-720e-0f993a68ee41"
H_Characteristic_UUID = "00001235-b38d-4985-720e-0f993a68ee41"

deviceAddr = "fb:b0:25:a6:9c:d9"
time.sleep(5)
LED14.disp14seg(1.0) peri = btle.Peripheral() peri.connect(deviceAddr, btle.ADDR_TYPE_RANDOM) #print('connect')
LED14.disp14seg(1.1) Temp = peri.getCharacteristics(uuid=T_Characteristic_UUID)[0] Humi = peri.getCharacteristics(uuid=H_Characteristic_UUID)[0] while 1: try: readTemp = Temp.read() temperature = struct.unpack('<f', readTemp)[0] #print(round(temperature,1)) LED14.clear() LED14.disp14seg(str(round(temperature,1))) time.sleep(5) readHumi = Humi.read() humidity = struct.unpack('<f', readHumi)[0] #print(round(humidity,1)) LED14.clear() LED14.disp14seg(str(round(humidity,1))) except btle.BTLEException: print('err! continue') #print("") time.sleep(5) peri.disconnect()

 温度と湿度を交互に表示します。

ブート時に自動実行

 ラズパイが立ち上がったら自動起動するように設定します。

 上記のプログラムは、/home/pi/sht40-HK.pyに保存しています。

  sudo nano /lib/systemd/system/sht40.service

でエディタを立ち上げ、次の内容を記述し、保存します。


[Unit]
Description = humidity&temperature
[Service]
ExecStart = /usr/bin/python /home/pi/sht40-HK.py
Restart = always
[Install]
WantedBy = multi-user.target

 ターミナルから、

  sudo systemctl enable sht40.service

で起動時に実行の設定を行い(一度でよい)、リブートします。

 電源だけ有効にして起動し、動作を確認します。

前へ

Smart gadget SHT4x を使って電子百葉箱を作る ⑤ ラズパイでセントラル

次へ

ArduinoでIoTにチャレンジ<その10> Arduino IDE 2.0になりました