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
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00