零知開源——STM32F407VET6驅動SHT41溫濕度傳感器完整教程

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

?訪問零知開源平臺,獲取更多實戰項目和教程資源吧!

www.lingzhilab.com

目錄

一、硬件連接

1.1 硬件清單

?1.2 接線硬件表

1.3 接線實物圖

二、軟件環境配置

2.1 安裝開發工具?

2.2 依賴庫

三、核心代碼實現

3.1 零知IDE代碼驅動?

3.2?核心庫函數解析?

3.2.1?Adafruit_SHT4x庫?

3.2.2?Adafruit_Sensor庫

3.2.3?Adafruit_I2CDevice庫

四、常見問題解答

Q1:編譯時報錯"Adafruit_SHT4x.h: No such file or directory"?

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

Q3:數據讀取不穩定或CRC校驗失敗

Q4:如何提高測量精度?

五、結果顯示


項目概述?

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

一、硬件連接

1.1 硬件清單

? ? ? ? ?>主控芯片:STM32F407VET6零知增強板

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

? ? ? ? ?>杜邦線若干

?1.2 接線硬件表

SHT41引腳零知增強板引腳功能說明
VCC3.3V電源正極
GNDGND電源地
SCL21/SCLI2C時鐘線
SDA20/SDAI2C數據線

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

1.3 接線實物圖

二、軟件環境配置

2.1 安裝開發工具?

?????????零知IDE 3.8.0

? ? ? ? ?選擇開發板零知增強板

2.2 依賴庫

  • Adafruit SHT4x Library
  • Adafruit_I2CDevice
  • Adafruit BusIO

三、核心代碼實現

3.1 零知IDE代碼驅動?

#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);}// 設置高精度模式sht4.setPrecision(SHT4X_HIGH_PRECISION);// 關閉加熱器(節能模式)sht4.setHeater(SHT4X_NO_HEATER);
}void loop() {sensors_event_t humidity, temp;sht4.getEvent(&humidity, &temp);  // 讀取數據Serial.print("Temperature: "); Serial.print(temp.temperature); Serial.println(" ℃");Serial.print("Humidity: "); Serial.print(humidity.relative_humidity); Serial.println("% rH");delay(1000);  // 每秒讀取一次
}

3.2?核心庫函數解析?

3.2.1?Adafruit_SHT4x庫?
bool Adafruit_SHT4x::begin(TwoWire *theWire) {i2c_dev = new Adafruit_I2CDevice(SHT4x_DEFAULT_ADDR, theWire);if (!i2c_dev->begin()) return false;return reset(); // 發送復位命令
}
  1. 功能:初始化I2C通信并復位傳感器
  2. 參數:I2C接口指針(默認使用Wire)
  3. 返回值:初始化成功返回true,失敗返回false

bool Adafruit_SHT4x::getEvent(sensors_event_t *humidity, sensors_event_t *temp) {// 根據精度和加熱器設置選擇命令uint8_t cmd = SHT4x_NOHEAT_HIGHPRECISION; uint16_t duration = 10;// 發送測量命令if (!i2c_dev->write(&cmd, 1)) return false;delay(duration); // 等待測量完成// 讀取6字節數據(溫度+CRC, 濕度+CRC)uint8_t readbuffer[6];if (!i2c_dev->read(readbuffer, 6)) return false;// CRC校驗if (readbuffer[2] != crc8(readbuffer, 2) ||readbuffer[5] != crc8(readbuffer + 3, 2)) return false;// 原始數據轉換uint16_t temp_raw = (readbuffer[0] << 8) | readbuffer[1];uint16_t hum_raw = (readbuffer[3] << 8) | readbuffer[4];// 轉換為實際值_temperature = -45 + 175 * temp_raw / 65535.0;_humidity = -6 + 125 * hum_raw / 65535.0;// 填充傳感器事件if (temp) fillTempEvent(temp, millis());if (humidity) fillHumidityEvent(humidity, millis());return true;
}
  1. 功能:獲取溫濕度數據并填充到事件結構體
  2. 參數:指向溫濕度事件結構體的指針
  3. 返回值:成功返回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 << 1) ^ POLYNOMIAL : (crc << 1);}}return crc;
}
  1. 功能:計算CRC8校驗碼
  2. 參數:數據指針和長度
  3. 返回值:CRC8校驗值

3.2.2?Adafruit_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;
}
  1. 功能:填充溫度事件結構體
  2. 參數:

????????temp:目標結構體指針
????????timestamp:時間戳

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;
}
  1. 功能:填充濕度事件結構體
  2. 參數:

????????humidity:目標結構體指針
????????timestamp:時間戳

3.2.3?Adafruit_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操作(常用模式)
參數:

  • write_buffer:寫入數據緩沖區
  • write_len:寫入數據長度
  • read_buffer:讀取數據緩沖區
  • read_len:讀取數據長度
  • stop:是否在寫操作后發送停止條件

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設備讀取數據
參數:

  • buffer:數據緩沖區
  • len:讀取長度
  • stop:是否發送停止條件

