Skip to content

Commit b3f139f

Browse files
committed
add SPI support and example
1 parent 776f5d3 commit b3f139f

File tree

3 files changed

+52
-13
lines changed

3 files changed

+52
-13
lines changed

adafruit_spa06_003.py

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,17 @@
3030
import time
3131

3232
from adafruit_bus_device.i2c_device import I2CDevice
33-
from adafruit_register.i2c_bit import ROBit, RWBit
34-
from adafruit_register.i2c_bits import ROBits, RWBits
35-
from adafruit_register.i2c_struct import ROUnaryStruct
33+
from adafruit_bus_device.spi_device import SPIDevice
34+
from adafruit_register.register_accessor import I2CRegisterAccessor, SPIRegisterAccessor
35+
from adafruit_register.register_bit import ROBit, RWBit
36+
from adafruit_register.register_bits import ROBits, RWBits
3637
from micropython import const
3738

3839
try:
3940
import typing
4041

41-
from busio import I2C
42+
from busio import I2C, SPI
43+
from digitalio import DigitalInOut
4244
except ImportError:
4345
pass
4446

@@ -152,7 +154,7 @@
152154
}
153155

154156

155-
class SPA06_003_I2C:
157+
class SPA06_003:
156158
"""
157159
SPA06-003 temperature and pressure sensor breakout CircuitPython driver.
158160
@@ -386,11 +388,26 @@ class SPA06_003_I2C:
386388
24, SPA06_003_REG_PSR_B2, 0, register_width=3, lsb_first=False, signed=True
387389
)
388390

389-
def __init__(self, i2c_bus: I2C, address: int = SPA06_003_DEFAULT_ADDR):
390-
try:
391-
self.i2c_device = I2CDevice(i2c_bus, address)
392-
except ValueError:
393-
raise ValueError(f"No I2C device found at address 0x{address:02X}")
391+
def __init__(
392+
self,
393+
i2c: I2C = None,
394+
address: int = SPA06_003_DEFAULT_ADDR,
395+
spi: SPI = None,
396+
cs: DigitalInOut = None,
397+
):
398+
if spi is not None and cs is not None:
399+
try:
400+
self.spi_device = SPIDevice(spi, cs, baudrate=1000000, phase=1, polarity=1)
401+
self.register_accessor = SPIRegisterAccessor(self.spi_device)
402+
except ValueError:
403+
raise ValueError(f"No SPI device found.")
404+
405+
elif i2c is not None:
406+
try:
407+
i2c_device = I2CDevice(i2c, address)
408+
self.register_accessor = I2CRegisterAccessor(i2c_device)
409+
except ValueError:
410+
raise ValueError(f"No I2C device found.")
394411

395412
if self.chip_id != 0x11:
396413
raise ValueError("SPA06_003_I2C device not found")

examples/spa06_003_simpletest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66

77
import board
88

9-
from adafruit_spa06_003 import SPA06_003_I2C
9+
from adafruit_spa06_003 import SPA06_003
1010

1111
i2c = board.I2C()
12-
spa = SPA06_003_I2C(i2c)
12+
spa = SPA06_003(i2c)
1313

1414

1515
while True:
1616
if spa.temperature_data_ready and spa.pressure_data_ready:
1717
print(f"Temperature: {spa.temperature} °C", end=" ")
1818
print(f"Pressure: {spa.pressure} hPa")
1919

20-
time.sleep(0.01)
20+
time.sleep(0.1)
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# SPDX-FileCopyrightText: Copyright (c) 2025 Tim Cocks for Adafruit Industries
2+
#
3+
# SPDX-License-Identifier: MIT
4+
import time
5+
6+
import board
7+
from digitalio import DigitalInOut
8+
9+
from adafruit_spa06_003 import SPA06_003
10+
11+
spi = board.SPI()
12+
cs = DigitalInOut(board.D10)
13+
14+
spa = SPA06_003(spi=spi, cs=cs)
15+
16+
17+
while True:
18+
if spa.temperature_data_ready and spa.pressure_data_ready:
19+
print(f"Temperature: {spa.temperature} °C", end=" ")
20+
print(f"Pressure: {spa.pressure} hPa")
21+
22+
time.sleep(0.1)

0 commit comments

Comments
 (0)