Intelligent water flow sensor with ESP32
#include <ESP8266WiFi.h> //Library can be download below
#include <WiFiClient.h> //Library can be downloaded below
#include <ESP8266WebServer.h> //Library can be downloaded below
#include <PubSubClient.h>
int sensorPin1 = 5;
//int flowPin2 = 4;
//int flowPin3 = 3;
//int flowPin4 = 2;
unsigned long flow1count = 0;
unsigned long flow2count = 0;
#define countof(a) (sizeof(a) / sizeof(a[0]))
/* Connecting to existing wifi AP Network */
//char ssid[] = "14CORE"; // your network SSID (name)
//char password[] = "we do what we must, because we can"; // your network password
/* Make you own stand alone wifi networ accesspoint*/
const char* ssid = "14CORE";
const char* password = "1234567890";
// Set your IP address for your suitable for your network IP/SEGMENT
IPAddress server(192, 168, 4, 100);
PubSubClient client(server);
String webString = "14CORE | Water Flow Sensor with ESP8266"; // String to display
// Callback function
void callback(const MQTT::Publish& pub) {
if(pub.payload_string().equals("flow1"))
{
webString = "Flow 2: " + String(flow1count/450.0) + " L"; // Arduino has a hard time with float to string
client.publish("outTopic",webString);
} else if(pub.payload_string().equals("flow2"))
{
webString = "Flow 2: " + String(flow2count/450.0) + " L";
client.publish("outTopic",webString); // send to someones browser when asked
} else
Serial.print("14CORE | Flow Sensor ")
Serial.print("Flow 1 in Liters: ");
Serial.print(flow1count/450.0);
Serial.print("\tFlow 2 in Liters: ");
Serial.print(flow2count/450.0);
Serial.print("\tFlow 1 in pulses: ");
Serial.print(flow1count);
Serial.print("\tFlow 2 in pulse: ");
Serial.println(flow2count);
delay(500);
{
}
Serial.print(pub.topic());
Serial.print(" => ");
Serial.println(pub.payload_string());
}
void setup()
{
Serial.begin(115200);
pinMode(sensorPin1, INPUT_PULLUP);
attachInterrupt(sensorPin1, flow1, CHANGE);
pinMode(flowPin2, INPUT_PULLUP);
attachInterrupt(flowPin2, flow2, CHANGE);
client.set_callback(callback);
// Connect to existing wifi network
WiFi.begin(ssid, password);
Serial.print("\n\r \n\rWorking to connect");
// Wait 5mili for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("Connecting ")
Serial.print(".");
}
Serial.println("");
Serial.print
Serial.println("14CORE | ESP8266 Server");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (client.connect("14CORE | ESP8266 Liquid Flow Sensor")) {
client.publish("outTopic","flow boot up");
client.subscribe("inTopic");
}
}
void loop()
{
client.loop();
}
void flow1()
{
flow1count +=1;
}
void flow2()
{
flow2count +=1;
}