news 2026/9/15 4:30:56

IoT-For-Beginners 数字农业实战:在 Raspberry Pi 上用 Grove 电容式土壤湿度传感器测量土壤含水量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IoT-For-Beginners 数字农业实战:在 Raspberry Pi 上用 Grove 电容式土壤湿度传感器测量土壤含水量

IoT-For-Beginners 数字农业实战:在 Raspberry Pi 上用 Grove 电容式土壤湿度传感器测量土壤含水量

【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners

土壤湿度是影响植物生长的关键环境因素——水过多会导致根系缺氧,水过少则让植物无法吸收养分。本指南以 IoT-For-Beginners 课程中"检测土壤湿度"一课(2-detect-soil-moisture)的 Raspberry Pi 实验为基础,带你把 Grove 电容式土壤湿度传感器接到树莓派上,用 Python 读取土壤的湿度数值,并理解模拟信号经 ADC 转换、通过 I²C 传输到代码的完整链路。学完后,你将能独立完成传感器接线、编写采集程序,并为后续的自动浇水系统与云端迁移实验打下基础。

硬件准备

本实验需要以下硬件:

  • Raspberry Pi(单板计算机)及已安装好的Grove Base Hat
  • Grove 电容式土壤湿度传感器(Grove Capacitive Soil Moisture Sensor)
  • Grove 连接线(一端接传感器,一端接 Base Hat)
  • 一盆绿植或一小块土壤作为测量对象

该传感器通过检测土壤的电容(capacitance)来测量湿度。电容是元件存储电荷的能力,土壤的电容会随含水量的变化而变化,传感器将此变化转换为可测量的电压:土壤越湿,输出电压越低

与使用两根探针、通过测量电阻来判断湿度的电阻式传感器不同,电容式传感器采用正负金属板结构,不直接接触土壤导电部分,更耐腐蚀,适合长期埋在土壤中使用。

信号链路:从模拟电压到数字读数

理解数据如何从传感器到达你的 Python 代码,是本节实验的重要收获。整个链路如下:

  1. 传感器输出模拟电压:电容式土壤湿度传感器是模拟传感器,输出电压表示土壤湿度,电压随湿度增加而降低。
  2. Grove Base Hat 上的 10 位 ADC 完成模数转换:树莓派本身只有数字 GPIO 引脚,无法直接读取模拟电压。Grove Base Hat 内置了 10 位模数转换器(ADC),把电压映射为1~1,023的整数。例如在 3.3V 的板子上,传感器输出 3.3V 时读数为 1,023,输出约 1.65V 时读数约为 511。
  3. 通过 I²C 协议经 GPIO 引脚传输:转换后的数字值以 I²C(Inter-Integrated Circuit,读作 I-squared-C)协议发送。I²C 使用 SDA(数据线)与 SCL(时钟线)两根主线路外加电源线 VCC 和地线 GND,数据以带目标设备地址的数据包形式传输,Grove 传感器通过 Base Hat 上的 I²C 接口把模拟读数的数字表示送给树莓派。

💡 如果你在"夜灯"课程(1-introduction-to-iot)中使用 Wio Terminal 做过实验,当时光线传感器是直接接到带 ADC 的模拟引脚上的;而树莓派场景下,传感器接到 Base Hat 的模拟插座,由 Base Hat 内部的 ADC 完成转换后再走 I²C。两种路径殊途同归,最终代码里拿到的都是 0~1,023 的数字。

接线:连接土壤湿度传感器

接线前请确保树莓派处于断电状态,操作步骤如下:

  1. 将 Grove 连接线的一端插入土壤湿度传感器上的插座。连接线只有一种插入方向,反了是插不进去的。
  2. 在树莓派断电状态下,将 Grove 连接线的另一端插入 Grove Base Hat 上标记为A0的模拟插座。该插座位于紧挨 GPIO 引脚那一排插座的右数第二个位置。
  3. 将传感器插入土壤中。传感器上有一条白色"最高位置线"(highest position line),插入时最多埋到这条线处,不要越过它——过深的埋入可能会让水浸到传感器电路部分。

环境准备:确保 Grove 库与 I²C 已就绪

本实验依赖 Grove 的 Python 库grove.py,以及树莓派上开启的 I²C 接口。若你尚未配置,请参照入门课程中树莓派环境搭建的完整说明,关键步骤包括:

