2. 核心器件选型:微控制器选型(STM32L0/ESP32)、温湿度传感器(SHT30/DHT22)、土壤湿度传感器

好,咱们进入第二讲。器件选型这事儿,说白了就是给项目找最合适的“零件”。我见过不少新手,一上来就盯着性能最强的芯片,结果做出来的东西又贵又费电,放在温室里根本跑不了几天。今天咱们就聊聊,怎么给低功耗温室监测节点挑“心脏”和“感官”。

2.1 微控制器选型:STM32L0 vs ESP32

微控制器是整个节点的“大脑”。选它的时候,我主要看三点:功耗、外设资源、开发成本。在温室场景下,节点通常靠电池供电,一待就是几个月甚至一年。所以,低功耗是第一优先级。

2.1.1 STM32L0 系列

我个人习惯,如果项目对功耗要求极其苛刻,我会首选 STM32L0。这个系列是 ST 专门为低功耗设计的,典型代表是 STM32L051。

  • 功耗表现:运行模式下,电流低至 87 µA/MHz。待机模式更是夸张,只有 0.4 µA。我做过一个项目,用两节 AA 电池供电,节点每 10 分钟采集一次数据,愣是跑了 14 个月。
  • 外设资源:内置 12 位 ADC、I2C、SPI、UART,驱动传感器完全够用。还有 RTC(实时时钟),可以精确控制唤醒周期。
  • 开发难度:用 STM32CubeMX 配置,HAL 库开发,资料非常全。嗯,这里要注意,L0 系列主频只有 32 MHz,不适合做复杂计算。

我的经验:STM32L0 的 Stop 模式有个小坑。我曾经在项目中直接调用 HAL_PWR_EnterSTOPMode(),结果发现 RTC 唤醒后,ADC 采样值总是不对。后来查手册才发现,退出 Stop 模式后,需要重新校准 HSI 时钟。加一行 HAL_RCC_ClockConfig() 就解决了。

2.1.2 ESP32

如果你需要 Wi-Fi 或蓝牙功能,那 ESP32 就是绕不开的选择。它集成了 2.4 GHz Wi-Fi 和蓝牙,价格还便宜,一片不到 10 块钱。

  • 功耗表现:这是 ESP32 的短板。运行模式下,Wi-Fi 开启时电流高达 80 mA 以上。深度睡眠模式可以降到 5 µA 左右,但唤醒后重新连接 Wi-Fi 需要 2-3 秒,这期间功耗很高。
  • 适用场景:我建议,如果温室节点需要实时上传数据到云端,或者需要 OTA 升级,那 ESP32 是首选。但如果只是本地采集、定期上报,用 STM32L0 加一个 LoRa 模块会更省电。
  • 开发难度:Arduino 生态支持非常好,用 Arduino IDE 就能上手。ESP-IDF 框架功能更强大,但学习曲线陡一些。

避坑指南:我曾经用 ESP32 做低功耗项目,发现它有个“假死”问题。在深度睡眠模式下,如果 GPIO 电平配置不当,芯片可能会被意外唤醒,导致电池快速耗尽。解决办法是:在进入睡眠前,把所有未使用的 GPIO 都设置为下拉输入。

2.1.3 选型对比

参数 STM32L051 ESP32
运行功耗 87 µA/MHz 80 mA (Wi-Fi 开启)
待机功耗 0.4 µA 5 µA (深度睡眠)
主频 32 MHz 240 MHz
无线功能 无(需外挂) Wi-Fi + 蓝牙
价格 约 8 元 约 10 元
开发难度 中等 低(Arduino)

我的建议:如果节点是电池供电、不需要实时联网,选 STM32L0。如果节点需要 Wi-Fi 上传数据,且电源供电方便,选 ESP32。你想想看,一个温室里几十个节点,每个都换电池,那维护成本得多高?

2.2 温湿度传感器:SHT30 vs DHT22

温湿度是温室监测的基础数据。选传感器时,我主要看精度、稳定性和功耗。

2.2.1 SHT30

