99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

零知開源——STM32F407VET6驅(qū)動(dòng)SHT41溫濕度傳感器完整教程

PCB56242069 ? 來源:PCB56242069 ? 作者:PCB56242069 ? 2025-07-09 18:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

??零知開源是一個(gè)真正屬于國人自己的開源軟硬件平臺(tái),在開發(fā)效率上超越了Arduino平臺(tái)并且更加容易上手,大大降低了開發(fā)難度。零知開源在軟件方面提供了完整的學(xué)習(xí)教程和豐富示例代碼,讓不懂程序的工程師也能非常輕而易舉的搭建電路來創(chuàng)作產(chǎn)品,測試產(chǎn)品。快來動(dòng)手試試吧!

?訪問零知開源平臺(tái),獲取更多實(shí)戰(zhàn)項(xiàng)目和教程資源吧!

項(xiàng)目概述

本項(xiàng)目基于STM32F407VET6零知增強(qiáng)板,實(shí)現(xiàn)SHT41高精度濕度傳感器的驅(qū)動(dòng)和數(shù)據(jù)采集。SHT41是Sensirion推出的新一代數(shù)字溫濕度傳感器,具有±0.2°C的溫度精度和±1.8%RH的濕度精度,采用I2C接口通信。本教程將展示如何通過STM32F407的硬件I2C接口驅(qū)動(dòng)SHT41,并實(shí)現(xiàn)實(shí)時(shí)溫濕度數(shù)據(jù)的采集與顯示。

一、硬件連接

1.1 硬件清單

>主控芯片:STM32F407VET6零知增強(qiáng)板

>傳感器SHT41溫濕度傳感器(I2C地址:0x44)

>杜邦線若干

1.2 接線硬件表

SHT41引腳 零知增強(qiáng)板引腳 功能說明
VCC 3.3V 電源正極
GND GND 電源地
SCL 21/SCL I2C時(shí)鐘
SDA 20/SDA I2C數(shù)據(jù)線

注意:I2C總線需要4.7kΩ上拉電阻(開發(fā)板通常已內(nèi)置)

1.3 接線實(shí)物圖

wKgZO2huSbeAB7VbAAb2le_lNfA966.png

二、軟件環(huán)境配置

2.1 安裝開發(fā)工具

零知IDE 3.8.0

選擇開發(fā)板零知增強(qiáng)板

2.2 依賴庫

Adafruit SHT4x Library

Adafruit_I2CDevice

Adafruit BusIO

三、核心代碼實(shí)現(xiàn)

3.1 零知IDE代碼驅(qū)動(dòng)

#include "Adafruit_SHT4x.h"
Adafruit_SHT4x sht4 = Adafruit_SHT4x();

void setup() {
  Serial.begin(115200);
  while (!Serial) delay(10);  // 等待串口初始化

  // 初始化傳感器
  if (!sht4.begin()) {
    Serial.println("Sensor not found!");
    while (1) delay(1);
  }
  
  // 設(shè)置高精度模式
  sht4.setPrecision(SHT4X_HIGH_PRECISION);
  // 關(guān)閉加熱器(節(jié)能模式)
  sht4.setHeater(SHT4X_NO_HEATER);
}

void loop() {
  sensors_event_t humidity, temp;
  sht4.getEvent(&humidity, &temp);  // 讀取數(shù)據(jù)

  Serial.print("Temperature: "); 
  Serial.print(temp.temperature); 
  Serial.println(" ℃");
  
  Serial.print("Humidity: "); 
  Serial.print(humidity.relative_humidity); 
  Serial.println("% rH");
  delay(1000);  // 每秒讀取一次
}

3.2核心庫函數(shù)解析

3.2.1Adafruit_SHT4x庫

bool Adafruit_SHT4x::begin(TwoWire *theWire) {
  i2c_dev = new Adafruit_I2CDevice(SHT4x_DEFAULT_ADDR, theWire);
  if (!i2c_dev->begin()) return false;
  return reset(); // 發(fā)送復(fù)位命令
}