sudo apt install git python3-dev python3-pip --yes git clone https://github.com/Seeed-Studio/grove.py cd grove.py sudo pip3 install . sudo raspi-config nonint do_i2c 0 sudo reboot

上述命令依次安装了 Git 与 pip,从源码编译安装 Seeed 官方的 Grove Python 包,并通过raspi-config开启 I²C 接口后重启生效。接线完成后即可给树莓派上电。

编写代码:读取土壤湿度

创建项目与文件

  1. 给树莓派上电并等待系统启动完成。
  2. 启动 VS Code——可以直接在 Pi 的桌面上启动,也可以通过Remote SSH扩展从你的电脑远程连接(连接方式同样见入门课程说明)。
  3. 在终端中,于pi用户的主目录下新建名为soil-moisture-sensor的文件夹,并在其中创建app.py文件。
  4. 在 VS Code 中打开该文件夹。

导入所需库

app.py中加入以下代码:

import time from grove.adc import ADC
  • import time导入 Python 的time模块,稍后用它控制两次读取之间的等待时间。
  • from grove.adc import ADC从 Grove Python 库中导入ADC类。这个类封装了与 Grove Base Hat 上模数转换器的交互逻辑,负责读取模拟传感器的电压值。

创建 ADC 实例

在导入语句下方加入:

adc = ADC()

这行代码创建了一个ADC类的实例,之后就可以通过它读取模拟插座上的电压数字化结果。

无限循环读取 A0 引脚

继续追加一个无限循环,从 A0 引脚(adc.read(0)中的通道号0即对应 A0 插座)读取土壤湿度,打印到控制台,并等待 10 秒再进行下一次读取:

while True: soil_moisture = adc.read(0) print("Soil moisture:", soil_moisture) time.sleep(10)

完整代码与仓库中提供的参考实现一致,可直接对照 code/pi/soil-moisture-sensor/app.py:

import time from grove.adc import ADC adc = ADC() while True: soil_moisture = adc.read(0) print("Soil moisture:", soil_moisture) time.sleep(10)

运行并观察数值变化

在终端中运行:

python3 app.py

控制台会持续输出土壤湿度读数,例如:

pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Soil moisture: 615 Soil moisture: 612 Soil moisture: 498 Soil moisture: 493 Soil moisture: 490 Soil Moisture: 388

现在做两个实验验证传感器工作正常:

  • 往土壤中加水:观察读数逐渐下降。由于电容式传感器的特性是"越湿电压越低",上例中从 615 一路降到 388 正是浇水后电压下降的体现。
  • 把传感器从土壤中拔出:传感器脱离土壤后电容变化,读数会明显上升。

注意:读数本身是 1~1,023 的相对数值,并不是直接的含水量百分比。要换算成真实的土壤含水量,需要做传感器校准(见下文)。

深入源码:ADC 读取背后的实现

仓库中 code/pi/soil-moisture-sensor/app.py 是本节实验的完整参考实现。其中adc.read(0)的参数0对应 Grove Base Hat 上A0 模拟插座的通道号;若将传感器改插到 A1 插座,则需把参数改为1

从源码结构看,ADC类来自 Seeed 官方 Grove Python 库,它通过 I²C 与 Base Hat 上的 ADC 芯片通信,内部完成"发起 I²C 读取 → 接收 10 位转换结果"的完整过程,因此你的代码无需关心底层的 I²C 时序细节。

其他硬件平台的对照实现

同一个实验在 IoT-For-Beginners 课程中还有其他硬件版本,方便你横向理解不同平台的差异:

  • Wio Terminal(Arduino):code/wio-terminal/soil-moisture-sensor/src/main.cpp 使用analogRead(A0)直接读取模拟引脚,delay(5000)控制 5 秒间隔,项目由 platformio.ini 定义(atmelsam平台 +seeed_wio_terminal板卡)。这是因为 Wio Terminal 自带 ADC,无需额外的 Base Hat。
  • 虚拟设备(Virtual device):code/virtual-device/soil-moisture-sensor/app.py 使用 CounterFit 模拟环境,通过counterfit_shims_grove.adc模拟 ADC 读取,让没有实体硬件的学习者也能完成实验。

三者的核心逻辑完全一致:初始化 ADC → 循环读取 → 打印读数 → 休眠等待,只是底层访问硬件的方式不同。

