CircuitPythonでLPS331APを読み出す

CircuitPythonでLPS331APを読み出して気圧と温度をコンソール出力するようにしました。よく見かけるのはI2Cですが、今回はSPIで行います。

import board
import busio
import digitalio
from digitalio import DigitalInOut, Direction, Pull
import time

def rreg(add):
    result = bytearray(2)
    cs.value = False
    spi.write_readinto(bytes([add,0x00]),result)
    cs.value = True
    return result[1]    

def Pres():
    P = rreg(0xAA)              # P_H
    P = (P << 8) | rreg(0xA9)   # P_L
    P = (P << 8) | rreg(0xA8)   # P_LL
    P = P/4096.0
    return P

def Temp():
    T = rreg(0xAC)              # T_H
    T = (T << 8) | rreg(0xAB)   # T_L
    if T >= 0x8000 : T -= 0x10000
    T = 42.5 + T/480.0
    return T

# CS
cs=digitalio.DigitalInOut(board.D1)
cs.direction=digitalio.Direction.OUTPUT
cs.value=True

# SPI
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
while not spi.try_lock():
    pass
spi.configure(baudrate=10000000, phase=0, polarity=0)

# WHOAMI
print(hex(rreg(0x8F)))

# init
result = bytearray(2)
cs.value = False
spi.write_readinto(bytes([0x20,0x90]),result)   # CTRL1 REG
cs.value = True

# loop
while True:
    print(Pres(),Temp())
    time.sleep(1)

これをcode.pyとして保存すると以下のように動作します。

Code stopped by auto-reload.
ソフトリブート

オートリロードがオンです。ファイルをUSB経由で保存するだけで実行できます。REPLに入ると無効化します。

code.py 出力:
0xbb
1005.51 31.2667
1005.58 31.2833
1005.5 31.2771
1005.6 31.3104
1005.57 31.3042
1005.66 31.3083
1005.77 31.3458
1005.7 31.3438
1005.63 31.3063
1005.71 31.3417
1005.62 31.3125
1005.65 31.3146

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)