pedrominatel/hp203b

0.1.0

Latest
uploaded 23 hours ago
HP203B Pressure and Temperature Sensor Driver for ESP-IDF

readme

# HP203B Pressure Sensor Driver for ESP-IDF

Minimal, robust ESP-IDF driver for the HP203B barometric pressure sensor (I²C).
Provides pressure (Pa), temperature (°C) and calculated altitude (m).

## Features

- I²C interface (configurable port/pins/frequency)
- One-shot or continuous conversion (polling)
- Pressure, temperature(WIP), altitude (WIP)
- Simple error handling via esp_err_t
- Lightweight, no dynamic allocation in the hot path

## Hardware

- Bus: I²C (standard/fast mode)
- Address: 0x76 (common default; check your module/datasheet)
- Voltage: typically 3.3 V (confirm your board’s regulator)

## How to use

Example code:

```c
#include <stdio.h>
#include <math.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/i2c_types.h"
#include "esp_log.h"
#include "esp_system.h"
#include "sdkconfig.h"
#include "hp203b.h"
#include "driver/i2c_master.h"

#define HP203B_SDA_GPIO           CONFIG_HP203B_I2C_SDA
#define HP203B_SCL_GPIO           CONFIG_HP203B_I2C_SCL

static const char *TAG = "HP203B";
i2c_master_bus_handle_t bus_handle = NULL;

esp_err_t init_i2c(i2c_master_bus_handle_t *i2c_bus)
{
    if (!i2c_bus) return ESP_ERR_INVALID_ARG;

    const i2c_master_bus_config_t cfg = {
        .clk_source = I2C_CLK_SRC_DEFAULT,
        .i2c_port   = CONFIG_HP203B_I2C_NUM,   // must be I2C_NUM_0 on ESP32-C3
        .scl_io_num = HP203B_SCL_GPIO,
        .sda_io_num = HP203B_SDA_GPIO,
        .flags = {
            .enable_internal_pullup = true,   // ok for bring-up; prefer external pull-ups
        },
        .glitch_ignore_cnt = 7,
    };
    return i2c_new_master_bus(&cfg, i2c_bus);
}

void read_sensor_task(void *pvParameters)
{
    while (1) {
        if (hp203b_read_press() == ESP_OK) {
            uint32_t sample_pa = hp203b_get_press();
            ESP_LOGI(TAG, "Pressure: %lu Pa", sample_pa);
        }
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

void app_main(void)
{
    ESP_LOGI(TAG, "This is the HP203B sensor example");

    ESP_ERROR_CHECK(init_i2c(&bus_handle));

    if (hp203b_init(bus_handle) == ESP_OK) {
        ESP_LOGI(TAG, "Sensor initialization ok!");
        xTaskCreate(&read_sensor_task, "read_sensor_task", 2048, NULL, 2, NULL);
    } else {
        ESP_LOGE(TAG, "Sensor initialization error!");
    }
}

```

Expected log output:

```bash
I (0) HP203B: This is the HP203B sensor example
I (...) HP203B: Sensor initialization ok!
I (...) HP203B: Pressure: 102639 Pa
I (...) HP203B: Pressure: 102642 Pa
...
```

Links

Supports all targets

Maintainer

  • Pedro Minatel <pminatel@gmail.com>

License: Apache-2.0

To add this component to your project, run:

idf.py add-dependency "pedrominatel/hp203b^0.1.0"

or download archive

Stats

  • Archive size
    Archive size ~ 9.86 KB
  • Downloaded in total
    Downloaded in total 0 times
  • Downloaded this version
    This version: 0 times

Badge

pedrominatel/hp203b version: 0.1.0
|