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