四、常見問題解答

Q1:編譯時報錯"Adafruit_SHT4x.h: No such file or directory"?

A:解決方法

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

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

A:排查步驟

  1. 檢查硬件連接(VCC、GND、SCL、SDA)
  2. 確認I2C地址正確(SHT41默認為0x44)
  3. 使用I2C掃描工具確認設備地址
  4. 檢查上拉電阻(4.7kΩ)?

Q3:數據讀取不穩定或CRC校驗失敗

A:解決方案

  1. 降低I2C時鐘速度
  2. 縮短I2C總線長度
  3. 嘗試不同的精度模式

Q4:如何提高測量精度?

A:優化方法

  1. 使用高精度模式:sht4.setPrecision(SHT4X_HIGH_PRECISION)
  2. 啟用加熱器:sht4.setHeater(SHT4X_MED_HEATER_100MS)
  3. 避免傳感器暴露在氣流中?

五、結果顯示

成功運行后,串口監視器將輸出以下格式的數據:?

資源鏈接?

????????SHT41數據手冊?

????????STM32F407VET6參考手冊

????????Adafruit SHT4x庫GitHub

?通過本教程,開發者可以快速構建穩定可靠的環境監測系統,點擊了解更多零知開發教程:

零知實驗室--零知開源

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88922.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88922.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88922.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux流量分析:tcpdump wireshark

前言 最近因為工作需要&#xff0c;研究了下如何使用tcpdump和wireshark分析業務流量。如果要使用tcpdump分析具體的HTTP請求耗時&#xff0c;需捕獲網絡數據包并分析時間戳信息&#xff0c;重點關注TCP連接的建立、HTTP請求發送到響應接收的全過程。 以下是具體步驟和技巧&…

深度學習圖像分類數據集—角膜潰瘍識別分類

該數據集為圖像分類數據集&#xff0c;適用于ResNet、VGG等卷積神經網絡&#xff0c;SENet、CBAM等注意力機制相關算法&#xff0c;Vision Transformer等Transformer相關算法。 數據集信息介紹&#xff1a;角膜潰瘍識別分類&#xff1a;[dot, mix, slice] 訓練數據集總共有270張…

功能強、超好用【PDF轉換工具】的介紹下載與安裝教程

Windows 電腦上一款簡單好用的PDF轉換工具&#xff0c;可以輕松地將其他文檔轉換為 PDF 格式&#xff0c;也可以將 PDF 文件轉換為其他格式&#xff0c;如常見的 Word、Excel、PPT 等。 此外軟件還支持 Office 文檔合并分割、旋轉頁面、拼接頁面、刪除文字、刪除頁面、添加水印…

c# 釘釘應用實現監聽審批事件以及獲取審批結果的流程

oa的操作已經測試了一遍 image.png如果是自建oa則代表發起的審批是跳轉網頁&#xff0c;否則釘釘打開后是一個表單界面&#xff0c;不需要調整自己搞得oa。 所以我感覺目前公司的需求更適合官方oa 表單來填寫,更靈活&#xff0c;還支持用戶配置。 但是用戶點了審批&#xff0c;…

Typecho架構深度剖析:輕量級博客系統的設計哲學與實現原理

文章目錄 深度解析Typecho:輕量級博客系統的架構設計與實現1. Typecho概述與技術背景1.1 發展歷程1.2 核心特性2. 系統架構設計分析2.1 核心架構圖2.2 核心組件3. 核心模塊實現分析3.1 路由系統實現3.2 數據庫抽象層4. 插件系統深度解析4.1 Hook機制實現4.2 插件開發示例5. 性…

LangChain 內存(Memory)

1. 為什么需要內存&#xff1f; 大型語言模型&#xff08;LLM&#xff09;本身是無狀態的。這意味著每次你向 LLM 發送一個請求&#xff08;Prompt&#xff09;&#xff0c;它都會獨立處理這個請求&#xff0c;完全不記得之前任何的交互。這在構建一次性問答應用時沒問題&#…

基于定制開發開源AI智能名片S2B2C商城小程序的社群游戲定制策略研究

摘要&#xff1a;本文聚焦社群游戲定制領域&#xff0c;深入探討以社群文化和用戶偏好為導向的定制策略。通過分析互動游戲活動、社群文化塑造等關鍵要素&#xff0c;結合定制開發開源AI智能名片S2B2C商城小程序的技術特性&#xff0c;提出針對性游戲定制方案。研究旨在提升社群…

自動駕駛決策與規劃

目錄 自動駕駛決策與規劃概述 決策與規劃體系結構 分層遞階式決策規劃 反應式體系結構 混合式體系結構 決策與規劃系統的關鍵環節 路徑規劃 軌跡規劃 行為決策 異常處理 自動駕駛的路徑規劃技術 維諾圖法 柵格法 Dijkstra算法 A*算法 自動駕駛的行為決策方法 …

C++編譯期計算:常量表達式(constexpr)全解析

