Skip to content

Commit c60712f

Browse files
WSEN-ISDS: add support for temperature sensor
1 parent 41db1b0 commit c60712f

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed

CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
- Fri3d Camp 2024 Board: add startup light and sound
44
- Fri3d Camp 2024 Board: workaround ADC2+WiFi conflict by temporarily disable WiFi to measure battery level
55
- Fri3d Camp 2024 Board: improve battery monitor calibration to fix 0.1V delta
6+
- Fri3d Camp 2024 Board: add WSEN-ISDS 6-Axis Inertial Measurement Unit (IMU) support (including temperature)
67
- API: improve and cleanup animations
78
- API: SharedPreferences: add erase_all() function
89
- API: add defaults handling to SharedPreferences and only save non-defaults
910
- API: restore sys.path after starting app
1011
- API: add AudioFlinger for audio playback (i2s DAC and buzzer)
1112
- API: add LightsManager for multicolor LEDs
12-
- API: add SensorManager for IMU/accelerometers, temperature sensors etc.
13+
- API: add SensorManager for generic handling of IMUs and temperature sensors
1314
- About app: add free, used and total storage space info
1415
- AppStore app: remove unnecessary scrollbar over publisher's name
1516
- Camera app: massive overhaul!

internal_filesystem/lib/mpos/hardware/drivers/wsen_isds.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ class Wsen_Isds:
3535
_ISDS_STATUS_REG = 0x1E # Status data register
3636
_ISDS_WHO_AM_I = 0x0F # WHO_AM_I register
3737

38+
_REG_TEMP_OUT_L = 0x20
39+
3840
_REG_G_X_OUT_L = 0x22
3941
_REG_G_Y_OUT_L = 0x24
4042
_REG_G_Z_OUT_L = 0x26
@@ -354,6 +356,20 @@ def read_angular_velocities(self):
354356

355357
return g_x, g_y, g_z
356358

359+
@property
360+
def temperature(self) -> float:
361+
temp_raw = self._read_raw_temperature()
362+
return ((temp_raw / 256.0) + 25.0)
363+
364+
def _read_raw_temperature(self):
365+
"""Read raw temperature data."""
366+
if not self._temp_data_ready():
367+
raise Exception("temp sensor data not ready")
368+
369+
raw = self.i2c.readfrom_mem(self.address, Wsen_Isds._REG_TEMP_OUT_L, 2)
370+
raw_temp = self._convert_from_raw(raw[0], raw[1])
371+
return raw_temp
372+
357373
def _read_raw_angular_velocities(self):
358374
"""Read raw gyroscope data."""
359375
if not self._gyro_data_ready():
@@ -420,6 +436,10 @@ def _gyro_data_ready(self):
420436
"""Check if gyroscope data is ready."""
421437
return self._get_status_reg()[1]
422438

439+
def _temp_data_ready(self):
440+
"""Check if accelerometer data is ready."""
441+
return self._get_status_reg()[2]
442+
423443
def _acc_gyro_data_ready(self):
424444
"""Check if both accelerometer and gyroscope data are ready."""
425445
status_reg = self._get_status_reg()

internal_filesystem/lib/mpos/sensor_manager.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -697,9 +697,7 @@ def read_gyroscope(self):
697697
)
698698

699699
def read_temperature(self):
700-
"""Read temperature in °C (not implemented in WSEN_ISDS driver)."""
701-
# WSEN_ISDS has temperature sensor but not exposed in current driver
702-
return None
700+
return self.sensor.temperature
703701

704702
def calibrate_accelerometer(self, samples):
705703
"""Calibrate accelerometer using hardware calibration."""
@@ -807,6 +805,15 @@ def _register_wsen_isds_sensors():
807805
max_range="±500 deg/s",
808806
resolution="0.0175 deg/s",
809807
power_ma=0.65
808+
),
809+
Sensor(
810+
name="WSEN_ISDS Temperature",
811+
sensor_type=TYPE_IMU_TEMPERATURE,
812+
vendor="Würth Elektronik",
813+
version=1,
814+
max_range="-40°C to +85°C",
815+
resolution="0.004°C",
816+
power_ma=0
810817
)
811818
]
812819

0 commit comments

Comments
 (0)