功能:初始化I2C通信并復(fù)位傳感器

參數(shù):I2C接口指針(默認(rèn)使用Wire)

返回值:初始化成功返回true,失敗返回false

bool Adafruit_SHT4x::getEvent(sensors_event_t *humidity, 
                              sensors_event_t *temp) {
  // 根據(jù)精度和加熱器設(shè)置選擇命令
  uint8_t cmd = SHT4x_NOHEAT_HIGHPRECISION; 
  uint16_t duration = 10;
  
  // 發(fā)送測量命令
  if (!i2c_dev->write(&cmd, 1)) return false;
  
  delay(duration); // 等待測量完成
  
  // 讀取6字節(jié)數(shù)據(jù)(溫度+CRC, 濕度+CRC)
  uint8_t readbuffer[6];
  if (!i2c_dev->read(readbuffer, 6)) return false;
  
  // CRC校驗(yàn)
  if (readbuffer[2] != crc8(readbuffer, 2) ||
      readbuffer[5] != crc8(readbuffer + 3, 2)) 
    return false;
  
  // 原始數(shù)據(jù)轉(zhuǎn)換
  uint16_t temp_raw = (readbuffer[0] 

功能:獲取溫濕度數(shù)據(jù)并填充到事件結(jié)構(gòu)體

參數(shù):指向溫濕度事件結(jié)構(gòu)體的指針

返回值:成功返回true,失敗返回false

static uint8_t crc8(const uint8_t *data, int len) {
  const uint8_t POLYNOMIAL(0x31);
  uint8_t crc(0xFF);
  
  for (int j = len; j; --j) {
    crc ^= *data++;
    for (int i = 8; i; --i) {
      crc = (crc & 0x80) ? (crc 

功能:計(jì)算CRC8校驗(yàn)碼

參數(shù):數(shù)據(jù)指針和長度

返回值:CRC8校驗(yàn)值

3.2.2Adafruit_Sensor庫

void Adafruit_SHT4x::fillTempEvent(sensors_event_t *temp, uint32_t timestamp) {
  memset(temp, 0, sizeof(sensors_event_t));
  temp->version = sizeof(sensors_event_t);
  temp->sensor_id = _sensorid_temp;
  temp->type = SENSOR_TYPE_AMBIENT_TEMPERATURE;
  temp->timestamp = timestamp;
  temp->temperature = _temperature;
}

功能:填充溫度事件結(jié)構(gòu)體

參數(shù):

temp:目標(biāo)結(jié)構(gòu)體指針
timestamp:時(shí)間戳

void Adafruit_SHT4x::fillHumidityEvent(sensors_event_t *humidity, 
                                      uint32_t timestamp) {
  memset(humidity, 0, sizeof(sensors_event_t));
  humidity->version = sizeof(sensors_event_t);
  humidity->sensor_id = _sensorid_humidity;
  humidity->type = SENSOR_TYPE_RELATIVE_HUMIDITY;
  humidity->timestamp = timestamp;
  humidity->relative_humidity = _humidity;
}

功能:填充濕度事件結(jié)構(gòu)體

參數(shù):

humidity:目標(biāo)結(jié)構(gòu)體指針
timestamp:時(shí)間戳

3.2.3Adafruit_I2CDevice庫

bool Adafruit_I2CDevice::write_then_read(const uint8_t *write_buffer,
                                        size_t write_len, 
                                        uint8_t *read_buffer,
                                        size_t read_len, 
                                        bool stop) {
  if (!write(write_buffer, write_len, stop)) {
    return false;
  }
  return read(read_buffer, read_len);
}

功能:先寫后讀的I2C操作(常用模式)
參數(shù):

write_buffer:寫入數(shù)據(jù)緩沖區(qū)

write_len:寫入數(shù)據(jù)長度

read_buffer:讀取數(shù)據(jù)緩沖區(qū)

read_len:讀取數(shù)據(jù)長度

stop:是否在寫操作后發(fā)送停止條件

bool Adafruit_I2CDevice::read(uint8_t *buffer, size_t len, bool stop) {
  size_t pos = 0;
  while (pos < len) {
    size_t read_len = min(len - pos, _maxBufferSize);
    bool read_stop = (pos + read_len >= len) ? stop : false;
    
    if (!_read(buffer + pos, read_len, read_stop))
      return false;
    
    pos += read_len;
  }
  return true;
}

功能:從I2C設(shè)備讀取數(shù)據(jù)
參數(shù):

buffer:數(shù)據(jù)緩沖區(qū)

len:讀取長度

stop:是否發(fā)送停止條件

四、常見問題解答

Q1:編譯時(shí)報(bào)錯(cuò)"Adafruit_SHT4x.h: No such file or directory"

A:解決方法

檢查是否安裝了依賴庫(Adafruit BusIO)

Q2:傳感器檢測失?。?Couldn't find SHT4x")

A:排查步驟

檢查硬件連接(VCC、GND、SCL、SDA)

確認(rèn)I2C地址正確(SHT41默認(rèn)為0x44)

使用I2C掃描工具確認(rèn)設(shè)備地址

檢查上拉電阻(4.7kΩ)

Q3:數(shù)據(jù)讀取不穩(wěn)定或CRC校驗(yàn)失敗

A:解決方案

降低I2C時(shí)鐘速度

縮短I2C總線長度

嘗試不同的精度模式

Q4:如何提高測量精度?

A:優(yōu)化方法

使用高精度模式:sht4.setPrecision(SHT4X_HIGH_PRECISION)

啟用加熱器:sht4.setHeater(SHT4X_MED_HEATER_100MS)

避免傳感器暴露在氣流中

五、結(jié)果顯示

成功運(yùn)行后,串口監(jiān)視器將輸出以下格式的數(shù)據(jù):

wKgZO2huSWSAMVpHAAMcxHCKsEo199.png

資源鏈接

SHT41數(shù)據(jù)手冊

STM32F407VET6參考手冊

Adafruit SHT4x庫GitHub

通過本教程,開發(fā)者可以快速構(gòu)建穩(wěn)定可靠的環(huán)境監(jiān)測系統(tǒng),點(diǎn)擊了解更多零知開發(fā)教程:

https://www.lingzhilab.com/freesources.html

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1541

    瀏覽量

    127828
  • 溫濕度傳感器
    +關(guān)注

    關(guān)注

    5

    文章

    600

    瀏覽量

    36524
  • STM32F4
    +關(guān)注

    關(guān)注

    3

    文章

    203

    瀏覽量

    29043
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    SHT3x系列溫濕度傳感器驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

    在我們的產(chǎn)品中經(jīng)常會(huì)遇到溫濕度檢測的需求??梢杂糜跈z測溫濕度傳感器元件也有很多。我們經(jīng)常使用的SHT各系列數(shù)字溫濕度
    發(fā)表于 12-12 15:14 ?3962次閱讀
    <b class='flag-5'>SHT</b>3x系列<b class='flag-5'>溫濕度</b><b class='flag-5'>傳感器</b>的<b class='flag-5'>驅(qū)動(dòng)</b>設(shè)計(jì)與實(shí)現(xiàn)

    SHT1x系列溫濕度傳感器驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

    在我們的產(chǎn)品中,經(jīng)常需要檢測溫濕度數(shù)據(jù)。有很多檢測溫濕度的方法和模塊,其中SHT1x系列溫濕度傳感器就是一種成本較低使用方便的
    發(fā)表于 12-14 14:11 ?1954次閱讀
    <b class='flag-5'>SHT</b>1x系列<b class='flag-5'>溫濕度</b><b class='flag-5'>傳感器</b>的<b class='flag-5'>驅(qū)動(dòng)</b>設(shè)計(jì)與實(shí)現(xiàn)

    STM32F407VET6STM32F407IET6有什么區(qū)別?

    STM32F407VET6STM32F407IET6,除了引腳上數(shù)量不同之外,還有什么區(qū)別嗎? 我的CAN驅(qū)動(dòng),在STM32F407VET6可正常運(yùn)行。在
    發(fā)表于 07-03 07:06

    開源——STM32F407VET6驅(qū)動(dòng)SHT41溫濕度傳感器完整教程

    目基于STM32F407VET6增強(qiáng)板,實(shí)現(xiàn)SHT41高精度溫濕度傳感器
    發(fā)表于 07-10 12:01

    sht10溫濕度傳感器驅(qū)動(dòng)

    本帖最后由 jafybestwish 于 2014-10-6 10:00 編輯 sht10溫濕度傳感器驅(qū)動(dòng),提供
    發(fā)表于 10-06 09:57

    開源分享-溫濕度模塊DHT11的使用

    、核心代碼// DHT11溫濕度傳感器demo演示 #include "dht11.h" //使用DHT11DHT sensor; void setup
    發(fā)表于 05-13 17:32

    基于SHT11溫濕度傳感器和單片機(jī)技術(shù)的智能溫濕度測量系統(tǒng)

    研究了基于SHT11溫濕度傳感器和單片機(jī)技術(shù)的智能溫濕度測量系統(tǒng)。系統(tǒng)使用SHT11溫濕度
    發(fā)表于 04-27 06:34

    SHT10溫濕度傳感器是如何進(jìn)行通信的

    怎樣去調(diào)試STM32F103ZET6及外圍傳感器呢?SHT10溫濕度傳感器是如何進(jìn)行通信的?
    發(fā)表于 11-11 06:42

    溫濕度傳感器如何驅(qū)動(dòng)SHT85單片機(jī)STM32 HAL庫?

    溫濕度傳感器如何驅(qū)動(dòng)SHT85單片機(jī)STM32 HAL庫?
    發(fā)表于 02-07 07:46

    STM32F407VET6數(shù)據(jù)手冊

    STM32F407VET6數(shù)據(jù)手冊。
    發(fā)表于 04-13 14:10 ?637次下載

    DHT22+數(shù)字溫濕度傳感器+AM2302+溫濕度模塊+取代SHT11+SHT15

    DHT22+數(shù)字溫濕度傳感器+AM2302+溫濕度模塊+取代SHT11+SHT15
    發(fā)表于 11-22 19:22 ?56次下載

    基于STM32F407VET6的CS1237驅(qū)動(dòng)程序

    基于STM32F407VET6的CS1237驅(qū)動(dòng)程序,親測可用,歡迎大家一起交流
    發(fā)表于 08-28 11:22 ?189次下載

    STM32F407VET6

    STM32F407VET6規(guī)格書
    發(fā)表于 02-07 15:59 ?100次下載

    stm32f407vet6原理介紹

    STM32F407VET6是一款基于ARM Cortex-M4內(nèi)核的高性能微控制,由STMicroelectronics公司生產(chǎn)。它具有豐富的外設(shè)和功能,廣泛應(yīng)用于各種嵌入式系統(tǒng)開發(fā)。本文將介紹
    的頭像 發(fā)表于 01-03 16:49 ?1.4w次閱讀
    <b class='flag-5'>stm32f407vet6</b>原理介紹

    開源——基于STM32F407VET6增強(qiáng)板的四路獨(dú)立計(jì)時(shí)

    本教程介紹基于STM32F407VET6增強(qiáng)板的四路獨(dú)立計(jì)時(shí)實(shí)現(xiàn)方案。項(xiàng)目采用TFT顯示屏、蜂鳴器和按鈕構(gòu)建交互系統(tǒng),支持各計(jì)時(shí)獨(dú)立
    的頭像 發(fā)表于 07-01 10:13 ?245次閱讀
    <b class='flag-5'>零</b><b class='flag-5'>知</b><b class='flag-5'>開源</b>——基于<b class='flag-5'>STM32F407VET6</b><b class='flag-5'>零</b><b class='flag-5'>知</b>增強(qiáng)板的四路獨(dú)立計(jì)時(shí)<b class='flag-5'>器</b>