在C性能優化領域&#xff0c;"將計算盡可能轉移到編譯期"是一條黃金法則。編譯期計算&#xff08;Compile-Time Computation&#xff09;能顯著減少程序運行時的開銷&#xff0c;提升執行效率&#xff0c;同時還能在編譯階段暴露潛在錯誤。C11引入的constexpr關鍵字及…

【micro:bit】從入門到放棄(一):在線、離線版本的使用

1、離線版 micro:bit 1)下載地址 https://makecode.microbit.org/offline-app 2)雙擊安裝包,makecode-microbit-setup-win64.exe,自動安裝,安裝成功后圖標如下圖所示 3)運行程序,查看版本信息 4)主界面如下 5)編程界面 點擊“新建項目”或者“導入”進入編程界…

Flink Forward Asia 2025 主旨演講精彩回顧

作為 Apache Flink 社區備受矚目的年度盛會之一&#xff0c;由阿里云承辦的 Flink Forward Asia 2025 于 7 月 3 日在新加坡正式拉開帷幕。From Real-Time Data Analytics to Real-Time AI&#xff0c;Flink 生態全面擁抱 AI本次大會上&#xff0c;Apache Flink 中文社區發起人…

車道偏離預警(LDW)功能介紹

車道偏離預警&#xff08;LDW&#xff09;功能介紹 LDW功能 通過攝像頭監測前方車道線&#xff0c;當車輛偏離車道線時&#xff0c;系統發出報警提醒。 系統框圖報警條件 最早報警線最遲報警線報警臨界線 設置在 最早/最遲報警線 之間接口定義 輸入/輸出系統算法 橫向偏離速度模…

軟考(軟件設計師)計算機網絡-網絡層

obsidian做markdown筆記太爽了&#xff0c;康奈爾模板筆記看起來舒服&#xff0c;CSDN試了幾種方式&#xff0c;不支持&#xff0c;只能貼圖了&#xff0c;將就看吧&#x1f60f;&#xff08;狗頭保命&#xff09;工作原理圖解 #mermaid-svg-e5Tgpt26jUftujKn {font-family:&qu…

nginx反向代理實現跨域請求

記錄一個項目中遇到的跨域請求問題&#xff0c;解決跨域問題無非幾種辦法&#xff1a;1、后端解決&#xff0c;推薦的做法&#xff0c;可以看我之前寫的文章&#xff0c;fastadmin的后臺配置跨域&#xff1b;2、前端配置proxy代理&#xff08;開發環境用&#xff09;&#xff1…

利用Wisdom SSH高效搭建CI/CD工作流

在軟件開發流程中&#xff0c;CI/CD工作流對于提升效率與確保質量起著關鍵作用。Wisdom SSH作為一款強大工具&#xff0c;其官網為ssh.wisdomheart.cn&#xff0c;借助AI助手能大幅簡化CI/CD工作流的搭建過程。假設服務器已完成基礎配置&#xff0c;下面為您介紹如何利用Wisdom…

深度學習-循環神經網絡RNN

文章目錄序列模型循環神經網絡案例詞的表示輸出的表示矩陣運算表示交叉熵損失時間反向傳播算法BPTT梯度消失與梯度爆炸GRULSTM總結序列模型 循環神經網絡 st是上一個隱層的輸出&#xff0c;體現序列數據之間有很強的關聯性。 案例 > S0是初始輸入&#xff0c;一般是0&#…

【Linux網絡編程】Socket - TCP

目錄 V1版本 - Echo Server 初始化服務器 啟動服務器 客戶端 一些BUG與問題 解決服務器無法一次處理多個請求的問題 多進程版本 多線程版本 線程池版本 V2版本 - 多線程遠程執行命令 V1版本 - Echo Server 初始化服務器 TCP大部分內容與UDP是相同的&#xff0c;我們…

知識圖譜構建簡單分享

最近系統性地學習了知識圖譜構建的關鍵技術&#xff0c;并結合醫療領域知識&#xff0c;完成了一個醫療知識圖譜項目的實踐。以下是整理的項目架構&#xff0c;歡迎交流指正。說明&#xff1a;當前項目實際實現主要應用了數據預處理、模型設計與預訓練、模型優化與測試等核心技…

MCU中的系統控制器(System Controller)是什么?

MCU中的系統控制器&#xff08;System Controller&#xff09;是什么&#xff1f; 在微控制器&#xff08;MCU&#xff09;中&#xff0c;系統控制器&#xff08;System Controller&#xff09;是一個關鍵模塊&#xff0c;負責管理和協調MCU內部的核心功能&#xff0c;確保系統…

【Datawhale夏令營】用AI做帶貨視頻評論分析

文本分類、文本聚類 基礎庫&#xff1a; pandas, sklearn功能&#xff1a; 商品識別、情感分析、評論聚類商品識別&#xff1a; 視頻文本信息&#xff0c;預測推廣商品名稱 & 情感分析&#xff1a;四個維度&#xff08;情感傾向、用戶場景、用戶疑問、用戶建議&#xff09…