samples: sensor: lps22hh: add standalone sample
Although this sensor is demonstrated by the X-NUCLEO-IKS01A3 sample, maintenance of the driver is simplified if it can be tested in isolation. Provide a sample modeled on hts221. Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
This commit is contained in:
parent
2c529ce3b6
commit
c2723054f6
5 changed files with 168 additions and 0 deletions
8
samples/sensor/lps22hh/CMakeLists.txt
Normal file
8
samples/sensor/lps22hh/CMakeLists.txt
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.13.1)
|
||||||
|
include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE)
|
||||||
|
project(lps22hh)
|
||||||
|
|
||||||
|
FILE(GLOB app_sources src/*.c)
|
||||||
|
target_sources(app PRIVATE ${app_sources})
|
54
samples/sensor/lps22hh/README.rst
Normal file
54
samples/sensor/lps22hh/README.rst
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
.. _lps22hh:
|
||||||
|
|
||||||
|
LPS22HH: Temperature and Pressure Monitor
|
||||||
|
#########################################
|
||||||
|
|
||||||
|
Overview
|
||||||
|
********
|
||||||
|
This sample periodically reads pressure from the LPS22HH MEMS pressure
|
||||||
|
sensor and displays it on the console.
|
||||||
|
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
************
|
||||||
|
|
||||||
|
This sample uses the LPS22HH sensor controlled using the I2C interface.
|
||||||
|
|
||||||
|
References
|
||||||
|
**********
|
||||||
|
|
||||||
|
- LPS22HH: http://www.st.com/en/mems-and-sensors/lps22hh.html
|
||||||
|
|
||||||
|
Building and Running
|
||||||
|
********************
|
||||||
|
|
||||||
|
This project outputs sensor data to the console. It requires an LPS22HH
|
||||||
|
sensor, which is present on the X-NUCLEO-IKS01A3 shield.
|
||||||
|
|
||||||
|
.. zephyr-app-commands::
|
||||||
|
:zephyr-app: samples/sensor/lps22hh
|
||||||
|
:board: nrf52_pca10040
|
||||||
|
:shield: x_nucleo_iks01a3
|
||||||
|
:goals: build
|
||||||
|
:compact:
|
||||||
|
|
||||||
|
Sample Output
|
||||||
|
=============
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
Configured for triggered collection at 1 Hz
|
||||||
|
Observation: 1
|
||||||
|
Pressure: 97.474 kPa
|
||||||
|
Temperature: 22.19 C
|
||||||
|
Observation: 2
|
||||||
|
Pressure: 97.466 kPa
|
||||||
|
Temperature: 22.21 C
|
||||||
|
Observation: 3
|
||||||
|
Pressure: 97.473 kPa
|
||||||
|
Temperature: 22.21 C
|
||||||
|
Observation: 4
|
||||||
|
Pressure: 97.455 kPa
|
||||||
|
Temperature: 22.21 C
|
||||||
|
|
||||||
|
<repeats endlessly every second>
|
4
samples/sensor/lps22hh/prj.conf
Normal file
4
samples/sensor/lps22hh/prj.conf
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
CONFIG_STDOUT_CONSOLE=y
|
||||||
|
CONFIG_I2C=y
|
||||||
|
CONFIG_SENSOR=y
|
||||||
|
CONFIG_LPS22HH=y
|
15
samples/sensor/lps22hh/sample.yaml
Normal file
15
samples/sensor/lps22hh/sample.yaml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
sample:
|
||||||
|
name: LPS22HH Temperature and Pressure Monitor
|
||||||
|
tests:
|
||||||
|
sample.sensor.lps22hh.nrf52.iks01a3:
|
||||||
|
harness: console
|
||||||
|
platform_whitelist: nrf52_pca10040
|
||||||
|
tags: sensors
|
||||||
|
depends_on: i2c
|
||||||
|
extra_args: SHIELD=x_nucleo_iks01a3
|
||||||
|
harness_config:
|
||||||
|
type: multi_line
|
||||||
|
ordered: yes
|
||||||
|
regex:
|
||||||
|
- "Temperature: (.*)"
|
||||||
|
- "Pressure: (.*)"
|
87
samples/sensor/lps22hh/src/main.c
Normal file
87
samples/sensor/lps22hh/src/main.c
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2017 Linaro Limited
|
||||||
|
* Copyright (c) 2019 Nordic Semiconductor ASA
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <zephyr.h>
|
||||||
|
#include <device.h>
|
||||||
|
#include <drivers/sensor.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/util.h>
|
||||||
|
|
||||||
|
static void process_sample(struct device *dev)
|
||||||
|
{
|
||||||
|
static unsigned int obs;
|
||||||
|
struct sensor_value pressure, temp;
|
||||||
|
|
||||||
|
if (sensor_sample_fetch(dev) < 0) {
|
||||||
|
printf("Sensor sample update error\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sensor_channel_get(dev, SENSOR_CHAN_PRESS, &pressure) < 0) {
|
||||||
|
printf("Cannot read LPS22HH pressure channel\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sensor_channel_get(dev, SENSOR_CHAN_AMBIENT_TEMP, &temp) < 0) {
|
||||||
|
printf("Cannot read LPS22HH temperature channel\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
++obs;
|
||||||
|
printf("Observation: %u\n", obs);
|
||||||
|
|
||||||
|
/* display pressure */
|
||||||
|
printf("Pressure: %.3f kPa\n", sensor_value_to_double(&pressure));
|
||||||
|
|
||||||
|
/* display temperature */
|
||||||
|
printf("Temperature: %.2f C\n", sensor_value_to_double(&temp));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static void lps22hh_handler(struct device *dev,
|
||||||
|
struct sensor_trigger *trig)
|
||||||
|
{
|
||||||
|
process_sample(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
struct device *dev = device_get_binding("LPS22HH");
|
||||||
|
|
||||||
|
if (dev == NULL) {
|
||||||
|
printf("Could not get LPS22HH device\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_LPS22HH_TRIGGER)) {
|
||||||
|
struct sensor_value attr = {
|
||||||
|
.val1 = 1,
|
||||||
|
};
|
||||||
|
struct sensor_trigger trig = {
|
||||||
|
.type = SENSOR_TRIG_DATA_READY,
|
||||||
|
.chan = SENSOR_CHAN_ALL,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (sensor_attr_set(dev, SENSOR_CHAN_ALL,
|
||||||
|
SENSOR_ATTR_SAMPLING_FREQUENCY, &attr) < 0) {
|
||||||
|
printf("Cannot configure sampling rate\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (sensor_trigger_set(dev, &trig, lps22hh_handler) < 0) {
|
||||||
|
printf("Cannot configure trigger\n");
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
printk("Configured for triggered collection at %u Hz\n",
|
||||||
|
attr.val1);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!IS_ENABLED(CONFIG_LPS22HH_TRIGGER)) {
|
||||||
|
process_sample(dev);
|
||||||
|
k_sleep(K_MSEC(2000));
|
||||||
|
}
|
||||||
|
k_sleep(K_FOREVER);
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue