72小时水质革命:用Arduino-ESP32打造水产养殖智能监测系统
你是否还在为鱼塘缺氧死鱼损失惨重?是否因水质突变导致养殖物大面积生病?本文将带你用Arduino-ESP32构建一套成本不到500元的水质监测与自动控制系统,实时监控水温、pH值、溶氧量等关键指标,异常时自动启动增氧泵,让水产养殖省心又高效。读完本文你将获得:
- 3种核心水质传感器的ESP32接入方案
- 低代码实现自动换水与增氧控制逻辑
- 7x24小时数据记录与远程告警系统构建指南
系统架构:从传感器到执行器的闭环控制
水产养殖智能监测系统主要由三大模块组成:传感器采集模块、数据处理核心和执行器控制模块。Arduino-ESP32作为主控单元,通过模拟输入接口连接各类水质传感器,将采集到的数据进行分析后,通过数字输出引脚控制继电器,进而操作增氧泵、电磁阀等设备。系统架构如下:
graph TD
A[水温传感器] -->|模拟信号| B(ESP32主控)
C[pH传感器] -->|模拟信号| B
D[溶氧传感器] -->|UART| B
B -->|控制信号| E[继电器模块]
E --> F[增氧泵]
E --> G[换水电磁阀]
B --> H[WiFi模块]
H --> I[远程监控平台]
核心硬件选择建议:
- 主控:ESP32-WROOM-32E(内置WiFi和蓝牙,性价比首选)
- 电源:12V/2A防水电源适配器
- 传感器:DS18B20(水温)、SEN0161(pH)、DO-6800(溶氧)
传感器接入:3步实现水质参数采集
水温监测:DS18B20数字传感器
DS18B20是一款单总线数字温度传感器,精度可达±0.5℃,非常适合水产养殖环境使用。接线时只需将DATA引脚连接到ESP32的GPIO4,VCC接3.3V,GND接地即可。核心代码如下:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4 // 数据引脚连接GPIO4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
sensors.begin(); // 初始化传感器
}
void loop() {
sensors.requestTemperatures(); // 请求温度数据
float tempC = sensors.getTempCByIndex(0); // 获取温度值
Serial.print("水温: ");
Serial.print(tempC);
Serial.println(" °C");
// 温度异常处理
if (tempC > 30.0) {
digitalWrite(2, HIGH); // 启动降温风扇
} else {
digitalWrite(2, LOW);
}
delay(2000);
}
温度传感器库文件路径:libraries/OneWire/
pH值检测:模拟信号采集与校准
pH值是衡量水体酸碱度的重要指标,大多数水产养殖生物适宜的pH范围在6.5-8.5之间。以SEN0161 pH传感器为例,其输出0-5V模拟信号对应pH 0-14,需要通过ESP32的ADC引脚进行采集。校准方法:先将传感器放入pH=7的标准液中,记录输出电压,再放入pH=4的标准液,计算斜率和截距。
const int pH_PIN = 34; // pH传感器连接GPIO34
float pHValue = 0.0;
float voltage = 0.0;
float slope = 0.0; // 校准后的斜率
float intercept = 0.0; // 校准后的截距
void setup() {
Serial.begin(115200);
pinMode(pH_PIN, INPUT);
}
void loop() {
// 读取模拟值(0-4095对应0-3.3V)
int adcValue = analogRead(pH_PIN);
voltage = adcValue * (3.3 / 4095.0); // 转换为电压值
// 根据校准参数计算pH值
pHValue = slope * voltage + intercept;
Serial.print("pH值: ");
Serial.println(pHValue, 2);
// pH值异常处理
if (pHValue < 6.5 || pHValue > 8.5) {
digitalWrite(5, HIGH); // 启动pH调节泵
delay(5000); // 运行5秒
digitalWrite(5, LOW);
}
delay(1000);
}
ESP32 ADC配置参考:cores/esp32/esp32-hal-adc.h
溶氧监测:UART接口传感器应用
溶氧量(DO)是水产养殖中最重要的参数之一,直接关系到养殖物的生存。推荐使用RS485接口的溶氧传感器,通过MAX485模块与ESP32的UART接口连接。传感器输出Modbus RTU协议数据,需要编写解析程序。
#include <HardwareSerial.h>
HardwareSerial DO_Serial(2); // 使用UART2
#define DO_TX 17
#define DO_RX 16
#define DO_ADDR 0x01 // 传感器地址
void setup() {
Serial.begin(115200);
DO_Serial.begin(9600, SERIAL_8N1, DO_RX, DO_TX);
}
void loop() {
// 发送读取溶氧命令
uint8_t cmd[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B};
DO_Serial.write(cmd, sizeof(cmd));
delay(100);
uint8_t response[9];
int len = DO_Serial.readBytes(response, sizeof(response));
if (len == 9 && response[0] == DO_ADDR) {
float dissolvedOxygen = ((response[3] << 8) | response[4]) / 10.0;
Serial.print("溶氧量: ");
Serial.print(dissolvedOxygen);
Serial.println(" mg/L");
// 溶氧过低自动增氧
if (dissolvedOxygen < 5.0) {
digitalWrite(12, HIGH); // 启动增氧泵
} else {
digitalWrite(12, LOW);
}
}
delay(2000);
}
UART配置参考:cores/esp32/esp32-hal-uart.h
执行器控制:继电器模块应用
继电器模块是连接ESP32与大功率设备的桥梁,用于控制增氧泵、换水电磁阀等。推荐使用5V继电器模块,通过ESP32的GPIO控制。为保证系统稳定,继电器电源应独立供电,与传感器电源分开。
#define RELAY_O2 12 // 增氧泵继电器连接GPIO12
#define RELAY_WATER 13 // 换水电磁阀连接GPIO13
void setup() {
pinMode(RELAY_O2, OUTPUT);
pinMode(RELAY_WATER, OUTPUT);
digitalWrite(RELAY_O2, LOW); // 初始关闭
digitalWrite(RELAY_WATER, LOW);
}
// 自动换水控制函数
void autoChangeWater(float phValue) {
if (phValue < 6.5 || phValue > 8.5) {
digitalWrite(RELAY_WATER, HIGH); // 打开换水阀
delay(30000); // 换水30秒
digitalWrite(RELAY_WATER, LOW);
}
}
GPIO控制参考:cores/esp32/esp32-hal-gpio.h
数据记录与远程监控
本地数据存储:SD卡模块应用
使用SD卡模块记录历史水质数据,推荐使用SPI接口的MicroSD卡模块,连接到ESP32的SPI引脚(SCLK=18, MOSI=23, MISO=19, CS=5)。数据格式采用CSV,方便后续用Excel分析。
#include <SD.h>
File dataFile;
void setup() {
Serial.begin(115200);
if (!SD.begin(5)) { // CS引脚连接GPIO5
Serial.println("SD卡初始化失败");
return;
}
}
void logData(float temp, float ph, float doValue) {
dataFile = SD.open("/water_data.csv", FILE_WRITE);
if (dataFile) {
dataFile.print(millis());
dataFile.print(",");
dataFile.print(temp);
dataFile.print(",");
dataFile.print(ph);
dataFile.print(",");
dataFile.println(doValue);
dataFile.close();
}
}
SD卡库参考:libraries/SD/
远程监控:WiFi数据上传
通过ESP32的WiFi功能,将实时数据上传到阿里云IoT平台或自有服务器。以下是连接WiFi并发送数据到HTTP服务器的示例代码:
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "你的WiFi名称";
const char* password = "你的WiFi密码";
const char* serverUrl = "http://你的服务器地址/api/upload";
void setup() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi连接成功");
}
void uploadData(float temp, float ph, float doValue) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(serverUrl);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
String postData = "temp=" + String(temp) + "&ph=" + String(ph) + "&do=" + String(doValue);
int httpCode = http.POST(postData);
if (httpCode > 0) {
String response = http.getString();
Serial.println(httpCode);
Serial.println(response);
} else {
Serial.println("HTTP请求失败");
}
http.end();
}
}
WiFi库参考:libraries/WiFi/ HTTP客户端参考:libraries/HTTPClient/
系统集成与调试
将传感器、继电器和ESP32按电路图连接后,进行系统调试。建议先单独测试各模块,再进行集成测试。调试时可通过Serial输出查看各传感器数据是否正常,执行器是否按预期工作。
系统调试步骤:
- 检查各模块供电是否正常
- 测试单个传感器数据采集
- 测试单个执行器控制
- 测试传感器与执行器联动逻辑
- 测试数据上传功能
- 进行72小时稳定性测试
常见问题解决:
- 传感器数据波动大:增加滤波算法或 shielding
- WiFi连接不稳定:靠近路由器或增加WiFi信号放大器
- 继电器误动作:检查电源是否稳定,增加光耦隔离
项目总结与扩展
本文介绍的Arduino-ESP32水质监测系统已能满足基本水产养殖需求,你可以根据实际情况进行扩展:
- 增加浊度传感器监测水体透明度
- 添加氨氮传感器监测水质污染
- 通过蓝牙模块实现近距离设备调试
- 增加太阳能供电系统实现无外接电源运行
完整项目代码可在examples/water_quality_monitor/目录下找到,包含传感器驱动、执行器控制和数据上传等完整功能。如有任何问题,可参考官方文档docs/esp32_guide.md或提交issue。
点赞收藏本文,关注作者获取更多水产养殖智能化方案!下期将介绍如何使用机器学习算法预测水质变化趋势,敬请期待。
项目仓库地址:https://gitcode.com/GitHub_Trending/ar/arduino-esp32
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00