SHT30 是 Sensirion 家的产品,我用了好几年。它采用 I2C 接口,精度高,长期稳定性好。

  • 精度:温度 ±0.3°C,湿度 ±2% RH。这个精度在温室里完全够用。
  • 功耗:单次测量约 4.8 µJ,待机电流 0.2 µA。非常适合低功耗场景。
  • 接口:I2C,地址可选(0x44 或 0x45)。一条总线上可以挂多个传感器。

我的经验:SHT30 有个“加热”功能,可以用来除湿。我在一个高湿度的温室项目中,每隔 1 小时开启一次加热模式,持续 100 ms,成功防止了传感器结露。代码很简单:

// 开启加热模式
uint8_t cmd[2] = {0x30, 0x6D};
HAL_I2C_Master_Transmit(&hi2c1, 0x44 << 1, cmd, 2, 100);

2.2.2 DHT22

DHT22 是国产传感器,价格便宜,单总线通信。很多初学者喜欢用它,因为库函数多,代码简单。

  • 精度:温度 ±0.5°C,湿度 ±2% RH。比 SHT30 略差,但也能用。
  • 功耗:单次测量约 1.5 mA,待机电流 50 µA。功耗比 SHT30 高不少。
  • 接口:单总线,时序要求严格。我见过不少项目因为时序问题导致数据读取失败。

避坑指南:我曾经用 DHT22 做批量测试,发现 100 个传感器里有 3 个湿度偏差超过 5%。后来我养成了习惯:每次采购 DHT22 后,先用标准湿度计校准一遍,把偏差值写进 EEPROM 里做补偿。

2.2.3 选型对比

参数 SHT30 DHT22
温度精度 ±0.3°C ±0.5°C
湿度精度 ±2% RH ±2% RH
单次测量功耗 4.8 µJ 约 15 mJ
接口 I2C 单总线
价格 约 15 元 约 5 元

我的建议:预算允许的话,优先选 SHT30。它的稳定性和低功耗表现,能省去后期很多维护麻烦。如果项目成本敏感,DHT22 也能用,但一定要做好校准和时序测试。

2.3 土壤湿度传感器

土壤湿度传感器,说白了就是测土壤里的含水量。市面上常见的有电容式和电阻式两种。

2.3.1 电容式土壤湿度传感器

我强烈推荐电容式。它通过测量土壤介电常数来推算湿度,不会像电阻式那样因为电极腐蚀而失效。

  • 工作原理:利用高频振荡电路,土壤湿度变化会引起电容变化,进而改变振荡频率。单片机通过测量频率或电压来换算湿度。
  • 优点:寿命长,不易腐蚀,对土壤盐分不敏感。
  • 缺点:需要 ADC 或频率测量引脚,成本略高。

我的经验:电容式传感器有个“温漂”问题。我在一个北方温室项目中,冬天和夏天的测量值差了 8%。后来我在代码里加了温度补偿:

// 温度补偿公式(经验值)
float compensated_humidity = raw_value - 0.3 * (temperature - 25);

这个系数需要根据实际土壤类型标定,但至少能减少一半的误差。

2.3.2 电阻式土壤湿度传感器

电阻式传感器就是两根金属探针,插在土壤里测电阻。土壤越湿,电阻越小。

  • 优点:便宜,电路简单,一个分压电阻加 ADC 就能用。
  • 缺点:电极容易电解腐蚀,用几个月就不准了。而且对土壤盐分敏感,浇了肥水后读数会乱跳。

避坑指南:我曾经贪便宜用了电阻式传感器,结果一个夏天换了 3 次探头。后来我学乖了:如果非要用电阻式,一定要间歇供电(比如每次测量前通电 1 秒),并且给电极镀金或镀镍,能延长一点寿命。

2.3.3 选型建议

参数 电容式 电阻式
寿命 2-3 年 3-6 个月
精度 ±3% ±10%
功耗 约 5 mA 约 10 mA
价格 约 20 元 约 5 元

我的建议:温室节点一般部署后就不动了,换传感器很麻烦。所以,我建议直接上电容式。虽然贵一点,但省心。你想想看,一个节点跑一年,中间因为传感器坏了去换,人工成本比传感器本身贵多了。

好了,这一章咱们把核心器件都过了一遍。下一章,我会讲讲怎么把这些器件连起来,设计一个完整的电路原理图。到时候咱们再细聊电源管理和信号调理。