如何在esp32上完成适配sht40温湿度传感器驱动

1.首先这款温湿度传感器是通过i2c来传输数据的,那么就需要完成i2c的初始化等工作

2.目标是在esp32s3上 完成适配,查看esp32s3的datasheet,esp32支持任意管脚适配,真是神奇

3. 下载sht40的驱动代码,完成接口适配,例如i2c的初始化,i2c的读与写,以及i2c的反初始化(释放)。至此,适配工作完成。

不多说,上代码。

a.在下载完成的sht40 的驱动代码内,直接添加有关esp的头文件,这些包括esp的log头文件,以及esp的驱动文件(i2c),例如

#include "esp_log.h"
#include "driver/i2c.h"
static const char *TAG = "i2c-simple-example";

#define I2C_MASTER_SCL_IO           GPIO_NUM_1      /*!< GPIO number used for I2C master clock */
#define I2C_MASTER_SDA_IO           GPIO_NUM_2      /*!< GPIO number used for I2C master data  */
#define I2C_MASTER_NUM              0                          /*!< I2C master i2c port number, the number of i2c peripheral interfaces available will depend on the chip */
#define I2C_MASTER_FREQ_HZ          400000                     /*!< I2C master clock frequency */
#define I2C_MASTER_TX_BUF_DISABLE   0                          /*!< I2C master doesn't need buffer */
#define I2C_MASTER_RX_BUF_DISABLE   0                          /*!< I2C master doesn't need buffer */
#define I2C_MASTER_TIMEOUT_MS       1000

b. 完成i2c 的初始化 功能,该代码可参考esp的i2c demo 

static esp_err_t i2c_master_init(void)
{
    int i2c_master_port = I2C_MASTER_NUM;

    i2c_config_t conf = {
        .mode = I2C_MODE_MASTER,
        .sda_io_num = I2C_MASTER_SDA_IO,
        .scl_io_num = I2C_MASTER_SCL_IO,
        .sda_pullup_en = GPIO_PULLUP_ENABLE,
        .scl_pullup_en = GPIO_PULLUP_ENABLE,
        .master.clk_speed = I2C_MASTER_FREQ_HZ,
    };

    i2c_param_config(i2c_master_port, &conf);

    return i2c_driver_install(i2c_master_port, conf.mode, I2C_MASTER_RX_BUF_DISABLE, I2C_MASTER_TX_BUF_DISABLE, 0);
}
void sensirion_i2c_init(void) {
    // IMPLEMENT


    // esp32s3 board
    #ifdef SELF_ESP32S3_BOARD
    esp_err_t ret = i2c_master_init();
    ESP_LOGI(TAG,"i2c_master_init:%d",ret);
    #endif
}

c.  继续完成i2c的读与写 操作,代码如下:

int8_t sensirion_i2c_read(uint8_t address, uint8_t* data, uint16_t count) {
    // IMPLEMENT


    // esp32s3 interface
    esp_err_t ret = i2c_master_read_from_device(I2C_NUM_0, address, data, count,1000);
    ESP_LOGI(TAG,"i2c_master_read_from_device:%d",ret);
    //end 
    return NO_ERROR;
}
int8_t sensirion_i2c_write(uint8_t address, const uint8_t* data,
                           uint16_t count) {
    // IMPLEMENT


    // esp32s3 interface
    esp_err_t ret = i2c_master_write_to_device(I2C_NUM_0, address, data, count,1000);
    ESP_LOGI(TAG,"i2c_master_write_to_device:%d",ret);
    //end
    return NO_ERROR;
}

这里,需要完成一个延迟的操作,在这里,调用esp里面的函数

void sensirion_sleep_usec(uint32_t useconds) {
    // IMPLEMENT

    // esp32s3 interface
    esp_rom_delay_us(useconds);
}

最后是,i2c的反初始化操作,也就是释放动作,代码如下:

void sensirion_i2c_release(void) {
    // IMPLEMENT or leave empty if no resources need to be freed
    
    ESP_ERROR_CHECK(i2c_driver_delete(I2C_MASTER_NUM));
    ESP_LOGI(TAG, "I2C de-initialized successfully");
    
}

好了,写到这里,i2c的适配工作,已经完成了。看起来没什么难度。

建议:sht40的代码,采用模块化方式,便于管理,移植等工作。

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ESP32SHT30是两种常用的硬件设备,主要用于制作湿度传感器。 首先,ESP32是一种低功耗的Wi-Fi和蓝牙双模模块,具有强大的处理能力和丰富的接口。它可以与各种传感器进行通信,并将传感器数据传输到云端或其他设备上。 而SHT30是一种数字式湿度传感器,采用先进的湿度和度传感技术,具有高准确性和稳定性。它可以直接与ESP32连接,并通过I2C或SPI接口进行数据通信。 要制作湿度传感器,首先需要将SHT30传感器连接到ESP32模块上。可以使用串行或并行接口将SHT30连接到ESP32的I2C或SPI引脚上。在连接后,需要在ESP32上编写代码,以便读取SHT30传感器提供的度和湿度数据。 ESP32的开发环境中,可以使用Arduino或MicroPython等编程语言来开发代码。通过编写代码,可以设置ESP32SHT30的通信协议,并读取传感器提供的数据。读取到的数据可以通过串口输出或通过Wi-Fi或蓝牙发送到其他设备上。 此外,为了更好地使用ESP32SHT30制作湿度传感器,还可以结合其他功能和操作,如数据存储、定时采集、报警等。例如,可以通过连接SD卡或使用云平台来存储传感器数据,或者可以设置阈值来触发湿度超出警报。 总之,通过将ESP32SHT30集成在一起,可以制作一个功能强大的湿度传感器,用于各种应用,如室内环境监测、农业湿度监测等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Teleger

你的支持是我前进的方向

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值