Garage Door Monitor and Opener

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Introduction

This system implements a simple garage door opener and environmental monitor. The hardware connects to the internet using Wi-Fi then on to the Pelion Device Management Platform which provides device monitoring and secure firmware updates over the air (FOTA). Pelion Device Management provides a flexible set of REST APIs which we will use to communicate to a web application running on an EC-2 instance in AWS. The web application will serve a web page where we can monitor and control our garage..

This project is intended to work on the DISCO-L475VG-IOT01A from ST Microelectronics It implements a simple actuator to drive a relay to simulate pushing the "open" button on older style garage doors which do not use a rolling code interface.

The system is designed to be mounted over the door so that the on board time of flight sensor can be used to detect if the door is open or closed.

The system also monitors temperature, humidity and barometric pressure.

https://os.mbed.com/media/uploads/JimCarver/garageopener.jpg

Hardware Requirements:

DISCO-L475G-IOT01A https://os.mbed.com/platforms/ST-Discovery-L475E-IOT01A/

Seeed Studio Grove Relay module https://www.seeedstudio.com/Grove-Relay.html

Seeed Studio Grove cable, I used this one: https://www.seeedstudio.com/Grove-4-pin-Male-Jumper-to-Grove-4-pin-Conversion-Cable-5-PCs-per-Pack.html

Connect to the PMOD connector like this:

https://os.mbed.com/media/uploads/JimCarver/opener.jpg

This shows how I installed so that the time of flight sensor can detect when the door is open

https://os.mbed.com/media/uploads/JimCarver/opener1.jpg https://os.mbed.com/media/uploads/JimCarver/opener2.jpg

To use the project:

You will also need a Pelion developers account.

I suggest you first use the Pelion quick state to become familiar with Pelion Device Management. https://os.mbed.com/guides/connect-device-to-pelion/1/?board=ST-Discovery-L475E-IOT01A

Web Interface

For my web interface I am running node-red under Ubuntu in an EC2 instance on AWS. This can run for 12 month within the constraints of their free tier. Here is a tutorial: https://nodered.org/docs/getting-started/aws

You will also need to install several node-red add ons:

sudo npm install -g node-red-dashboard

sudo npm install -g node-red-contrib-mbed-cloud

sudo npm istall -g node-red-contrib-moment

After starting node-red import the contents of GarageFlow.txt from the project, pin the flow into the page.

To enable your web app to access your Pelion account you need an API key.

First you will neet to use your Pelion account to create an API key.

https://os.mbed.com/media/uploads/JimCarver/api_portal.jpg

Now we need to apply that API key to your Node-Red flow.

https://os.mbed.com/media/uploads/JimCarver/api_node-red.jpg

