Merge pull request #624 from axlan/user-relay
Added usermod for controlling a relay
This commit is contained in:
commit
918da24c8d
28
usermods/blynk_relay_control/README.md
Normal file
28
usermods/blynk_relay_control/README.md
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
# Blynk controllable relay
|
||||||
|
This usermod allows controlling a relay state from the user variables. It also allows the user variables to be set over Blynk.
|
||||||
|
|
||||||
|
Optionally, the servo can have a reset timer to go back to it's default state after an interval. This interval is set through userVar1.
|
||||||
|
|
||||||
|
## Instalation
|
||||||
|
|
||||||
|
Replace the WLED06_usermod.ino file in Aircoookies WLED folder with the one here.
|
||||||
|
|
||||||
|
## Customizations
|
||||||
|
|
||||||
|
Update the following parameters in WLED06_usermod.ino to configure the mod's behavior:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
//Which pin is the relay connected to
|
||||||
|
#define RELAY_PIN 5
|
||||||
|
//Which pin state should the relay default to
|
||||||
|
#define RELAY_PIN_DEFAULT LOW
|
||||||
|
//If >0 The controller returns to RELAY_PIN_DEFAULT after this time in milliseconds
|
||||||
|
#define RELAY_PIN_TIMER_DEFAULT 3000
|
||||||
|
|
||||||
|
//Blynk virtual pin for controlling relay
|
||||||
|
#define BLYNK_USER_VAR0_PIN V9
|
||||||
|
//Blynk virtual pin for controlling relay timer
|
||||||
|
#define BLYNK_USER_VAR1_PIN V10
|
||||||
|
//Number of milliseconds between updating blynk
|
||||||
|
#define BLYNK_RELAY_UPDATE_INTERVAL 5000
|
||||||
|
```
|
96
usermods/blynk_relay_control/wled06_usermod.ino
Normal file
96
usermods/blynk_relay_control/wled06_usermod.ino
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* This file allows you to add own functionality to WLED more easily
|
||||||
|
* See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality
|
||||||
|
* EEPROM bytes 2750+ are reserved for your custom use case. (if you extend #define EEPSIZE in wled01_eeprom.h)
|
||||||
|
* bytes 2400+ are currently ununsed, but might be used for future wled features
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Use userVar0 (API calls &U0=, uint16_t) to set relay state
|
||||||
|
#define relayPinState userVar0
|
||||||
|
//Use userVar1 (API calls &U1=, uint16_t) to set relay timer duration
|
||||||
|
//Ignored if 0, otherwise number of milliseconds to allow relay to stay in
|
||||||
|
//non default state.
|
||||||
|
#define relayTimerInterval userVar1
|
||||||
|
|
||||||
|
//Which pin is the relay connected to
|
||||||
|
#define RELAY_PIN 5
|
||||||
|
//Which pin state should the relay default to
|
||||||
|
#define RELAY_PIN_DEFAULT LOW
|
||||||
|
//If >0 The controller returns to RELAY_PIN_DEFAULT after this time in milliseconds
|
||||||
|
#define RELAY_PIN_TIMER_DEFAULT 3000
|
||||||
|
|
||||||
|
//Blynk virtual pin for controlling relay
|
||||||
|
#define BLYNK_USER_VAR0_PIN V9
|
||||||
|
//Blynk virtual pin for controlling relay timer
|
||||||
|
#define BLYNK_USER_VAR1_PIN V10
|
||||||
|
//Number of milliseconds between updating blynk
|
||||||
|
#define BLYNK_RELAY_UPDATE_INTERVAL 5000
|
||||||
|
|
||||||
|
//Is the timer for resetting the relay active
|
||||||
|
bool relayTimerStarted = false;
|
||||||
|
//millis() time after which relay will be reset
|
||||||
|
unsigned long relayTimeToDefault = 0;
|
||||||
|
//millis() time after which relay vars in Blynk will be sent
|
||||||
|
unsigned long relayBlynkUpdateTime = 0;
|
||||||
|
|
||||||
|
//gets called once at boot. Do all initialization that doesn't depend on network here
|
||||||
|
void userSetup()
|
||||||
|
{
|
||||||
|
relayPinState = RELAY_PIN_DEFAULT;
|
||||||
|
relayTimerInterval = RELAY_PIN_TIMER_DEFAULT;
|
||||||
|
pinMode(RELAY_PIN, OUTPUT);
|
||||||
|
digitalWrite(RELAY_PIN, relayPinState);
|
||||||
|
}
|
||||||
|
|
||||||
|
//gets called every time WiFi is (re-)connected. Initialize own network interfaces here
|
||||||
|
void userConnected()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//loop. You can use "if (WLED_CONNECTED)" to check for successful connection
|
||||||
|
void userLoop()
|
||||||
|
{
|
||||||
|
//Normalize relayPinState to an accepted value
|
||||||
|
if (relayPinState != HIGH && relayPinState != LOW) {
|
||||||
|
relayPinState = RELAY_PIN_DEFAULT;
|
||||||
|
}
|
||||||
|
//If relay changes and relayTimerInterval is set, start a timer to change back
|
||||||
|
if (relayTimerInterval != 0 &&
|
||||||
|
relayPinState != RELAY_PIN_DEFAULT &&
|
||||||
|
!relayTimerStarted ) {
|
||||||
|
relayTimerStarted = true;
|
||||||
|
relayTimeToDefault = millis() + relayTimerInterval;
|
||||||
|
}
|
||||||
|
//If manually changed back to default, cancel timer
|
||||||
|
if (relayTimerStarted && relayPinState == RELAY_PIN_DEFAULT ) {
|
||||||
|
relayTimerStarted = false;
|
||||||
|
}
|
||||||
|
//If timer completes, set relay back to default
|
||||||
|
if (relayTimerStarted && millis() > relayTimeToDefault) {
|
||||||
|
relayPinState = RELAY_PIN_DEFAULT;
|
||||||
|
relayTimerStarted = false;
|
||||||
|
}
|
||||||
|
digitalWrite(RELAY_PIN, relayPinState);
|
||||||
|
updateRelayBlynk();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Update Blynk with state of userVars at BLYNK_RELAY_UPDATE_INTERVAL
|
||||||
|
void updateRelayBlynk()
|
||||||
|
{
|
||||||
|
if (!WLED_CONNECTED) return;
|
||||||
|
if (relayBlynkUpdateTime > millis()) return;
|
||||||
|
Blynk.virtualWrite(BLYNK_USER_VAR0_PIN, userVar0);
|
||||||
|
Blynk.virtualWrite(BLYNK_USER_VAR1_PIN, userVar1);
|
||||||
|
relayBlynkUpdateTime = millis() + BLYNK_RELAY_UPDATE_INTERVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add Blynk callback for setting userVar0
|
||||||
|
BLYNK_WRITE(BLYNK_USER_VAR0_PIN)
|
||||||
|
{
|
||||||
|
userVar0 = param.asInt();
|
||||||
|
}
|
||||||
|
//Add Blynk callback for setting userVar1
|
||||||
|
BLYNK_WRITE(BLYNK_USER_VAR1_PIN)
|
||||||
|
{
|
||||||
|
userVar1 = param.asInt();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user