#async #embedded #embedded-hal-driver #no-std

no-std person-sensor

An embedded-hal driver for the Useful Things Person Sensor

6 releases

0.3.0 Sep 2, 2024
0.2.3 Sep 1, 2024
0.2.2 Aug 18, 2024
0.1.0 Aug 16, 2024

#294 in Hardware support

Download history 151/week @ 2024-08-12 118/week @ 2024-08-19 68/week @ 2024-08-26 286/week @ 2024-09-02

623 downloads per month

MIT/Apache

19KB
281 lines

Useful Things Person Sensor

A small driver for the Useful Things Person Sensor.

Original developer guide

This driver has been tested with v1.1 of the sensor, but should also work with v1 and v2. If you're able to validate the other board revisions, please open a pr to update this message :)

Usage

The sensor offers two modes: continuous and single shot. It can be converted between the two modes, and the compiler will prevent you from misusing functionality that is only available in a specific mode, or when an interrupt pin is provided.

use person_sensor::PersonSensorBuilder;

let i2c = /* ... */;
let interrupt_pin = /* ... */;

// The driver can be initialized with or without the interrupt pin using the builder
let mut person_sensor = PersonSensorBuilder::new_standby(i2c, true)
    .with_interrupt(interrupt_pin) // optional
    .build()
    .await
    .unwrap();

let detections = person_sensor.capture_once().await.unwrap();

// ERROR: an interrupt pin was provided, but person_sensor is in standby mode
// person_sensor.wait_for_person().await.unwrap();

// To use the functionality in continuous mode, convert the sensor like below,
// or use the builder with new_continuous(...)
let mut person_sensor = sensor.into_continuous_mode();

// Now we meet all the requirements to wait for the next detection using the interrupt
_ = person_sensor.wait_for_person().await.unwrap();
// Read the latest detections.
// Note wait_for_person() does not automatically read the detections
let detections = person_sensor.get_detections().await.unwrap();

Examples

To run the examples on a pi pico, it should be sufficient to enter bootloader mode and run:

cd examples
cargo run --bin <example_name> --release

License

Licensed under either of

Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0) MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT) at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~575KB
~11K SLoC