校准:把 1~1,023 的读数换算成真实含水量

本课作业(assignment.md)要求完成传感器校准,方法是通过**重量法(gravimetric soil moisture)**建立读数与真实含水量的映射:

  1. 用传感器读取土壤湿度数值并记录。
  2. 取土壤样本称重(湿重 W_wet)。
  3. 在 110°C(230°F)烤箱中烘干数小时(实验室标准为 48~72 小时),或置于阳光、温暖干燥处直至土壤呈粉末状。
  4. 再次称重(干重 W_dry)。
  5. 按公式计算重量含水量:
含水量 % = (W_wet − W_dry) / W_dry × 100

例如湿重 212g、干重 197g 的样本:(212 − 197) / 197 × 100 ≈7.6%

对不同湿度(不同含水量)的土壤样本至少重复 3 次,记录"传感器读数 × 含水量"数据对,绘制散点图并拟合一条直线。之后任意一次传感器读数,都能通过这条直线反推出对应的土壤含水量百分比。校准后,你的树莓派就从"读取一个抽象数字"升级为"直接报告土壤含水率",这正是下一课自动浇水系统中按需灌溉的控制依据。

小结

本实验带你完成了树莓派 + Grove 电容式土壤湿度传感器的完整闭环:理解电容式测量原理 → 完成 A0 插座接线 → 编写 8 行 Python 程序持续读取湿度 → 观察浇水后电压读数下降 → 通过重量法校准读数。同时,通过对照 Wio Terminal 与虚拟设备的实现,你也掌握了"模拟传感器 → ADC → I²C → 代码"这条 IoT 数据通路的通用模式,为后续课程中的自动化灌溉、云端数据上报打下坚实基础。

【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 4:30:29

国产修图软件悟空图像PhotoSir实测:能否替代Photoshop?

1. 为什么我停了Photoshop,开始认真用悟空图像PhotoSir先交代一下背景。我平时的工作流里,修图这东西绕不开。公众号头图、活动海报、产品详情页、偶尔还要给客户出一版快手方案,几乎天天都在跟图层、蒙版、钢笔路径打交道。以前电脑上常年挂…

作者头像 李华
网站建设 2026/9/15 4:29:44

多摄像头融合的上帝视角监控系统:从单应性矩阵到实时目标追踪

1. 项目概述1.1 我为什么想做一个“上帝视角”系统先说一个很现实的场景:我手头管理着园区里三个分散的监控区域,加起来二十多路摄像头。传统监控画面是一块块小格子,保安盯得眼睛都快瞎了,还是容易出现“人在画面A消失、在画面B没…

作者头像 李华
网站建设 2026/9/15 4:29:00

混凝土多边形骨料二维建模技术与实践

1. 混凝土多边形骨料二维建模概述在建筑材料研究中,混凝土的细观结构建模一直是学术界和工程界关注的重点。多边形骨料作为混凝土中最主要的组成部分,其几何形态和分布特征直接影响着混凝土的宏观力学性能。传统的圆形骨料模型虽然计算简便,但…

作者头像 李华
网站建设 2026/9/15 4:28:18

MeanShift纹理分割实战:从带宽参数到区域mask

简介:一份基于OpenCV的均值漂移分割算法实现,用于抑制图像中的细小纹理并完成纹理分割,适合图像处理、计算机视觉方向的学习者和开发者参考。压缩包仅1个cpp源码文件,包体大小973B,轻量易读,代码结构清晰&a…

作者头像 李华
网站建设 2026/9/15 4:27:27

从awesome-llm-apps看LLM应用:RAG、Agent与工程落地

大概从 2023 年开始,GitHub 上冒出过一个很有意思的现象:满屏都是“awesome-xxx”的仓库。这种清单型项目,说穿了就是一个领域里的老玩家,把散落在全网的高质量工具、开源项目、论文、教程,手动整理成一份精挑细选的目…

作者头像 李华
网站建设 2026/9/15 4:26:54

别用免费企业网站模板php凑数,从零搭建才值回票价

别用免费企业网站模板php凑数,从零搭建才值回票价 别再对着那些丑得掉渣的免费企业网站模板php发呆,它们根本撑不起你的品牌形象。你花大价钱买的服务器,配着模板里那个十年前的蓝色弹窗,客户第一眼就想关掉浏览器。…

作者头像 李华