Tadeas Dvoracek
Published © GPL3+

Extension for Water Level Controller

This board is an extension for the Water level controller and adds a 230V power supply and ESP8266 for remote monitoring.

AdvancedShowcase (no instructions)5 hours628
Extension for Water Level Controller

Things used in this project

Hardware components

ESP8266 ESP-07
×1
220uF/16V capacitor
×2
100nF capacitor
×1
10k resistor
×9
5.1k resistor
×4
AMS1117-3.3V
×1
SMD Fuse holder
×1
Fuse 0.5A
×1
Pin header
×4
Fuse holder 20*5
×1
Fuse 1A
×1
Terminal block 2p
×1
Push button
×1
HLK-PM01 230V/5V 3W
×1
HTU21D
×1
Custom PCB
Custom PCB
×1
M4 screws and nuts
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free
Solder Flux, Soldering
Solder Flux, Soldering

Story

Read more

Custom parts and enclosures

PCB Gerber files

Schematics

Schematics

Code

ESP8266 code

Arduino
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include "Adafruit_HTU21DF.h"

const char* ssid = "WiFi SSID";
const char* password = "WiFi Password";
const char* mqtt_server = "IP MQTT Server";
const char* mqttUser = "username";            
const char* mqttPassword = "password";        
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];

Adafruit_HTU21DF htu = Adafruit_HTU21DF();

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i=0;i<length;i++) {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {  
      Serial.println("connected");
      client.subscribe("CayenneInput");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Sleep for 5 minutes before retrying
      Serial.println("Failed to connect to MQTT server - sleeping for 5 minutes");
      delay(100);
      //ESP.deepSleep(10000, WAKE_RF_DEFAULT); //300000000
      delay(100);
    }
  }
}

void setup()
{
  Serial.begin(115200);

  int timeoutcounter = 0;
  WiFi.begin(ssid, password);
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid); 
  while (WiFi.status() != WL_CONNECTED) {
    timeoutcounter++;
    delay(500);
    Serial.print(".");
    if (timeoutcounter >= 30){
      Serial.println("Failed to connect to wireless - sleeping for 5 minutes");
      delay(100);
      //ESP.deepSleep(10000, WAKE_RF_DEFAULT);
      delay(100);
    }
  }
  Serial.println("");
  Serial.println("WiFi connected");
  client.setServer(mqtt_server, 1883);
  client.setCallback(callback);
  
  delay(100);
  
  Wire.begin(4, 5); // SDA, SCL
  htu.begin();
  pinMode(14, INPUT); //High sensor
  pinMode(12, INPUT); //Low sensor
  pinMode(13, INPUT); //Relay status
}

void loop()
{
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
 
  //Status message every 1s
  String mqtt_message = String("1"); 
  mqtt_message.toCharArray(msg, 50);
  client.publish("device/tank/status/", msg);

  //Temperature and humidity on board
  float insideTEM = htu.readTemperature();
  Serial.println(insideTEM);
  delay(100);
   mqtt_message = String(insideTEM); 
  mqtt_message.toCharArray(msg, 50);
  client.publish("tank/sensors/inside/temperature/", msg);
  delay(100);
  float insideHUM = htu.readHumidity();
  Serial.println(insideHUM);
  delay(100);
   mqtt_message = String(insideHUM); 
  mqtt_message.toCharArray(msg, 50);
  client.publish("tank/sensors/inside/humidity/", msg);
  delay(100);

  if(digitalRead(14)==HIGH)
  {
    mqtt_message = String("HIGH"); 
    mqtt_message.toCharArray(msg, 50);
    client.publish("tank/sensors/highsensor/", msg);
  }
  else
  {
    mqtt_message = String("LOW"); 
    mqtt_message.toCharArray(msg, 50);
    client.publish("tank/sensors/highsensor/", msg);
  }

  if(digitalRead(12)==HIGH)
  {
    mqtt_message = String("HIGH"); 
    mqtt_message.toCharArray(msg, 50);
    client.publish("tank/sensors/lowsensor/", msg);
  }
  else
  {
    mqtt_message = String("LOW"); 
    mqtt_message.toCharArray(msg, 50);
    client.publish("tank/sensors/lowsensor/", msg);
  }

  if(digitalRead(13)==HIGH)
  {
    mqtt_message = String("HIGH"); 
    mqtt_message.toCharArray(msg, 50);
    client.publish("tank/sensors/relaysensor/", msg);
  }
  else
  {
    mqtt_message = String("LOW"); 
    mqtt_message.toCharArray(msg, 50);
    client.publish("tank/sensors/relaysensor/", msg);
  }
 
  delay(1000);
}

Credits

Tadeas Dvoracek
10 projects • 41 followers
Contact

Comments

Please log in or sign up to comment.