#include #include #include //Library download: https://github.com/PaulStoffregen/Encoder #include "DHT.h" DHT dht(D1,DHT22); float temperature=0; float humidity=0; double lastSensorMillis=0; #define SENSORPERIOD 5000 //D4 auf ground macht led leuchten #define PIN_ENCA D6 #define PIN_ENCB D5 #define PIN_BTN D2 #define POSITIONUPDATE 100 Bounce debouncerKnobBTN = Bounce(); int lastKnobBTN = -1; Encoder myEnc(PIN_ENCA, PIN_ENCB); long lastPositionCheck=0; long oldPosition = 0; // HomieNode knobNode("volumeknob", "Volumeknob"); HomieNode knobNode("volumeknob", "Volumeknob", "commands"); // HomieNode homieNode("pixel", "pixel", "commands"); void loopHandler() { int valueKnobBTN = debouncerKnobBTN.read(); if (valueKnobBTN != lastKnobBTN) { Homie.getLogger() << "KnobBTN is now " << (valueKnobBTN ? "open" : "close") << endl; knobNode.setProperty("btnknob").send(valueKnobBTN ? "false" : "true"); lastKnobBTN = valueKnobBTN; } long newPosition = myEnc.read()/4; if ((unsigned long)(lastPositionCheck+POSITIONUPDATE) < millis() && newPosition != oldPosition) { long positiondiff=newPosition-oldPosition; oldPosition = newPosition; Homie.getLogger() << "posdiff= " << positiondiff << endl; knobNode.setProperty("encoder").send(String(positiondiff)); lastPositionCheck=millis(); } if ((lastSensorMillis+SENSORPERIOD)-40){ temperature=_currentTemperature; Homie.getLogger() << "temperature= " << temperature << endl; char tempstring[16]; dtostrf(temperature,1,1,tempstring); knobNode.setProperty("temperature").send(tempstring); } float _currentHumidity=dht.readHumidity(); if (humidity!=_currentHumidity && (!isnan(_currentHumidity) ==1) && _currentHumidity>0){ humidity=_currentHumidity; Homie.getLogger() << "humidity= " << humidity << endl; knobNode.setProperty("humidity").send(String(humidity)); } lastSensorMillis=millis(); } ArduinoOTA.handle(); } void setup() { Serial.begin(115200); Serial << endl << endl; pinMode(PIN_BTN, INPUT_PULLUP); debouncerKnobBTN.attach(PIN_BTN); debouncerKnobBTN.interval(50); Homie_setFirmware("volumeknob", "0.1.0"); //Homie.setResetTrigger(PIN_BTN, LOW, 20000); // BTN0 = Flash = PIN_BTN set to 20sec Homie.disableResetTrigger(); Homie.setLoopFunction(loopHandler); knobNode.advertise("encoder"); knobNode.advertise("btnknob"); knobNode.advertise("temperature"); knobNode.advertise("humidity"); Homie.setup(); ArduinoOTA.setHostname(Homie.getConfiguration().deviceId); ArduinoOTA.begin(); } void loop() { Homie.loop(); debouncerKnobBTN.update(); }