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 元 |
我的建议:温室节点一般部署后就不动了,换传感器很麻烦。所以,我建议直接上电容式。虽然贵一点,但省心。你想想看,一个节点跑一年,中间因为传感器坏了去换,人工成本比传感器本身贵多了。
好了,这一章咱们把核心器件都过了一遍。下一章,我会讲讲怎么把这些器件连起来,设计一个完整的电路原理图。到时候咱们再细聊电源管理和信号调理。