CircuitPython 10行プログラミング STEP7 (2) 気圧センサLPS22HB

 前回、気圧センサLPS22HBをI2Cバスにつなぎ、スレーブ・アドレス0x5dを検出しました。

プログラムで気圧と温度を表示

 LPS22HBのデータシートを読むと、パワーオン後Power downモードになっています。CTRL_REG1 (10h)に0x10を書き込んで、1Hzでデータを変換するようにします。

 また、CTRL_REG2 (11h)では、ONE_SHOTの変換がディセーブルになっているので、読み出す前には毎回イネーブルに設定します。CTRL_REG2 (11h)は、デフォルトが0x10でRegister address automatically incremented during a multiple byte access with a serial interface (I2C or SPI).がイネーブルになってるので、これはそのまま生かします。したがって、0x11を書き込みます。

 気圧データは0x28から3バイト、温度データは0x2bから2バイトで保存されているのを読み出します。どちらも2の補数形式ですが、気圧は負の値はないので無視します。今回、温度は正の値だけを対象にします。

 気圧データは4096で割るとhPaの値が得られます。温度データは100で割ると摂氏の値が得られます。

 どちらも、読み出しの時、最上位ビットはマスク(| 0x80)をしておきます。


import board
import busio
import time

LPS22HB_adr=0x5d

i2c = busio.I2C(board.SCL, board.SDA)

while not i2c.try_lock():
    pass

i2c.writeto(LPS22HB_adr, bytearray([0x10,0x10]))
time.sleep(1)

while 1:
    i2c.writeto(LPS22HB_adr, bytearray([0x11,0x11]))
    i2c.writeto(LPS22HB_adr, bytes([0x28 | 0x80]))
    result = bytearray(3)
    i2c.readfrom_into(LPS22HB_adr, result)
    print(result)
    press = (result[2]<<16 | result[1]<<8 | result[0]) / 4096.0
    print(str(press) + 'hPa')

    i2c.writeto(LPS22HB_adr, bytes([0x2b | 0x80]))
    result = bytearray(2)
    i2c.readfrom_into(LPS22HB_adr, result)
    print(result)
    press = (result[1]<<8 | result[0]) / 100.0
    print(str(press) + '`C')
    time.sleep(2)

i2c.unlock()

 実行時の様子です。

ライブラリを利用して気圧と温度を読み出す

 Adafruitのライブラリを利用します。CIRCUITPYドライブのlibへ、にダウンロードしたadafruit-circuitpython-bundle-7.x-mpy-20220119の中のlibからadafruit_lps2x.mpyファイルとadafruit_registerフォルダをコピーします。examplesの中からlps2x_simpletest.pyをエディタMuへコピーしてします。

 デフォルトがLPS25HBなのでコメントアウトし、lps = adafruit_lps2x.LPS22(i2c)を生かして実行します。

14セグメントLEDに表示

 アマゾンで入手した4桁の14セグメントLEDをI2Cバスにつなぎます。

 CIRCUITPYドライブのlibへ、にダウンロードしたadafruit-circuitpython-bundle-7.x-mpy-20220119の中のlibからadafruit_ht16k33フォルダをコピーします。examplesの中からht16k33_segments_simpletest.pyをエディタMuへコピーしてします。

 display = segments.Seg14x4(i2c)を有効にしてから実行します。問題なくデモが動き、数字やアルファベットが表示されます。

 LPS22HBの測定データを14セグメントLEDに表示できるように修正します。


# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
# Author: Tony DiCola
import time
import board
import busio
import adafruit_lps2x
from adafruit_ht16k33 import segments

# Create the I2C interface.
i2c = busio.I2C(board.SCL, board.SDA)

lps = adafruit_lps2x.LPS22(i2c)
display = segments.Seg14x4(i2c)

# Clear the display.
display.fill(0)

while True:
    print("Pressure: %.2f hPa" % lps.pressure)
    display.print(str(int(lps.pressure)))
    time.sleep(2)
    print("Temperature: %.2f C" % lps.temperature)
    display.print(str(float(lps.temperature)))
    time.sleep(2)

連載 CircuitPython 10行プログラミング Step8 release8.0.0 Alpha1

(1) Seeed XIAO BLE Senseの準備

(2) 6軸IMU LSM6DS3TR-C

(3) 6軸IMU LSM6DS3TR-CとBLE

(4) I2Cで温度センサTMP117

(5) アナログ入力 ジョイスティック


連載 CircuitPython 10行プログラミング Step7 release7.2.0-alpha.1

(1) XIAO RP2040の準備と動作確認

(2) 気圧センサLPS22HB

(3) BMP280と7セグメントLEDの表示

(4) LPS22HBと7セグメントLEDの表示


連載 CircuitPython 10行プログラミング Step6 release7.0.0

(1) Nano RP2040 Connectの準備と動作確認

(2) Nano RP2040 Connectの搭載センサIMU LSM6DSOX

(3) Nano RP2040 ConnectにI2CでIMUセンサLSM9DS1

(4) Nano RP2040 ConnectのWi-Fi

(5) Nano RP2040 Connectで確度0.1℃の温度計TMP117+ht16k33


連載 CircuitPython 10行プログラミング Step5

(1) Raspberry Pi Picoの準備と動作確認 (2) digitalio (3) Raspberry Pi Picoのmicrocontroller (4) アナログ入力 (5) PWM出力 (6) I2S出力 (7) I2C ① OLEDディスプレイ (8) I2C ② 温湿度センサ (9) I2C ③ 気圧センサ (10) Raspberry Pi PicoのSPI ① TFTディスプレイ


連載 CircuitPython 10行プログラミング Step4

(1) Adafruit Feather nRF52840 Senseの準備 (2) Lチカ (3) 搭載センサ (4) BLE①ペリフェラル (5) BLE②セントラル


連載 CircuitPython 10行プログラミング Step3

(1) Metro M4 Express AirLift (WiFi)の準備 (2) ロータリ・エンコーダ (3) eInk/ePaper (4) Wi-Fi その1 接続 (5) Wi-Fi その2 ソケット (6) Wi-Fi その3 電圧測定 (7) 気圧センサLPS25HB (8) サーミスタ


連載 CircuitPython 10行プログラミング Step2

(1) Grand Central M4 Expressの準備 (2) グラフィック・ディスプレイOLED (3) RTC DS3231 (4) モジュール/SDメモリ (5) 複合センサ BME680 (6) ロードセル+ADS1220 (7) サーボ・モータ① (8) サーボ・モータ② (9) I2S UDA1334A (10) D-Aコンバータ


連載 CircuitPython 10行プログラミング

(1) Trinket M0の準備 (2) ディジタルI/O (3) アナログ入出力 (4) I2C 温湿度センサSi7021 (5) SPI 熱電対+MAX31855 (6) UART 距離センサTFMini (7) 1-Wire 温度DS18B20 (8) ロータリ・エンコーダ (9) 7セグメントLED (10) FANコントロール (11) UART GPS (12) I2C Lチカ MCP23017

前へ

CircuitPython 10行プログラミング STEP7 (1) XIAO RP2040の準備と動作確認

次へ

CircuitPython 10行プログラミング STEP7 (3) BMP280と7セグメントLEDの表示