From b8e95fbb87ecf0bf85d3b723c8a592638604a9e8 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Fri, 28 Nov 2025 10:32:46 +0100 Subject: [PATCH] scd4x: add support for SCD41 single-shot measurements I have a SCD41, and would like to use it for single shot measurements instead of "low power periodic" measurements to achieve much lower average current consumption. --- scd4x/registers.go | 1 + scd4x/scd4x.go | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/scd4x/registers.go b/scd4x/registers.go index af057b428..fb258640a 100644 --- a/scd4x/registers.go +++ b/scd4x/registers.go @@ -22,4 +22,5 @@ const ( CmdStartLowPowerPeriodicMeasurement = 0x21AC CmdStartPeriodicMeasurement = 0x21B1 CmdStopPeriodicMeasurement = 0x3F86 + CmdMeasureSingleShot = 0x219D ) diff --git a/scd4x/scd4x.go b/scd4x/scd4x.go index e605254d3..62e97d745 100644 --- a/scd4x/scd4x.go +++ b/scd4x/scd4x.go @@ -82,6 +82,13 @@ func (d *Device) StartLowPowerPeriodicMeasurement() error { return d.sendCommand(CmdStartLowPowerPeriodicMeasurement) } +// MeasureSingleShot starts a single measurement cycle (SCD41 only). After this +// command is complete, the caller should wait for 5000ms before trying to read +// the result. +func (d *Device) MeasureSingleShot() error { + return d.sendCommand(CmdMeasureSingleShot) +} + // ReadData reads the data from the sensor and caches it. func (d *Device) ReadData() error { if err := d.sendCommandWithResult(CmdReadMeasurement, d.rx[0:9]); err != nil {