Last active
December 14, 2016 05:25
-
-
Save prussiap/d68d187e448edc9d8175c23eabe87ea6 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ************************************************ | |
// 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