Skip to content

Instantly share code, notes, and snippets.

@prussiap
Last active December 14, 2016 05:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save prussiap/d68d187e448edc9d8175c23eabe87ea6 to your computer and use it in GitHub Desktop.
Save prussiap/d68d187e448edc9d8175c23eabe87ea6 to your computer and use it in GitHub Desktop.
// ************************************************
// Libraries
// ************************************************
#include <Arduino.h>
#include <Homie.h>
#include <DHT.h> //temperature, humidity sensor
// ************************************************
// Defines
// ************************************************
#define RELAY1_PIN 12
#define RELAY2_PIN 13
#define RELAY3_PIN 15
#define RELAY4_PIN 4
#define DHT_PIN 14 // sensor pin
#define DHTTYPE DHT11 // DHT 11/22 for library
// ************************************************
// Config Wifi / Mqtt
// ************************************************
HomieNode temperatureNode("temperature", "temperature"); //properties = temperature
HomieNode humidityNode("humidity", "humidity"); //properties = humidity
HomieNode relayNode("relay", "switch", relayHandler, true); //(id, type, input handler, subscribe to all)properties =r1,r2,r3, r4
// ************************************************
// Temp/Humidity Sensor
// ************************************************
DHT dht(DHT_PIN, DHTTYPE);
float humidity;
float temperature;
unsigned long oldMillis_getTemp;
unsigned long oldMillis_sendMsg;
// ************************************************
// Setup
// ************************************************
void setup()
{
Homie.registerNode(temperatureNode);
Homie.registerNode(humidityNode);
Homie.registerNode(relayNode);
Homie.setFirmware("espCloner", "1.0.0");
Homie.setSetupFunction(setupHandler);
Homie.setLoopFunction(loopHandler);
Homie.setup();
}
void setupHandler()
{
dht.begin();
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
pinMode(RELAY4_PIN, OUTPUT);
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(RELAY4_PIN, LOW);
}
// ************************************************
// Loop
// ************************************************
void loop()
{
Homie.loop();
}
void loopHandler()
{
getTemp();
sendMsg();
}
// ************************************************
// get the temperature from the DHT11
// ************************************************
void getTemp()
{
unsigned long currentMillis = millis();
if (currentMillis - oldMillis_getTemp > 2200)
{
humidity = dht.readHumidity();
temperature = dht.readTemperature(true); // Read temperature as Fahrenheit (isFahrenheit = true)
oldMillis_getTemp = currentMillis;
}
}
// ************************************************
// Homie stuff
// ************************************************
void sendMsg()
{
unsigned long currentMillis = millis();
if (currentMillis - oldMillis_sendMsg > 5000) //every 5 seconds
{
Homie.setNodeProperty(temperatureNode, "temperature", String(temperature), true);
Homie.setNodeProperty(humidityNode, "humidity", String(humidity), true);
oldMillis_sendMsg = currentMillis;
}
}
// ************************************************
// Input Handlers - relays
// ************************************************
bool relayHandler(String property, String value)
{
int r;
bool ok = false;
if (property == "r1")
{
r = RELAY1_PIN;
ok = true;
}
if (property == "r2")
{
r = RELAY2_PIN;
ok = true;
}
if (property == "r3")
{
r = RELAY3_PIN;
ok = true;
}
if (property == "r4")
{
r = RELAY4_PIN;
ok = true;
}
if (ok == true)
{
digitalWrite(r, value.toInt());
Homie.setNodeProperty(relayNode, property, value);
ok = false;
return true;
}
return false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment