基于ESP8266水质检测 (MQTT上报小程序和HA)
基于ESP8266水质检测 (MQTT上报小程序和HA)
原创 大表哥吆 kali笔记 2025-04-15 00:00
在前面的文章中,我们讲到了基于Arduino读取水质传感器的数据。详情可以阅读历史文章。
但由于Arduino的限制,无法将数据上传至网络。因此,本文为大家带来基于Esp8266配置水质传感器进行数据上报。
准备
-
Esp8266
-
水质传感器
-
MQTT服务器
线路连接
VCC
–3.3v
GND
–GND
信号线
–A0
(模拟脚针)
代码
#include<ESP8266WiFi.h>#include<PubSubClient.h>#include<ArduinoJson.h>// WiFi配置constchar* ssid = "你的WiFi名称";constchar* password = "WiFi密码";// MQTT配置constchar* mqtt_server = "MQTT服务器地址";constint mqtt_port = 1883;constchar* mqtt_user = "admin";constchar* mqtt_password = "admin";constchar* topic = "shuizhi"; #订阅主题// 传感器配置constint TDS_PIN = A0; // ESP8266只能使用A0进行模拟输入constfloat VREF = 3.3; // 传感器工作电压constfloat K = 0.4; // 校准系数WiFiClient espClient;PubSubClient client(espClient);voidsetup_wifi(){ delay(10); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP());}voidreconnect(){while (!client.connected()) { Serial.print("Attempting MQTT connection..."); if (client.connect("esp8266-SZ", mqtt_user, mqtt_password)) { Serial.println("connected"); } else { Serial.print("failed, rc="); Serial.print(client.state()); Serial.println(" try again in 5 seconds"); delay(5000); } }}String getWaterQuality(float tds){if (tds <= 9) return"优"; // 0-9 mg/L 纯净水elseif (tds <= 60) return"优"; // 10-60 mg/L 山泉水、矿化水elseif (tds <= 100) return"中"; // 60-100 mg/L 净化水elseif (tds <= 300) return"中"; // 100-300 mg/L 普通自来水elsereturn"差"; // >300 mg/L 可能存在污染}voidsetup(){ Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, mqtt_port);}voidloop(){if (!client.connected()) { reconnect(); } client.loop();// 读取并计算TDS值int analogValue = analogRead(TDS_PIN);float voltage = analogValue * VREF / 1024.0;float tdsValue = (133.42 * pow(voltage, 3) - 255.86 * pow(voltage, 2) + 857.39 * voltage) * K;// 获取水质等级 String quality = getWaterQuality(tdsValue);// 构建JSON数据 StaticJsonDocument<200> doc; doc["TDS"] = round(tdsValue); // 四舍五入取整 doc["DJ"] = quality;char jsonBuffer[512]; serializeJson(doc, jsonBuffer);// 发布MQTT消息 client.publish(topic, jsonBuffer); Serial.print("Published: "); Serial.println(jsonBuffer); delay(5000); // 5秒间隔}
代码功能说明:
– 每5s上传数据到shuizhi
主题。
- 对数据进行处理,分为优、中、差
数据格式说明:
发送数据为json数据,格式如下:
{"TDS":21,"DJ":"优"}
前者为上报的TDS数据,后者是当前的数据等级。
另外,当前仅为一个数据,如果您有多个设备,如用DHT11
接入温湿度数据,可以将拼接为完整的jons数据,如:
{"humi":58,"temp":36,"TDS":500,"DJ":"差"}
接入HA或小程序
因为是基于MQTT上报数据,我们可以将数据接入HA或者微信小程序。
矿泉水效果
自来水数据
总结
在后期,我们会更新其他类型的传感器。方便硬件爱好者学习和研究。当然,如果您有更好的方法,请在评论区留下你精彩的评论。
BREAK AWAY
往期推荐
01
02
03
一文玩转MQTT(基于esp8266 DHT11 MQTT Mysql实现)
更多精彩文章 欢迎关注我们