Committer:
JimCarver
Date:
Thu Dec 05 19:03:48 2019 +0000
Revision:
37:ec1124e5ec1f
Parent:
18:a15bfe7aaebd
Bug fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 18:a15bfe7aaebd 1 /**
screamer 18:a15bfe7aaebd 2 ******************************************************************************
screamer 18:a15bfe7aaebd 3 * @file HTS221_driver.h
screamer 18:a15bfe7aaebd 4 * @author HESA Application Team
screamer 18:a15bfe7aaebd 5 * @version V1.1
screamer 18:a15bfe7aaebd 6 * @date 10-August-2016
screamer 18:a15bfe7aaebd 7 * @brief HTS221 driver header file
screamer 18:a15bfe7aaebd 8 ******************************************************************************
screamer 18:a15bfe7aaebd 9 * @attention
screamer 18:a15bfe7aaebd 10 *
screamer 18:a15bfe7aaebd 11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
screamer 18:a15bfe7aaebd 12 *
screamer 18:a15bfe7aaebd 13 * Redistribution and use in source and binary forms, with or without modification,
screamer 18:a15bfe7aaebd 14 * are permitted provided that the following conditions are met:
screamer 18:a15bfe7aaebd 15 * 1. Redistributions of source code must retain the above copyright notice,
screamer 18:a15bfe7aaebd 16 * this list of conditions and the following disclaimer.
screamer 18:a15bfe7aaebd 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
screamer 18:a15bfe7aaebd 18 * this list of conditions and the following disclaimer in the documentation
screamer 18:a15bfe7aaebd 19 * and/or other materials provided with the distribution.
screamer 18:a15bfe7aaebd 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
screamer 18:a15bfe7aaebd 21 * may be used to endorse or promote products derived from this software
screamer 18:a15bfe7aaebd 22 * without specific prior written permission.
screamer 18:a15bfe7aaebd 23 *
screamer 18:a15bfe7aaebd 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
screamer 18:a15bfe7aaebd 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
screamer 18:a15bfe7aaebd 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
screamer 18:a15bfe7aaebd 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
screamer 18:a15bfe7aaebd 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
screamer 18:a15bfe7aaebd 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
screamer 18:a15bfe7aaebd 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
screamer 18:a15bfe7aaebd 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
screamer 18:a15bfe7aaebd 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
screamer 18:a15bfe7aaebd 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
screamer 18:a15bfe7aaebd 34 *
screamer 18:a15bfe7aaebd 35 ******************************************************************************
screamer 18:a15bfe7aaebd 36 */
screamer 18:a15bfe7aaebd 37
screamer 18:a15bfe7aaebd 38 /* Define to prevent recursive inclusion -------------------------------------*/
screamer 18:a15bfe7aaebd 39 #ifndef __HTS221_DRIVER__H
screamer 18:a15bfe7aaebd 40 #define __HTS221_DRIVER__H
screamer 18:a15bfe7aaebd 41
screamer 18:a15bfe7aaebd 42 #include <stdint.h>
screamer 18:a15bfe7aaebd 43
screamer 18:a15bfe7aaebd 44 #ifdef __cplusplus
screamer 18:a15bfe7aaebd 45 extern "C" {
screamer 18:a15bfe7aaebd 46 #endif
screamer 18:a15bfe7aaebd 47
screamer 18:a15bfe7aaebd 48 /* Uncomment the line below to expanse the "assert_param" macro in the drivers code */
screamer 18:a15bfe7aaebd 49 #define USE_FULL_ASSERT_HTS221
screamer 18:a15bfe7aaebd 50
screamer 18:a15bfe7aaebd 51 /* Exported macro ------------------------------------------------------------*/
screamer 18:a15bfe7aaebd 52 #ifdef USE_FULL_ASSERT_HTS221
screamer 18:a15bfe7aaebd 53
screamer 18:a15bfe7aaebd 54 /**
screamer 18:a15bfe7aaebd 55 * @brief The assert_param macro is used for function's parameters check.
screamer 18:a15bfe7aaebd 56 * @param expr: If expr is false, it calls assert_failed function which reports
screamer 18:a15bfe7aaebd 57 * the name of the source file and the source line number of the call
screamer 18:a15bfe7aaebd 58 * that failed. If expr is true, it returns no value.
screamer 18:a15bfe7aaebd 59 * @retval None
screamer 18:a15bfe7aaebd 60 */
screamer 18:a15bfe7aaebd 61 #define HTS221_assert_param(expr) ((expr) ? (void)0 : HTS221_assert_failed((uint8_t *)__FILE__, __LINE__))
screamer 18:a15bfe7aaebd 62 /* Exported functions ------------------------------------------------------- */
screamer 18:a15bfe7aaebd 63 void HTS221_assert_failed(uint8_t* file, uint32_t line);
screamer 18:a15bfe7aaebd 64 #else
screamer 18:a15bfe7aaebd 65 #define HTS221_assert_param(expr) ((void)0)
screamer 18:a15bfe7aaebd 66 #endif /* USE_FULL_ASSERT_HTS221 */
screamer 18:a15bfe7aaebd 67
screamer 18:a15bfe7aaebd 68 /** @addtogroup Environmental_Sensor
screamer 18:a15bfe7aaebd 69 * @{
screamer 18:a15bfe7aaebd 70 */
screamer 18:a15bfe7aaebd 71
screamer 18:a15bfe7aaebd 72 /** @addtogroup HTS221_DRIVER
screamer 18:a15bfe7aaebd 73 * @{
screamer 18:a15bfe7aaebd 74 */
screamer 18:a15bfe7aaebd 75
screamer 18:a15bfe7aaebd 76 /* Exported Types -------------------------------------------------------------*/
screamer 18:a15bfe7aaebd 77 /** @defgroup HTS221_Exported_Types
screamer 18:a15bfe7aaebd 78 * @{
screamer 18:a15bfe7aaebd 79 */
screamer 18:a15bfe7aaebd 80
screamer 18:a15bfe7aaebd 81
screamer 18:a15bfe7aaebd 82 /**
screamer 18:a15bfe7aaebd 83 * @brief Error code type.
screamer 18:a15bfe7aaebd 84 */
screamer 18:a15bfe7aaebd 85 typedef enum {HTS221_OK = (uint8_t)0, HTS221_ERROR = !HTS221_OK} HTS221_Error_et;
screamer 18:a15bfe7aaebd 86
screamer 18:a15bfe7aaebd 87 /**
screamer 18:a15bfe7aaebd 88 * @brief State type.
screamer 18:a15bfe7aaebd 89 */
screamer 18:a15bfe7aaebd 90 typedef enum {HTS221_DISABLE = (uint8_t)0, HTS221_ENABLE = !HTS221_DISABLE} HTS221_State_et;
screamer 18:a15bfe7aaebd 91 #define IS_HTS221_State(MODE) ((MODE == HTS221_ENABLE) || (MODE == HTS221_DISABLE))
screamer 18:a15bfe7aaebd 92
screamer 18:a15bfe7aaebd 93 /**
screamer 18:a15bfe7aaebd 94 * @brief Bit status type.
screamer 18:a15bfe7aaebd 95 */
screamer 18:a15bfe7aaebd 96 typedef enum {HTS221_RESET = (uint8_t)0, HTS221_SET = !HTS221_RESET} HTS221_BitStatus_et;
screamer 18:a15bfe7aaebd 97 #define IS_HTS221_BitStatus(MODE) ((MODE == HTS221_RESET) || (MODE == HTS221_SET))
screamer 18:a15bfe7aaebd 98
screamer 18:a15bfe7aaebd 99 /**
screamer 18:a15bfe7aaebd 100 * @brief Humidity average.
screamer 18:a15bfe7aaebd 101 */
screamer 18:a15bfe7aaebd 102 typedef enum
screamer 18:a15bfe7aaebd 103 {
screamer 18:a15bfe7aaebd 104 HTS221_AVGH_4 = (uint8_t)0x00, /*!< Internal average on 4 samples */
screamer 18:a15bfe7aaebd 105 HTS221_AVGH_8 = (uint8_t)0x01, /*!< Internal average on 8 samples */
screamer 18:a15bfe7aaebd 106 HTS221_AVGH_16 = (uint8_t)0x02, /*!< Internal average on 16 samples */
screamer 18:a15bfe7aaebd 107 HTS221_AVGH_32 = (uint8_t)0x03, /*!< Internal average on 32 samples */
screamer 18:a15bfe7aaebd 108 HTS221_AVGH_64 = (uint8_t)0x04, /*!< Internal average on 64 samples */
screamer 18:a15bfe7aaebd 109 HTS221_AVGH_128 = (uint8_t)0x05, /*!< Internal average on 128 samples */
screamer 18:a15bfe7aaebd 110 HTS221_AVGH_256 = (uint8_t)0x06, /*!< Internal average on 256 samples */
screamer 18:a15bfe7aaebd 111 HTS221_AVGH_512 = (uint8_t)0x07 /*!< Internal average on 512 samples */
screamer 18:a15bfe7aaebd 112 } HTS221_Avgh_et;
screamer 18:a15bfe7aaebd 113 #define IS_HTS221_AVGH(AVGH) ((AVGH == HTS221_AVGH_4) || (AVGH == HTS221_AVGH_8) || \
screamer 18:a15bfe7aaebd 114 (AVGH == HTS221_AVGH_16) || (AVGH == HTS221_AVGH_32) || \
screamer 18:a15bfe7aaebd 115 (AVGH == HTS221_AVGH_64) || (AVGH == HTS221_AVGH_128) || \
screamer 18:a15bfe7aaebd 116 (AVGH == HTS221_AVGH_256) || (AVGH == HTS221_AVGH_512))
screamer 18:a15bfe7aaebd 117
screamer 18:a15bfe7aaebd 118 /**
screamer 18:a15bfe7aaebd 119 * @brief Temperature average.
screamer 18:a15bfe7aaebd 120 */
screamer 18:a15bfe7aaebd 121 typedef enum
screamer 18:a15bfe7aaebd 122 {
screamer 18:a15bfe7aaebd 123 HTS221_AVGT_2 = (uint8_t)0x00, /*!< Internal average on 2 samples */
screamer 18:a15bfe7aaebd 124 HTS221_AVGT_4 = (uint8_t)0x08, /*!< Internal average on 4 samples */
screamer 18:a15bfe7aaebd 125 HTS221_AVGT_8 = (uint8_t)0x10, /*!< Internal average on 8 samples */
screamer 18:a15bfe7aaebd 126 HTS221_AVGT_16 = (uint8_t)0x18, /*!< Internal average on 16 samples */
screamer 18:a15bfe7aaebd 127 HTS221_AVGT_32 = (uint8_t)0x20, /*!< Internal average on 32 samples */
screamer 18:a15bfe7aaebd 128 HTS221_AVGT_64 = (uint8_t)0x28, /*!< Internal average on 64 samples */
screamer 18:a15bfe7aaebd 129 HTS221_AVGT_128 = (uint8_t)0x30, /*!< Internal average on 128 samples */
screamer 18:a15bfe7aaebd 130 HTS221_AVGT_256 = (uint8_t)0x38 /*!< Internal average on 256 samples */
screamer 18:a15bfe7aaebd 131 } HTS221_Avgt_et;
screamer 18:a15bfe7aaebd 132 #define IS_HTS221_AVGT(AVGT) ((AVGT == HTS221_AVGT_2) || (AVGT == HTS221_AVGT_4) || \
screamer 18:a15bfe7aaebd 133 (AVGT == HTS221_AVGT_8) || (AVGT == HTS221_AVGT_16) || \
screamer 18:a15bfe7aaebd 134 (AVGT == HTS221_AVGT_32) || (AVGT == HTS221_AVGT_64) || \
screamer 18:a15bfe7aaebd 135 (AVGT == HTS221_AVGT_128) || (AVGT == HTS221_AVGT_256))
screamer 18:a15bfe7aaebd 136
screamer 18:a15bfe7aaebd 137 /**
screamer 18:a15bfe7aaebd 138 * @brief Output data rate configuration.
screamer 18:a15bfe7aaebd 139 */
screamer 18:a15bfe7aaebd 140 typedef enum
screamer 18:a15bfe7aaebd 141 {
screamer 18:a15bfe7aaebd 142 HTS221_ODR_ONE_SHOT = (uint8_t)0x00, /*!< Output Data Rate: one shot */
screamer 18:a15bfe7aaebd 143 HTS221_ODR_1HZ = (uint8_t)0x01, /*!< Output Data Rate: 1Hz */
screamer 18:a15bfe7aaebd 144 HTS221_ODR_7HZ = (uint8_t)0x02, /*!< Output Data Rate: 7Hz */
screamer 18:a15bfe7aaebd 145 HTS221_ODR_12_5HZ = (uint8_t)0x03, /*!< Output Data Rate: 12.5Hz */
screamer 18:a15bfe7aaebd 146 } HTS221_Odr_et;
screamer 18:a15bfe7aaebd 147 #define IS_HTS221_ODR(ODR) ((ODR == HTS221_ODR_ONE_SHOT) || (ODR == HTS221_ODR_1HZ) || \
screamer 18:a15bfe7aaebd 148 (ODR == HTS221_ODR_7HZ) || (ODR == HTS221_ODR_12_5HZ))
screamer 18:a15bfe7aaebd 149
screamer 18:a15bfe7aaebd 150
screamer 18:a15bfe7aaebd 151 /**
screamer 18:a15bfe7aaebd 152 * @brief Push-pull/Open Drain selection on DRDY pin.
screamer 18:a15bfe7aaebd 153 */
screamer 18:a15bfe7aaebd 154 typedef enum
screamer 18:a15bfe7aaebd 155 {
screamer 18:a15bfe7aaebd 156 HTS221_PUSHPULL = (uint8_t)0x00, /*!< DRDY pin in push pull */
screamer 18:a15bfe7aaebd 157 HTS221_OPENDRAIN = (uint8_t)0x40 /*!< DRDY pin in open drain */
screamer 18:a15bfe7aaebd 158 } HTS221_OutputType_et;
screamer 18:a15bfe7aaebd 159 #define IS_HTS221_OutputType(MODE) ((MODE == HTS221_PUSHPULL) || (MODE == HTS221_OPENDRAIN))
screamer 18:a15bfe7aaebd 160
screamer 18:a15bfe7aaebd 161 /**
screamer 18:a15bfe7aaebd 162 * @brief Active level of DRDY pin.
screamer 18:a15bfe7aaebd 163 */
screamer 18:a15bfe7aaebd 164 typedef enum
screamer 18:a15bfe7aaebd 165 {
screamer 18:a15bfe7aaebd 166 HTS221_HIGH_LVL = (uint8_t)0x00, /*!< HIGH state level for DRDY pin */
screamer 18:a15bfe7aaebd 167 HTS221_LOW_LVL = (uint8_t)0x80 /*!< LOW state level for DRDY pin */
screamer 18:a15bfe7aaebd 168 } HTS221_DrdyLevel_et;
screamer 18:a15bfe7aaebd 169 #define IS_HTS221_DrdyLevelType(MODE) ((MODE == HTS221_HIGH_LVL) || (MODE == HTS221_LOW_LVL))
screamer 18:a15bfe7aaebd 170
screamer 18:a15bfe7aaebd 171 /**
screamer 18:a15bfe7aaebd 172 * @brief Driver Version Info structure definition.
screamer 18:a15bfe7aaebd 173 */
screamer 18:a15bfe7aaebd 174 typedef struct
screamer 18:a15bfe7aaebd 175 {
screamer 18:a15bfe7aaebd 176 uint8_t Major;
screamer 18:a15bfe7aaebd 177 uint8_t Minor;
screamer 18:a15bfe7aaebd 178 uint8_t Point;
screamer 18:a15bfe7aaebd 179 } HTS221_DriverVersion_st;
screamer 18:a15bfe7aaebd 180
screamer 18:a15bfe7aaebd 181
screamer 18:a15bfe7aaebd 182 /**
screamer 18:a15bfe7aaebd 183 * @brief HTS221 Init structure definition.
screamer 18:a15bfe7aaebd 184 */
screamer 18:a15bfe7aaebd 185 typedef struct
screamer 18:a15bfe7aaebd 186 {
screamer 18:a15bfe7aaebd 187 HTS221_Avgh_et avg_h; /*!< Humidity average */
screamer 18:a15bfe7aaebd 188 HTS221_Avgt_et avg_t; /*!< Temperature average */
screamer 18:a15bfe7aaebd 189 HTS221_Odr_et odr; /*!< Output data rate */
screamer 18:a15bfe7aaebd 190 HTS221_State_et bdu_status; /*!< HTS221_ENABLE/HTS221_DISABLE the block data update */
screamer 18:a15bfe7aaebd 191 HTS221_State_et heater_status; /*!< HTS221_ENABLE/HTS221_DISABLE the internal heater */
screamer 18:a15bfe7aaebd 192
screamer 18:a15bfe7aaebd 193 HTS221_DrdyLevel_et irq_level; /*!< HTS221_HIGH_LVL/HTS221_LOW_LVL the level for DRDY pin */
screamer 18:a15bfe7aaebd 194 HTS221_OutputType_et irq_output_type; /*!< Output configuration for DRDY pin */
screamer 18:a15bfe7aaebd 195 HTS221_State_et irq_enable; /*!< HTS221_ENABLE/HTS221_DISABLE interrupt on DRDY pin */
screamer 18:a15bfe7aaebd 196 } HTS221_Init_st;
screamer 18:a15bfe7aaebd 197
screamer 18:a15bfe7aaebd 198 /**
screamer 18:a15bfe7aaebd 199 * @}
screamer 18:a15bfe7aaebd 200 */
screamer 18:a15bfe7aaebd 201
screamer 18:a15bfe7aaebd 202
screamer 18:a15bfe7aaebd 203 /* Exported Constants ---------------------------------------------------------*/
screamer 18:a15bfe7aaebd 204 /** @defgroup HTS221_Exported_Constants
screamer 18:a15bfe7aaebd 205 * @{
screamer 18:a15bfe7aaebd 206 */
screamer 18:a15bfe7aaebd 207
screamer 18:a15bfe7aaebd 208 /**
screamer 18:a15bfe7aaebd 209 * @brief Bitfield positioning.
screamer 18:a15bfe7aaebd 210 */
screamer 18:a15bfe7aaebd 211 #define HTS221_BIT(x) ((uint8_t)x)
screamer 18:a15bfe7aaebd 212
screamer 18:a15bfe7aaebd 213 /**
screamer 18:a15bfe7aaebd 214 * @brief I2C address.
screamer 18:a15bfe7aaebd 215 */
screamer 18:a15bfe7aaebd 216 #define HTS221_I2C_ADDRESS (uint8_t)0xBE
screamer 18:a15bfe7aaebd 217
screamer 18:a15bfe7aaebd 218 /**
screamer 18:a15bfe7aaebd 219 * @brief Driver version.
screamer 18:a15bfe7aaebd 220 */
screamer 18:a15bfe7aaebd 221 #define HTS221_DRIVER_VERSION_MAJOR (uint8_t)1
screamer 18:a15bfe7aaebd 222 #define HTS221_DRIVER_VERSION_MINOR (uint8_t)1
screamer 18:a15bfe7aaebd 223 #define HTS221_DRIVER_VERSION_POINT (uint8_t)0
screamer 18:a15bfe7aaebd 224
screamer 18:a15bfe7aaebd 225 /**
screamer 18:a15bfe7aaebd 226 * @addtogroup HTS221_Registers
screamer 18:a15bfe7aaebd 227 * @{
screamer 18:a15bfe7aaebd 228 */
screamer 18:a15bfe7aaebd 229
screamer 18:a15bfe7aaebd 230
screamer 18:a15bfe7aaebd 231 /**
screamer 18:a15bfe7aaebd 232 * @brief Device Identification register.
screamer 18:a15bfe7aaebd 233 * \code
screamer 18:a15bfe7aaebd 234 * Read
screamer 18:a15bfe7aaebd 235 * Default value: 0xBC
screamer 18:a15bfe7aaebd 236 * 7:0 This read-only register contains the device identifier for HTS221.
screamer 18:a15bfe7aaebd 237 * \endcode
screamer 18:a15bfe7aaebd 238 */
screamer 18:a15bfe7aaebd 239 #define HTS221_WHO_AM_I_REG (uint8_t)0x0F
screamer 18:a15bfe7aaebd 240
screamer 18:a15bfe7aaebd 241 /**
screamer 18:a15bfe7aaebd 242 * @brief Device Identification value.
screamer 18:a15bfe7aaebd 243 */
screamer 18:a15bfe7aaebd 244 #define HTS221_WHO_AM_I_VAL (uint8_t)0xBC
screamer 18:a15bfe7aaebd 245
screamer 18:a15bfe7aaebd 246
screamer 18:a15bfe7aaebd 247 /**
screamer 18:a15bfe7aaebd 248 * @brief Humidity and temperature average mode register.
screamer 18:a15bfe7aaebd 249 * \code
screamer 18:a15bfe7aaebd 250 * Read/write
screamer 18:a15bfe7aaebd 251 * Default value: 0x1B
screamer 18:a15bfe7aaebd 252 * 7:6 Reserved.
screamer 18:a15bfe7aaebd 253 * 5:3 AVGT2-AVGT1-AVGT0: Select the temperature internal average.
screamer 18:a15bfe7aaebd 254 *
screamer 18:a15bfe7aaebd 255 * AVGT2 | AVGT1 | AVGT0 | Nr. Internal Average
screamer 18:a15bfe7aaebd 256 * ----------------------------------------------------
screamer 18:a15bfe7aaebd 257 * 0 | 0 | 0 | 2
screamer 18:a15bfe7aaebd 258 * 0 | 0 | 1 | 4
screamer 18:a15bfe7aaebd 259 * 0 | 1 | 0 | 8
screamer 18:a15bfe7aaebd 260 * 0 | 1 | 1 | 16
screamer 18:a15bfe7aaebd 261 * 1 | 0 | 0 | 32
screamer 18:a15bfe7aaebd 262 * 1 | 0 | 1 | 64
screamer 18:a15bfe7aaebd 263 * 1 | 1 | 0 | 128
screamer 18:a15bfe7aaebd 264 * 1 | 1 | 1 | 256
screamer 18:a15bfe7aaebd 265 *
screamer 18:a15bfe7aaebd 266 * 2:0 AVGH2-AVGH1-AVGH0: Select humidity internal average.
screamer 18:a15bfe7aaebd 267 * AVGH2 | AVGH1 | AVGH0 | Nr. Internal Average
screamer 18:a15bfe7aaebd 268 * ------------------------------------------------------
screamer 18:a15bfe7aaebd 269 * 0 | 0 | 0 | 4
screamer 18:a15bfe7aaebd 270 * 0 | 0 | 1 | 8
screamer 18:a15bfe7aaebd 271 * 0 | 1 | 0 | 16
screamer 18:a15bfe7aaebd 272 * 0 | 1 | 1 | 32
screamer 18:a15bfe7aaebd 273 * 1 | 0 | 0 | 64
screamer 18:a15bfe7aaebd 274 * 1 | 0 | 1 | 128
screamer 18:a15bfe7aaebd 275 * 1 | 1 | 0 | 256
screamer 18:a15bfe7aaebd 276 * 1 | 1 | 1 | 512
screamer 18:a15bfe7aaebd 277 *
screamer 18:a15bfe7aaebd 278 * \endcode
screamer 18:a15bfe7aaebd 279 */
screamer 18:a15bfe7aaebd 280 #define HTS221_AV_CONF_REG (uint8_t)0x10
screamer 18:a15bfe7aaebd 281
screamer 18:a15bfe7aaebd 282 #define HTS221_AVGT_BIT HTS221_BIT(3)
screamer 18:a15bfe7aaebd 283 #define HTS221_AVGH_BIT HTS221_BIT(0)
screamer 18:a15bfe7aaebd 284
screamer 18:a15bfe7aaebd 285 #define HTS221_AVGH_MASK (uint8_t)0x07
screamer 18:a15bfe7aaebd 286 #define HTS221_AVGT_MASK (uint8_t)0x38
screamer 18:a15bfe7aaebd 287
screamer 18:a15bfe7aaebd 288 /**
screamer 18:a15bfe7aaebd 289 * @brief Control register 1.
screamer 18:a15bfe7aaebd 290 * \code
screamer 18:a15bfe7aaebd 291 * Read/write
screamer 18:a15bfe7aaebd 292 * Default value: 0x00
screamer 18:a15bfe7aaebd 293 * 7 PD: power down control. 0 - power down mode; 1 - active mode.
screamer 18:a15bfe7aaebd 294 * 6:3 Reserved.
screamer 18:a15bfe7aaebd 295 * 2 BDU: block data update. 0 - continuous update; 1 - output registers not updated until MSB and LSB reading.
screamer 18:a15bfe7aaebd 296 * 1:0 ODR1, ODR0: output data rate selection.
screamer 18:a15bfe7aaebd 297 *
screamer 18:a15bfe7aaebd 298 * ODR1 | ODR0 | Humidity output data-rate(Hz) | Pressure output data-rate(Hz)
screamer 18:a15bfe7aaebd 299 * ----------------------------------------------------------------------------------
screamer 18:a15bfe7aaebd 300 * 0 | 0 | one shot | one shot
screamer 18:a15bfe7aaebd 301 * 0 | 1 | 1 | 1
screamer 18:a15bfe7aaebd 302 * 1 | 0 | 7 | 7
screamer 18:a15bfe7aaebd 303 * 1 | 1 | 12.5 | 12.5
screamer 18:a15bfe7aaebd 304 *
screamer 18:a15bfe7aaebd 305 * \endcode
screamer 18:a15bfe7aaebd 306 */
screamer 18:a15bfe7aaebd 307 #define HTS221_CTRL_REG1 (uint8_t)0x20
screamer 18:a15bfe7aaebd 308
screamer 18:a15bfe7aaebd 309 #define HTS221_PD_BIT HTS221_BIT(7)
screamer 18:a15bfe7aaebd 310 #define HTS221_BDU_BIT HTS221_BIT(2)
screamer 18:a15bfe7aaebd 311 #define HTS221_ODR_BIT HTS221_BIT(0)
screamer 18:a15bfe7aaebd 312
screamer 18:a15bfe7aaebd 313 #define HTS221_PD_MASK (uint8_t)0x80
screamer 18:a15bfe7aaebd 314 #define HTS221_BDU_MASK (uint8_t)0x04
screamer 18:a15bfe7aaebd 315 #define HTS221_ODR_MASK (uint8_t)0x03
screamer 18:a15bfe7aaebd 316
screamer 18:a15bfe7aaebd 317 /**
screamer 18:a15bfe7aaebd 318 * @brief Control register 2.
screamer 18:a15bfe7aaebd 319 * \code
screamer 18:a15bfe7aaebd 320 * Read/write
screamer 18:a15bfe7aaebd 321 * Default value: 0x00
screamer 18:a15bfe7aaebd 322 * 7 BOOT: Reboot memory content. 0: normal mode; 1: reboot memory content. Self-cleared upon completation.
screamer 18:a15bfe7aaebd 323 * 6:2 Reserved.
screamer 18:a15bfe7aaebd 324 * 1 HEATHER: 0: heater enable; 1: heater disable.
screamer 18:a15bfe7aaebd 325 * 0 ONE_SHOT: 0: waiting for start of conversion; 1: start for a new dataset. Self-cleared upon completation.
screamer 18:a15bfe7aaebd 326 * \endcode
screamer 18:a15bfe7aaebd 327 */
screamer 18:a15bfe7aaebd 328 #define HTS221_CTRL_REG2 (uint8_t)0x21
screamer 18:a15bfe7aaebd 329
screamer 18:a15bfe7aaebd 330 #define HTS221_BOOT_BIT HTS221_BIT(7)
screamer 18:a15bfe7aaebd 331 #define HTS221_HEATHER_BIT HTS221_BIT(1)
screamer 18:a15bfe7aaebd 332 #define HTS221_ONESHOT_BIT HTS221_BIT(0)
screamer 18:a15bfe7aaebd 333
screamer 18:a15bfe7aaebd 334 #define HTS221_BOOT_MASK (uint8_t)0x80
screamer 18:a15bfe7aaebd 335 #define HTS221_HEATHER_MASK (uint8_t)0x02
screamer 18:a15bfe7aaebd 336 #define HTS221_ONE_SHOT_MASK (uint8_t)0x01
screamer 18:a15bfe7aaebd 337
screamer 18:a15bfe7aaebd 338 /**
screamer 18:a15bfe7aaebd 339 * @brief Control register 3.
screamer 18:a15bfe7aaebd 340 * \code
screamer 18:a15bfe7aaebd 341 * Read/write
screamer 18:a15bfe7aaebd 342 * Default value: 0x00
screamer 18:a15bfe7aaebd 343 * 7 DRDY_H_L: Interrupt edge. 0: active high, 1: active low.
screamer 18:a15bfe7aaebd 344 * 6 PP_OD: Push-Pull/OpenDrain selection on interrupt pads. 0: push-pull; 1: open drain.
screamer 18:a15bfe7aaebd 345 * 5:3 Reserved.
screamer 18:a15bfe7aaebd 346 * 2 DRDY: interrupt config. 0: disable, 1: enable.
screamer 18:a15bfe7aaebd 347 * \endcode
screamer 18:a15bfe7aaebd 348 */
screamer 18:a15bfe7aaebd 349 #define HTS221_CTRL_REG3 (uint8_t)0x22
screamer 18:a15bfe7aaebd 350
screamer 18:a15bfe7aaebd 351 #define HTS221_DRDY_H_L_BIT HTS221_BIT(7)
screamer 18:a15bfe7aaebd 352 #define HTS221_PP_OD_BIT HTS221_BIT(6)
screamer 18:a15bfe7aaebd 353 #define HTS221_DRDY_BIT HTS221_BIT(2)
screamer 18:a15bfe7aaebd 354
screamer 18:a15bfe7aaebd 355 #define HTS221_DRDY_H_L_MASK (uint8_t)0x80
screamer 18:a15bfe7aaebd 356 #define HTS221_PP_OD_MASK (uint8_t)0x40
screamer 18:a15bfe7aaebd 357 #define HTS221_DRDY_MASK (uint8_t)0x04
screamer 18:a15bfe7aaebd 358
screamer 18:a15bfe7aaebd 359 /**
screamer 18:a15bfe7aaebd 360 * @brief Status register.
screamer 18:a15bfe7aaebd 361 * \code
screamer 18:a15bfe7aaebd 362 * Read
screamer 18:a15bfe7aaebd 363 * Default value: 0x00
screamer 18:a15bfe7aaebd 364 * 7:2 Reserved.
screamer 18:a15bfe7aaebd 365 * 1 H_DA: Humidity data available. 0: new data for humidity is not yet available; 1: new data for humidity is available.
screamer 18:a15bfe7aaebd 366 * 0 T_DA: Temperature data available. 0: new data for temperature is not yet available; 1: new data for temperature is available.
screamer 18:a15bfe7aaebd 367 * \endcode
screamer 18:a15bfe7aaebd 368 */
screamer 18:a15bfe7aaebd 369 #define HTS221_STATUS_REG (uint8_t)0x27
screamer 18:a15bfe7aaebd 370
screamer 18:a15bfe7aaebd 371 #define HTS221_H_DA_BIT HTS221_BIT(1)
screamer 18:a15bfe7aaebd 372 #define HTS221_T_DA_BIT HTS221_BIT(0)
screamer 18:a15bfe7aaebd 373
screamer 18:a15bfe7aaebd 374 #define HTS221_HDA_MASK (uint8_t)0x02
screamer 18:a15bfe7aaebd 375 #define HTS221_TDA_MASK (uint8_t)0x01
screamer 18:a15bfe7aaebd 376
screamer 18:a15bfe7aaebd 377 /**
screamer 18:a15bfe7aaebd 378 * @brief Humidity data (LSB).
screamer 18:a15bfe7aaebd 379 * \code
screamer 18:a15bfe7aaebd 380 * Read
screamer 18:a15bfe7aaebd 381 * Default value: 0x00.
screamer 18:a15bfe7aaebd 382 * HOUT7 - HOUT0: Humidity data LSB (2's complement).
screamer 18:a15bfe7aaebd 383 * \endcode
screamer 18:a15bfe7aaebd 384 */
screamer 18:a15bfe7aaebd 385 #define HTS221_HR_OUT_L_REG (uint8_t)0x28
screamer 18:a15bfe7aaebd 386
screamer 18:a15bfe7aaebd 387 /**
screamer 18:a15bfe7aaebd 388 * @brief Humidity data (MSB).
screamer 18:a15bfe7aaebd 389 * \code
screamer 18:a15bfe7aaebd 390 * Read
screamer 18:a15bfe7aaebd 391 * Default value: 0x00.
screamer 18:a15bfe7aaebd 392 * HOUT15 - HOUT8: Humidity data MSB (2's complement).
screamer 18:a15bfe7aaebd 393 * \endcode
screamer 18:a15bfe7aaebd 394 */
screamer 18:a15bfe7aaebd 395 #define HTS221_HR_OUT_H_REG (uint8_t)0x29
screamer 18:a15bfe7aaebd 396
screamer 18:a15bfe7aaebd 397
screamer 18:a15bfe7aaebd 398 /**
screamer 18:a15bfe7aaebd 399 * @brief Temperature data (LSB).
screamer 18:a15bfe7aaebd 400 * \code
screamer 18:a15bfe7aaebd 401 * Read
screamer 18:a15bfe7aaebd 402 * Default value: 0x00.
screamer 18:a15bfe7aaebd 403 * TOUT7 - TOUT0: temperature data LSB.
screamer 18:a15bfe7aaebd 404 * \endcode
screamer 18:a15bfe7aaebd 405 */
screamer 18:a15bfe7aaebd 406 #define HTS221_TEMP_OUT_L_REG (uint8_t)0x2A
screamer 18:a15bfe7aaebd 407
screamer 18:a15bfe7aaebd 408 /**
screamer 18:a15bfe7aaebd 409 * @brief Temperature data (MSB).
screamer 18:a15bfe7aaebd 410 * \code
screamer 18:a15bfe7aaebd 411 * Read
screamer 18:a15bfe7aaebd 412 * Default value: 0x00.
screamer 18:a15bfe7aaebd 413 * TOUT15 - TOUT8: temperature data MSB.
screamer 18:a15bfe7aaebd 414 * \endcode
screamer 18:a15bfe7aaebd 415 */
screamer 18:a15bfe7aaebd 416 #define HTS221_TEMP_OUT_H_REG (uint8_t)0x2B
screamer 18:a15bfe7aaebd 417
screamer 18:a15bfe7aaebd 418 /**
screamer 18:a15bfe7aaebd 419 * @brief Calibration registers.
screamer 18:a15bfe7aaebd 420 * \code
screamer 18:a15bfe7aaebd 421 * Read
screamer 18:a15bfe7aaebd 422 * \endcode
screamer 18:a15bfe7aaebd 423 */
screamer 18:a15bfe7aaebd 424 #define HTS221_H0_RH_X2 (uint8_t)0x30
screamer 18:a15bfe7aaebd 425 #define HTS221_H1_RH_X2 (uint8_t)0x31
screamer 18:a15bfe7aaebd 426 #define HTS221_T0_DEGC_X8 (uint8_t)0x32
screamer 18:a15bfe7aaebd 427 #define HTS221_T1_DEGC_X8 (uint8_t)0x33
screamer 18:a15bfe7aaebd 428 #define HTS221_T0_T1_DEGC_H2 (uint8_t)0x35
screamer 18:a15bfe7aaebd 429 #define HTS221_H0_T0_OUT_L (uint8_t)0x36
screamer 18:a15bfe7aaebd 430 #define HTS221_H0_T0_OUT_H (uint8_t)0x37
screamer 18:a15bfe7aaebd 431 #define HTS221_H1_T0_OUT_L (uint8_t)0x3A
screamer 18:a15bfe7aaebd 432 #define HTS221_H1_T0_OUT_H (uint8_t)0x3B
screamer 18:a15bfe7aaebd 433 #define HTS221_T0_OUT_L (uint8_t)0x3C
screamer 18:a15bfe7aaebd 434 #define HTS221_T0_OUT_H (uint8_t)0x3D
screamer 18:a15bfe7aaebd 435 #define HTS221_T1_OUT_L (uint8_t)0x3E
screamer 18:a15bfe7aaebd 436 #define HTS221_T1_OUT_H (uint8_t)0x3F
screamer 18:a15bfe7aaebd 437
screamer 18:a15bfe7aaebd 438
screamer 18:a15bfe7aaebd 439 /**
screamer 18:a15bfe7aaebd 440 * @}
screamer 18:a15bfe7aaebd 441 */
screamer 18:a15bfe7aaebd 442
screamer 18:a15bfe7aaebd 443
screamer 18:a15bfe7aaebd 444 /**
screamer 18:a15bfe7aaebd 445 * @}
screamer 18:a15bfe7aaebd 446 */
screamer 18:a15bfe7aaebd 447
screamer 18:a15bfe7aaebd 448
screamer 18:a15bfe7aaebd 449 /* Exported Functions -------------------------------------------------------------*/
screamer 18:a15bfe7aaebd 450 /** @defgroup HTS221_Exported_Functions
screamer 18:a15bfe7aaebd 451 * @{
screamer 18:a15bfe7aaebd 452 */
screamer 18:a15bfe7aaebd 453
screamer 18:a15bfe7aaebd 454 HTS221_Error_et HTS221_read_reg( void *handle, uint8_t RegAddr, uint16_t NumByteToRead, uint8_t *Data );
screamer 18:a15bfe7aaebd 455 HTS221_Error_et HTS221_write_reg( void *handle, uint8_t RegAddr, uint16_t NumByteToWrite, uint8_t *Data );
screamer 18:a15bfe7aaebd 456
screamer 18:a15bfe7aaebd 457 HTS221_Error_et HTS221_Get_DriverVersion(HTS221_DriverVersion_st* version);
screamer 18:a15bfe7aaebd 458 HTS221_Error_et HTS221_Get_DeviceID(void *handle, uint8_t* deviceid);
screamer 18:a15bfe7aaebd 459
screamer 18:a15bfe7aaebd 460 HTS221_Error_et HTS221_Set_InitConfig(void *handle, HTS221_Init_st* pxInit);
screamer 18:a15bfe7aaebd 461 HTS221_Error_et HTS221_Get_InitConfig(void *handle, HTS221_Init_st* pxInit);
screamer 18:a15bfe7aaebd 462 HTS221_Error_et HTS221_DeInit(void *handle);
screamer 18:a15bfe7aaebd 463 HTS221_Error_et HTS221_IsMeasurementCompleted(void *handle, HTS221_BitStatus_et* Is_Measurement_Completed);
screamer 18:a15bfe7aaebd 464
screamer 18:a15bfe7aaebd 465 HTS221_Error_et HTS221_Get_Measurement(void *handle, uint16_t* humidity, int16_t* temperature);
screamer 18:a15bfe7aaebd 466 HTS221_Error_et HTS221_Get_RawMeasurement(void *handle, int16_t* humidity, int16_t* temperature);
screamer 18:a15bfe7aaebd 467 HTS221_Error_et HTS221_Get_Humidity(void *handle, uint16_t* value);
screamer 18:a15bfe7aaebd 468 HTS221_Error_et HTS221_Get_HumidityRaw(void *handle, int16_t* value);
screamer 18:a15bfe7aaebd 469 HTS221_Error_et HTS221_Get_TemperatureRaw(void *handle, int16_t* value);
screamer 18:a15bfe7aaebd 470 HTS221_Error_et HTS221_Get_Temperature(void *handle, int16_t* value);
screamer 18:a15bfe7aaebd 471 HTS221_Error_et HTS221_Get_DataStatus(void *handle, HTS221_BitStatus_et* humidity, HTS221_BitStatus_et* temperature);
screamer 18:a15bfe7aaebd 472 HTS221_Error_et HTS221_Activate(void *handle);
screamer 18:a15bfe7aaebd 473 HTS221_Error_et HTS221_DeActivate(void *handle);
screamer 18:a15bfe7aaebd 474
screamer 18:a15bfe7aaebd 475 HTS221_Error_et HTS221_Set_AvgHT(void *handle, HTS221_Avgh_et avgh, HTS221_Avgt_et avgt);
screamer 18:a15bfe7aaebd 476 HTS221_Error_et HTS221_Set_AvgH(void *handle, HTS221_Avgh_et avgh);
screamer 18:a15bfe7aaebd 477 HTS221_Error_et HTS221_Set_AvgT(void *handle, HTS221_Avgt_et avgt);
screamer 18:a15bfe7aaebd 478 HTS221_Error_et HTS221_Get_AvgHT(void *handle, HTS221_Avgh_et* avgh, HTS221_Avgt_et* avgt);
screamer 18:a15bfe7aaebd 479 HTS221_Error_et HTS221_Set_BduMode(void *handle, HTS221_State_et status);
screamer 18:a15bfe7aaebd 480 HTS221_Error_et HTS221_Get_BduMode(void *handle, HTS221_State_et* status);
screamer 18:a15bfe7aaebd 481 HTS221_Error_et HTS221_Set_PowerDownMode(void *handle, HTS221_BitStatus_et status);
screamer 18:a15bfe7aaebd 482 HTS221_Error_et HTS221_Get_PowerDownMode(void *handle, HTS221_BitStatus_et* status);
screamer 18:a15bfe7aaebd 483 HTS221_Error_et HTS221_Set_Odr(void *handle, HTS221_Odr_et odr);
screamer 18:a15bfe7aaebd 484 HTS221_Error_et HTS221_Get_Odr(void *handle, HTS221_Odr_et* odr);
screamer 18:a15bfe7aaebd 485 HTS221_Error_et HTS221_MemoryBoot(void *handle);
screamer 18:a15bfe7aaebd 486 HTS221_Error_et HTS221_Set_HeaterState(void *handle, HTS221_State_et status);
screamer 18:a15bfe7aaebd 487 HTS221_Error_et HTS221_Get_HeaterState(void *handle, HTS221_State_et* status);
screamer 18:a15bfe7aaebd 488 HTS221_Error_et HTS221_StartOneShotMeasurement(void *handle);
screamer 18:a15bfe7aaebd 489 HTS221_Error_et HTS221_Set_IrqActiveLevel(void *handle, HTS221_DrdyLevel_et status);
screamer 18:a15bfe7aaebd 490 HTS221_Error_et HTS221_Get_IrqActiveLevel(void *handle, HTS221_DrdyLevel_et* status);
screamer 18:a15bfe7aaebd 491 HTS221_Error_et HTS221_Set_IrqOutputType(void *handle, HTS221_OutputType_et value);
screamer 18:a15bfe7aaebd 492 HTS221_Error_et HTS221_Get_IrqOutputType(void *handle, HTS221_OutputType_et* value);
screamer 18:a15bfe7aaebd 493 HTS221_Error_et HTS221_Set_IrqEnable(void *handle, HTS221_State_et status);
screamer 18:a15bfe7aaebd 494 HTS221_Error_et HTS221_Get_IrqEnable(void *handle, HTS221_State_et* status);
screamer 18:a15bfe7aaebd 495
screamer 18:a15bfe7aaebd 496 /**
screamer 18:a15bfe7aaebd 497 * @}
screamer 18:a15bfe7aaebd 498 */
screamer 18:a15bfe7aaebd 499
screamer 18:a15bfe7aaebd 500 /**
screamer 18:a15bfe7aaebd 501 * @}
screamer 18:a15bfe7aaebd 502 */
screamer 18:a15bfe7aaebd 503
screamer 18:a15bfe7aaebd 504 /**
screamer 18:a15bfe7aaebd 505 * @}
screamer 18:a15bfe7aaebd 506 */
screamer 18:a15bfe7aaebd 507
screamer 18:a15bfe7aaebd 508 #ifdef __cplusplus
screamer 18:a15bfe7aaebd 509 }
screamer 18:a15bfe7aaebd 510 #endif
screamer 18:a15bfe7aaebd 511
screamer 18:a15bfe7aaebd 512 #endif /* __HTS221_DRIVER__H */
screamer 18:a15bfe7aaebd 513
screamer 18:a15bfe7aaebd 514 /******************* (C) COPYRIGHT 2013 STMicroelectronics *****END OF FILE****/