ESP32 S3驱动SHT40温湿度传感器:从硬件连接到数据读取全解析

发布时间:2026/7/31 9:57:42
ESP32 S3驱动SHT40温湿度传感器:从硬件连接到数据读取全解析 1. 项目概述从零到一让ESP32 S3“感知”环境温湿度拿到一块ESP32 S3开发板除了点灯、联网我们还能用它做什么一个非常经典且实用的入门项目就是环境监测比如读取温度和湿度。这不仅是学习嵌入式开发的绝佳起点更是无数智能家居、农业物联网、仓储监控等实际应用的基石。今天要聊的就是如何用Arduino框架驱动ESP32 S3去读取一颗高性能的数字温湿度传感器——SHT40。SHT40是Sensirion公司出品的第四代温湿度传感器以其高精度、低功耗和强大的抗干扰能力著称。相比前代产品它在精度和长期稳定性上都有提升并且提供了I2C和I2C两种数字接口我们通常使用更通用的I2C使得与微控制器的连接变得异常简单。而ESP32 S3作为乐鑫新一代的Wi-Fi Bluetooth 5 (LE) MCU拥有更强大的计算能力、更多的GPIO和更完善的外设支持处理传感器数据游刃有余。这个项目的核心目标很明确搭建一个硬件最小系统编写Arduino程序通过调用专门的库函数从SHT40传感器中稳定、准确地读取温度和湿度数据并能够通过串口打印出来。整个过程涉及硬件连接、库安装、代码编写和调试是学习物联网硬件开发的典型闭环。无论你是刚接触Arduino和ESP32的爱好者还是希望快速验证传感器方案的工程师这篇内容都能给你一份清晰的“路线图”。2. 硬件选型与连接构建可靠的传感前端在写第一行代码之前正确的硬件连接是成功的一半。这一步看似简单却埋着不少新手容易踩的坑。我们先来理清需要哪些组件以及为什么这样选。2.1 核心组件解析为什么是ESP32 S3和SHT40ESP32 S3开发板市面上ESP32 S3的开发板选择很多比如官方推出的ESP32-S3-DevKitC-1或者像LILYGO、Seeed Studio等第三方厂商的模块。选择它们的主要原因在于其完善的Arduino核心支持和丰富的社区资源。ESP32 S3双核240MHz的主频为后续可能的数据处理、网络上传MQTT/HTTP提供了充足的性能余量。更重要的是其Arduino核心经过多年发展对I2C、SPI、ADC等外设的驱动已经非常稳定。SHT40传感器模块为了简化连接强烈建议购买已经将SHT40芯片与必要电路如上拉电阻、电平转换集成在一起的“模块”而不是裸芯片。常见的模块有DFRobot、Adafruit或一些国产厂商生产的款式。模块通常会引出标准的四根线VCC3.3V、GND、SCL时钟线、SDA数据线。有些模块还自带了一个简单的滤波电容使得电源更稳定。选择模块能极大降低硬件调试的复杂度。连接线使用杜邦线母对母进行连接是最方便的选择。对于追求稳定性的项目可以考虑在面包板上搭建或者直接焊接。2.2 电路连接详解与避坑指南SHT40与ESP32 S3通过I2C总线通信。I2C是一种两线制的同步串行总线需要连接SCL时钟和SDA数据两根线同时它们都需要通过上拉电阻连接到正电源通常是3.3V以确保总线在空闲时处于高电平状态。标准连接方式如下电源部分SHT40模块的VCC引脚 → ESP32 S3开发板的3.3V引脚。SHT40模块的GND引脚 → ESP32 S3开发板的GND引脚。注意务必确认是3.3VSHT40的工作电压范围是2.3V至5.5V虽然接5V也可能工作但为了与ESP32 S3的IO电平3.3V匹配避免电平不兼容的风险统一使用3.3V是最稳妥的方案。信号部分SHT40模块的SCL引脚 → ESP32 S3开发板的GPIO 15引脚。SHT40模块的SDA引脚 → ESP32 S3开发板的GPIO 14引脚。为什么是GPIO 15和14在Arduino ESP32核心中Wire库即I2C库的默认引脚就是SDA GPIO 21,SCL GPIO 22。但是很多ESP32 S3开发板为了兼容性和布局会将另一组I2C引脚比如GPIO 14和15也引出。这里使用14和15是为了演示如何自定义I2C引脚。实际上你可以使用任何支持输入输出的GPIO但需要避开一些用于特殊功能如Strapping的引脚。上拉电阻这是最容易忽略的一步。I2C总线协议要求SCL和SDA线必须通过电阻上拉到VCC。电阻值通常在4.7kΩ到10kΩ之间。幸运的是大部分SHT40模块已经内置了这两个上拉电阻。在连接前请务必查看你购买的模块原理图或商品描述。如果模块没有内置你需要自己在SCL和SDA线上分别连接一个4.7kΩ的电阻到3.3V。连接完成后的检查清单[ ] 电源正负极没有接反。[ ] 使用的是3.3V电源而非5V除非你非常确定模块和ESP32 S3的IO口兼容5V。[ ] SCL和SDA线已正确连接且没有接错SCL对SCLSDA对SDA。[ ] 确认上拉电阻已就位模块内置或外接。[ ] 所有连接牢固无虚接。注意如果后续程序运行后串口一直提示找不到I2C设备90%的问题都出在硬件连接上。请优先按照此清单逐项检查。3. 软件环境搭建与库管理硬件准备就绪后我们需要在电脑上搭建编程环境。对于Arduino开发这主要分为两步安装Arduino IDE或PlatformIO并配置ESP32开发板支持然后安装所需的传感器库。3.1 Arduino IDE配置与ESP32 S3支持包安装虽然现在PlatformIO在专业开发者中更受欢迎但Arduino IDE因其极简的上手难度依然是快速验证想法的最佳工具。这里以Arduino IDE 2.x为例。安装Arduino IDE从Arduino官网下载并安装最新版的Arduino IDE。添加ESP32开发板支持打开Arduino IDE进入文件-首选项。在“附加开发板管理器网址”中填入以下URL如果已有其他URL用逗号隔开https://espressif.github.io/arduino-esp32/package_esp32_index.json点击“好”保存。安装ESP32开发板点击侧边栏的“开发板管理器”图标或通过工具-开发板-开发板管理器打开。在搜索框中输入“esp32”。找到由“Espressif Systems”发布的“esp32”开发板包点击“安装”。这个过程会下载所有ESP32系列包括S3的编译工具链、库和定义需要一些时间请保持网络通畅。选择开发板与端口安装完成后在工具-开发板中选择ESP32 Arduino下的对应型号。如果你使用的是像“ESP32-S3-DevKitC-1”这样的官方板通常可以直接选择。如果不确定可以选择通用的ESP32S3 Dev Module。将ESP32 S3通过USB线连接到电脑。在工具-端口中选择新出现的串口在Windows上通常是COMx在macOS/Linux上是/dev/cu.usbserial-xxx。3.2 传感器库的安装与选择Adafruit_SHT4x要让Arduino程序与SHT40对话我们需要一个“翻译官”也就是驱动程序库。对于SHT40最主流、维护最积极的选择是Adafruit出品的Adafruit_SHT4x库。Adafruit的库通常代码质量高、文档齐全、示例丰富。安装方法通过库管理器在Arduino IDE中点击侧边栏的“库管理器”图标或工具-管理库...。在搜索框中输入“SHT4x”。找到“Adafruit SHT4x Library by Adafruit”点击“安装”。安装时IDE通常会提示“安装所有依赖项”一定要选择“安装全部”。因为Adafruit_SHT4x库依赖于Adafruit BusIO这个通用I2C/SPI辅助库。如果没有自动安装你需要手动搜索并安装Adafruit BusIO。为什么选择这个库官方合作Adafruit与Sensirion有合作其库通常能最先支持新款传感器并正确实现厂商提供的所有高级功能如加热器模式。统一接口Adafruit为许多传感器提供了风格一致的API学会一个很容易举一反三。丰富示例库中自带多个示例程序File-Examples-Adafruit SHT4x Library从基础读数到高级配置一应俱全是我们学习的绝佳素材。实操心得在安装库时务必关注安装日志。有时网络问题会导致库文件下载不完整造成编译时出现“No such file or directory”错误。如果遇到奇怪问题尝试删除C:\Users\[你的用户名]\Documents\Arduino\librariesWindows或~/Documents/Arduino/librariesmacOS/Linux下的对应库文件夹重新安装。4. 代码深度解析从初始化到数据读取环境搭建好库也装好了现在可以开始编写核心代码了。我们将从一个最简单的示例出发逐行拆解其工作原理并在此基础上进行扩展和优化。4.1 基础代码框架与库函数调用我们先来看一个最精简的、能工作的代码骨架#include Wire.h #include Adafruit_SHT4x.h Adafruit_SHT4x sht4 Adafruit_SHT4x(); void setup() { Serial.begin(115200); while (!Serial) { delay(10); // 等待串口连接对于某些板子有必要 } if (! sht4.begin()) { Serial.println(找不到 SHT4x 传感器); while (1) delay(10); } Serial.println(SHT4x 传感器初始化成功); // 可以在这里设置传感器参数例如精度模式 sht4.setPrecision(SHT4X_HIGH_PRECISION); sht4.setHeater(SHT4X_NO_HEATER); } void loop() { sensors_event_t humidity, temp; // 读取数据 sht4.getEvent(humidity, temp); // 打印数据 Serial.print(温度: ); Serial.print(temp.temperature); Serial.println( °C); Serial.print(湿度: ); Serial.print(humidity.relative_humidity); Serial.println( %); delay(2000); // 等待2秒 }代码拆解头文件引入#include Wire.h这是Arduino内置的I2C通信库所有基于I2C的设备都需要它来驱动底层硬件。#include Adafruit_SHT4x.h这就是我们刚刚安装的传感器专用库它封装了与SHT40通信的所有命令和数据处理逻辑。对象创建Adafruit_SHT4x sht4 Adafruit_SHT4x();这行代码创建了一个名为sht4的传感器对象。后续所有操作如初始化、读取数据都将通过这个对象的方法来完成。setup()函数Serial.begin(115200);初始化串口通信波特率设置为115200。这是为了通过USB将数据打印到电脑的串口监视器上。sht4.begin();这是最关键的初始化函数。它内部完成了以下几件事调用Wire.begin()来初始化ESP32的I2C硬件使用默认引脚21,22。向SHT40的I2C地址默认是0x44发送一个“软复位”命令让传感器回到已知状态。尝试读取传感器的序列号或进行一个简单的测量来验证通信是否成功。如果失败begin()返回false。setPrecision()和setHeater()这两个函数用于配置传感器。SHT4X_HIGH_PRECISION是精度最高的模式但耗时也稍长。SHT4X_NO_HEATER表示关闭内置的加热器加热器可用于驱散冷凝但会增加功耗。loop()函数sensors_event_t这是Adafruit库定义的一个通用结构体用于存放传感器事件数据。这里我们创建了两个一个存湿度一个存温度。sht4.getEvent(humidity, temp);这个函数执行一次完整的测量。它向传感器发送测量命令等待测量完成然后读取原始数据并根据芯片手册中的公式将其转换为温度摄氏度和湿度百分比的浮点数填充到我们传入的两个结构体变量中。最后通过Serial.print将数据输出并延迟2秒。4.2 高级配置与性能优化基础代码能工作但我们可以做得更好。SHT40提供了不同的测量模式在精度、速度和功耗之间有不同的权衡。精度模式选择setPrecision()函数可以接受以下参数SHT4X_HIGH_PRECISION最高精度模式。温度典型精度±0.2°C湿度典型精度±2%RH。测量时间最长约8.5ms。SHT4X_MED_PRECISION中等精度模式。测量时间约4.5ms。SHT4X_LOW_PRECISION低精度模式。测量时间最短约2ms。适用于对精度要求不高但需要快速响应的场景。加热器功能SHT40内部有一个微小的加热元件可以通过setHeater()控制SHT4X_NO_HEATER关闭默认。SHT4X_LOW_HEATER_100MS/SHT4X_HIGH_HEATER_100MS开启加热器100毫秒功率不同。加热可以短暂地提升传感器温度驱散可能影响湿度测量的冷凝常用于高湿环境后的恢复。注意频繁或长时间加热会显著增加功耗并可能影响温度测量的准确性因为加热器本身会产生热量。自定义I2C引脚如果你的SDA和SCL没有接在默认的21和22引脚上比如我们之前连接到了14和15就需要在begin()之前初始化Wire库。void setup() { Serial.begin(115200); Wire.begin(14, 15); // SDA, SCL 引脚号 if (! sht4.begin()) { Serial.println(找不到 SHT4x 传感器); while (1) delay(10); } // ... 其余配置 }优化读取逻辑在loop()中getEvent()是“阻塞式”的即它会一直等待传感器测量完成。对于简单的数据记录这没问题但在复杂的、需要同时处理多任务的程序中比如同时维护Wi-Fi连接阻塞可能会带来问题。一个更优的模式是使用“状态机”或非阻塞延时unsigned long previousMillis 0; const long interval 2000; // 间隔2秒 void loop() { unsigned long currentMillis millis(); if (currentMillis - previousMillis interval) { previousMillis currentMillis; sensors_event_t humidity, temp; if (sht4.getEvent(humidity, temp)) { // getEvent也返回成功与否 Serial.print(温度: ); Serial.print(temp.temperature); Serial.println( °C); Serial.print(湿度: ); Serial.print(humidity.relative_humidity); Serial.println( %); } else { Serial.println(读取传感器失败); } } // 在这里可以插入其他非阻塞任务如检查网络状态 }这种方式利用millis()函数进行时间管理避免了delay()造成的整个程序停滞。5. 串口调试与数据可视化代码上传后我们需要验证它是否正常工作并观察数据。Arduino IDE自带的串口监视器是最基本的工具。5.1 使用串口监视器验证数据在Arduino IDE中点击右上角的“串口监视器”图标或工具-串口监视器。确保右下角的波特率设置为115200与代码中Serial.begin(115200)一致。如果一切正常你应该会看到每秒输出一次的温度和湿度数据。如何解读数据温度单位是摄氏度°C。在室内环境下通常应在15-30°C之间。你可以用手触摸传感器小心静电应该能看到温度缓慢上升。湿度单位是百分比相对湿度%RH。室内舒适湿度一般在40%-60%之间。对着传感器哈气湿度值应该会迅速上升。如果串口监视器一片空白或者一直打印“找不到传感器”请按以下步骤排查检查开发板和端口选择是否正确。检查硬件连接特别是电源和I2C线路。尝试降低I2C时钟速度在Wire.begin()后添加Wire.setClock(100000);100kHz。有些线缆或模块在高速默认400kHz下不稳定。运行一个I2C扫描程序检查ESP32是否能发现总线上地址为0x44的设备。5.2 使用串口绘图器进行初步可视化串口监视器只能看数字而串口绘图器能将这些数字实时绘制成曲线非常直观。在Arduino IDE中点击工具-串口绘图器。为了能让绘图器识别我们需要调整数据输出格式。绘图器期望接收以逗号或空格分隔的数值数据。修改打印部分代码如下Serial.print(temp.temperature); Serial.print(,); // 用逗号分隔 Serial.println(humidity.relative_humidity); // 湿度后换行打开串口绘图器你可能会看到两条曲线重叠在一起因为它们的范围不同温度0-50湿度0-100。绘图器会自动缩放但为了更好观察可以分别输出// 或者输出为两行绘图器会识别为两个数据集 Serial.print(Temperature:); Serial.println(temp.temperature); Serial.print(Humidity:); Serial.println(humidity.relative_humidity);这样绘图器会显示两条独立的曲线。5.3 进阶数据记录与云端可视化对于长期监测项目将数据保存下来或发送到云端是必然需求。这里提供两个简单的进阶方向1. 本地SD卡记录如果ESP32 S3开发板有SD卡槽可以使用SD库将数据以CSV格式写入文件。这样即使断网数据也不会丢失。#include SD.h File dataFile; void setup() { // ... 初始化串口、传感器 ... if (!SD.begin()) { Serial.println(SD卡初始化失败); return; } dataFile SD.open(/datalog.csv, FILE_WRITE); if (dataFile) { dataFile.println(Timestamp, Temperature (C), Humidity (%)); // 写表头 dataFile.close(); } } void loop() { // ... 读取传感器数据 ... dataFile SD.open(/datalog.csv, FILE_APPEND); if (dataFile) { dataFile.print(millis()); dataFile.print(,); dataFile.print(temp.temperature); dataFile.print(,); dataFile.println(humidity.relative_humidity); dataFile.close(); } }2. 通过Wi-Fi上传到MQTT服务器或Web服务ESP32 S3的核心优势是Wi-Fi。你可以轻松地将数据发布到MQTT主题如用于Home Assistant或通过HTTP POST发送到自定义的服务器接口。#include WiFi.h #include HTTPClient.h const char* ssid 你的Wi-Fi名称; const char* password 你的Wi-Fi密码; const char* serverUrl http://你的服务器地址/api/sensor-data; void setup() { // ... 初始化串口、传感器 ... WiFi.begin(ssid, password); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } Serial.println(WiFi连接成功); } void loop() { // ... 读取传感器数据 ... if (WiFi.status() WL_CONNECTED) { HTTPClient http; http.begin(serverUrl); http.addHeader(Content-Type, application/json); String jsonPayload {\temp\: String(temp.temperature) ,\hum\: String(humidity.relative_humidity) }; int httpResponseCode http.POST(jsonPayload); if (httpResponseCode 0) { Serial.print(HTTP响应代码: ); Serial.println(httpResponseCode); } else { Serial.print(发送失败错误: ); Serial.println(httpResponseCode); } http.end(); } delay(30000); // 每30秒上传一次 }这只是一个最基础的HTTP示例。在实际项目中你需要考虑添加Wi-Fi重连机制、数据缓存防止网络中断丢失数据、更安全的数据格式和加密等。6. 常见问题排查与性能优化实录在实际操作中你几乎一定会遇到各种各样的问题。下面是我在多次项目中总结出来的常见问题清单和解决方法。6.1 硬件与连接问题问题1编译上传成功但串口监视器提示“找不到 SHT4x 传感器”排查步骤检查电源用万用表测量SHT40模块的VCC和GND之间电压确保是稳定的3.3V。ESP32的3.3V引脚输出电流有限如果连接了多个外设可能导致电压被拉低。检查I2C线路确认SDA和SCL没有接反。确认连接线是好的可以换一组线试试。检查上拉电阻这是最常见的原因。如果你的模块没有内置上拉电阻必须在SCL和SDA上各接一个4.7kΩ电阻到3.3V。即使模块声称有有时质量差的模块电阻值不对或虚焊可以尝试外接上拉电阻。运行I2C扫描程序上传一个I2C扫描代码Arduino IDE示例Wire-scanner查看总线上有哪些设备地址。正常情况下你应该能看到地址0x44。如果什么都看不到说明I2C总线根本没通如果看到其他地址但不是0x44可能是地址冲突或传感器损坏。降低I2C速度在setup()中的Wire.begin()后添加Wire.setClock(100000);将总线速度从默认的400kHz降到100kHz。长导线或干扰环境下高速通信容易失败。检查地址SHT40的I2C地址默认是0x44。极少数模块可能通过跳线改变了地址例如0x45。查看你的模块手册。如果是这样需要在begin()时指定地址sht4.begin(0x45);。问题2读取的数据明显不准比如湿度始终是0%或100%温度异常排查步骤给传感器适应时间传感器从不同环境如干燥的包装袋中取出需要一段时间称为“恢复时间”才能达到稳定特别是湿度传感器。通电后等待至少30秒到1分钟再判断数据是否准确。检查物理污染确保传感器感应区没有被灰尘、油污或水滴直接覆盖。SHT40的感应窗很脆弱不要用手触摸。排除热源干扰将传感器远离ESP32芯片、LDO稳压器等发热元件。微控制器工作时会发热影响附近的温度测量。使用排线将传感器模块远离开发板放置。验证读数用另一个你信任的温湿度计如家用电子温湿度计放在传感器旁边进行对比。允许有少量误差±0.5°C ±3%RH。6.2 软件与代码问题问题3程序运行一段时间后卡死或数据不再更新可能原因与解决看门狗超时ESP32的看门狗定时器WDT会监控程序运行。如果loop()中某次操作如网络请求耗时过长没有及时“喂狗”调用delay()或yield()会导致芯片重启。确保长时间操作被拆分成非阻塞状态或者使用delay()时时间不要太长。堆栈溢出或内存泄漏在loop()中频繁创建大型对象如String可能导致内存碎片化最终耗尽。尽量使用全局变量或静态变量对于字符串操作使用字符数组char array而非String类。I2C总线锁死这是一个棘手的硬件问题。当I2C通信意外中断如设备在通信中断电总线可能被锁死在低电平。解决方案是在代码中加入I2C总线恢复机制在初始化Wire前尝试手动拉高SDA和SCL线或者最简单粗暴的方法——在setup()最前面添加一个短暂的Wire.begin()和Wire.end()有时能复位总线状态。问题4想同时连接多个I2C设备如SHT40和OLED屏幕如何操作解决方案I2C总线支持多主多从所有设备共享SDA和SCL线通过唯一地址区分。你只需要将所有设备的VCC、GND、SDA、SCL分别并联起来即可。但要特别注意总线上所有设备的电源电压必须一致都接3.3V。总的上拉电阻只需要一组通常每个设备模块自带并联后电阻值会减小如果总电阻太小导致电流过大可以适当增大电阻值或只保留一组。在代码中分别初始化不同的设备对象它们会通过各自的地址进行通信互不干扰。6.3 精度与稳定性优化技巧减少自热影响ESP32芯片在工作时特别是Wi-Fi射频部分开启时会产生可观的热量。这会导致紧挨着它的传感器测得的温度高于环境温度。解决方案是物理隔离用杜邦线将传感器模块延长放置到远离开发板的位置。测量策略如果需要高精度温度可以在启动Wi-Fi进行数据传输前先读取温度或者仅在Wi-Fi休眠时进行关键测量。理解响应时间SHT40的湿度传感器对变化响应不是瞬间的。从干燥环境移到潮湿环境需要数十秒甚至几分钟才能达到稳定读数。这不是故障而是物理特性。对于需要快速响应的应用如检测呼吸需要选择响应时间更快的传感器型号。定期校准高级虽然SHT40出厂校准精度很高但在极端环境或长期使用后仍可能与真实值有偏差。你可以通过在一个已知稳定、准确的环境如使用更高精度的参考仪表中记录一组传感器读数和参考值计算出一个偏移量offset和增益系数gain在代码中进行软件补偿。但这需要精密的实验环境对于大多数应用出厂精度已完全足够。7. 项目扩展与进阶思路一个简单的温湿度读取项目可以作为跳板扩展到更多有趣和实用的方向。7.1 构建本地显示终端与其总是打开电脑看串口不如增加一个本地显示屏。一块0.96英寸的OLEDI2C接口是绝佳搭档。硬件将OLED的VCC、GND、SDA、SCL与SHT40和ESP32 S3并联。软件安装Adafruit SSD1306和Adafruit GFX库。代码在loop()中读取传感器数据后调用OLED库函数将温度和湿度数值显示在屏幕上。你还可以绘制简单的历史曲线图。7.2 创建低功耗环境记录仪如果想让设备用电池运行数周甚至数月低功耗设计是关键。硬件使用ESP32-S3的深度睡眠模式。将SHT40的VCC连接到一个GPIO引脚需要测量时才供电。软件配置ESP32定时唤醒如每5分钟。唤醒后将GPIO置高给SHT40供电等待几毫秒让其稳定。读取传感器数据。将数据存入RTC内存或外置SPI Flash/EEPROM。关闭SHT40电源GPIO置低。让ESP32进入深度睡眠。数据回收可以设计为定期通过Wi-Fi上传积攒的数据或者通过蓝牙LEBluetooth LE在需要时由手机靠近读取。7.3 集成到智能家居平台这是最实用的扩展。将ESP32 S3作为温湿度节点接入Home Assistant或Apple HomeKit。Home Assistant (ESPHome)这是最简单的方式。ESPHome是一个基于YAML配置的系统你几乎不用写C代码。在配置文件中定义SHT40传感器和Wi-Fi连接刷入固件后设备会自动出现在Home Assistant中。esphome: name: esp32-s3-sht40 esp32: board: esp32-s3-devkitc-1 i2c: sda: 14 scl: 15 sensor: - platform: sht4x temperature: name: Living Room Temperature humidity: name: Living Room HumidityHome Assistant (MQTT)如果你喜欢更多控制权可以使用Arduino代码通过Wi-Fi连接MQTT服务器如Mosquitto然后按照Home Assistant的MQTT发现协议发布温湿度数据。Home Assistant会自动创建对应的传感器实体。Apple HomeKit使用arduino-homekit等库可以将ESP32 S3模拟成一个HomeKit配件直接在iPhone的家庭App中添加和管理。从点亮第一颗LED到让微控制器感知真实世界的物理量是嵌入式开发学习中一次巨大的飞跃。ESP32 S3与SHT40的组合提供了一个性能强大、可靠性高且成本合理的环境感知方案。整个过程涉及了硬件接口、通信协议、库的使用、调试排错等多个环节是一个完整的微型项目闭环。当你成功在串口监视器上看到跳动的温湿度数字时那种成就感是无可替代的。更重要的是这个小小的数据源可以成为你下一个智能恒湿花盆、仓库环境监控系统或是家庭气象站的核心。不妨试着给它加上屏幕、连上网络或者装进一个3D打印的外壳你会发现创造的过程才刚刚开始。