/*
Flow Sensor Counter Meter FS300A G3/4
Flow rate: 1-60L/min
Flow Pulse: 508 pulse / Liter
*/
// channel id : 2304499
// channel api key : 9R7QMTFBTK2D7IA0
#include <ESP32WiFi.h>
const int INPUT_PIN = A0;
const char *SSID = "your_wifi_ssid";
const char *PASSWORD = "your_wifi_password";
const char *API_KEY = "9R7QMTFBTK2D7IA0";
const char *THINGSPEAK_SERVER = "api.thingspeak.com";
float total = 0;
WiFiClient client;
void setup() {
Serial.begin(9600);
delay(15);
connectToWiFi();
pinMode(INPUT_PIN, INPUT);
}
void loop() {
int pulseHigh = pulseIn(INPUT_PIN, HIGH);
int pulseLow = pulseIn(INPUT_PIN, LOW);
float time = pulseHigh + pulseLow;
float frequency = 1000000.0 / time;
float water = frequency / 7.5;
float litersPerMinute = water / 60;
if (isSensorDataValid(litersPerMinute)) {
total += litersPerMinute;
sendToThingSpeak(water, total);
} else {
reportError("Failed to read valid sensor data.");
}
delay(1000);
}
void connectToWiFi() {
Serial.println("Connecting to WiFi...");
WiFi.begin(SSID, PASSWORD);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 10) {
delay(1000);
Serial.print(".");
attempts++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nWiFi connected");
} else {
Serial.println("\nFailed to connect to WiFi");
// You might want to take further action if connection fails
}
}
bool isSensorDataValid(float data) {
return !isnan(data) && !isinf(data);
}
void sendToThingSpeak(float water, float total) {
if (client.connect(THINGSPEAK_SERVER, 80)) {
String postStr = "api_key=" + String(API_KEY);
postStr += "&field1=" + String(water);
postStr += "&field2=" + String(total);
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: " + String(THINGSPEAK_SERVER) + "\n");
client.print("Connection: close\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: " + String(postStr.length()) + "\n\n");
client.print(postStr);
Serial.print("Water L/M: " + String(water));
Serial.print(" Total: " + String(total) + " L\n");
Serial.println("Sent to ThingSpeak");
} else {
reportError("Failed to connect to ThingSpeak");
}
client.stop();
}
void reportError(const char *errorMsg) {
Serial.println("Error: ");
Serial.println(errorMsg);
}