I am trying to make a project using BLYNK but ran into a problem with the RTC widget. My question is how can I use the RTC widget to turn some light on at a specific time?
Yes I know but If I want the light intensity to change over time I can`t use the Timer Widget.
Am I doing some thing wrong?
> #define BLYNK_PRINT Serial // Comment this out to disable prints and save space
> #include <SPI.h>
> #include <ESP8266WiFi.h>
> #include <BlynkSimpleEsp8266.h>
> #include <SimpleTimer.h>
> #include <TimeLib.h>
> #include <WidgetRTC.h>
> #define red_pin 4
> #define blue_pin 8
> #define green_pin 7
> // You should get Auth Token in the Blynk App.
> // Go to the Project Settings (nut icon).
> char auth[] = "dcxxxxxxxxxxxxxxxxxxxxxxxxcb";
> SimpleTimer timer;
> WidgetRTC rtc;
> BLYNK_ATTACH_WIDGET(rtc, V5);
> // Digital clock display of the time
> void clockDisplay()
> {
> // You can call hour(), minute(), ... at any time
> // Please see Time library examples for details
> BLYNK_LOG("Current time: %02d:%02d:%02d %02d %02d %d",
> hour(), minute(), second(),
> day(), month(), year());
> }
> void setup()
> {
> Serial.begin(9600); // See the connection status in Serial Monitor
> Blynk.begin(auth, "Clayton xxxxxxxxxci", "clxxxxxcn13");
> while (Blynk.connect() == false) {
> // Wait until connected
> }
> pinMode(red_pin, OUTPUT);
> // pinMode(blue_pin, OUTPUT);
> // pinMode(green_pin, OUTPUT);
> delay(5000);
> digitalWrite(red_pin, HIGH);
> delay(1000);
> digitalWrite(red_pin, LOW);
> // Begin synchronizing time
> rtc.begin();
> // Display digital clock every 10 seconds
> timer.setInterval(10000L, clockDisplay);
> }
> void turnon()
> {
> if (hour() == 23, minute() == 00) {
> digitalWrite(red_pin, HIGH);
> Serial.println("High");
> // digitalWrite(blue_pin, HIGH);
> // digitalWrite(green_pin, HIGH);
> }
> }
> void loop()
> {
> Blynk.run();
> timer.run();
> turnon();
> }
Yeah the code has errors but I’m on my phone so can’t help too much except saying I think you need to call the ‘turnon’ function somewhere outside the loop… And what are the delays doing in the set up?
Code snippets should be formatted. Edit your post.
Wrap the code by adding 3 Backtick: ``` symbols:
Example:
``` cpp <--put 3 backticks BEFORE your code starts (cpp means C++ language)
⏎
//Put your code here
//..................
//..................
⏎
``` <--insert 3 backticks AFTER your code
**This makes your code readable and with highlighted syntax, like this:**
//comment goes here
void helloWorld() {
String message = "hello" + "world";
}
Ok I will try and post my success here and the delays are for blinking an led on start up.
I fixed the problem by adding another line.
timer.setInterval(10L, turnon);
But now the esp reboots to infinity after connecting to the wifi and displays ready in the serial monitor.
Is this a bug in Blynk or with my code? and maybe because I have a rough 3.3v from the power supply.
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
#define red_pin 4
#define blue_pin 8
#define green_pin 7
int st1 = 31;
int st2 = 62;
int st3 = 93;
int st4 = 124;
int st5 = 155;
int st6 = 186;
int st7 = 217;
int st8 = 255;
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icst).
char auth[] = "dc5xxxxxxxxxxxxxxxxxxxxxxxxxxxcb";
SimpleTimer timer;
WidgetRTC rtc;
BLYNK_ATTACH_WIDGET(rtc, V5);
Digital clock display of the time
void clockDisplay()
{
// You can call hour(), minute(), ... at any time
// Please see Time library examples for details
BLYNK_LOG("Current time: %02d:%02d:%02d %02d %02d %d",
hour(), minute(), second(),
day(), month(), year());
}
void turnon()
{
if (hour() == 7, minute() >= 00)
{
analogWrite(red_pin, st1);
analogWrite(blue_pin, st1);
analogWrite(green_pin, st1);
}
else
if (hour() == 7, minute() >= 15)
{
analogWrite(red_pin, st2);
analogWrite(blue_pin, st2);
analogWrite(green_pin, st2);
}
else
if (hour() == 7, minute() >= 30)
{
analogWrite(red_pin, st3);
analogWrite(blue_pin, st3);
analogWrite(green_pin, st3);
}
else
if (hour() == 7, minute() >= 45)
{
analogWrite(red_pin, st4);
analogWrite(blue_pin, st4);
analogWrite(green_pin, st4);
}
else
if (hour() == 8, minute() >= 00)
{
analogWrite(red_pin, st5);
analogWrite(blue_pin, st5);
analogWrite(green_pin, st5);
}
else
if (hour() == 8, minute() >= 15)
{
analogWrite(red_pin, st6);
analogWrite(blue_pin, st6);
analogWrite(green_pin, st6);
}
else
if (hour() == 8, minute() >= 30)
{
analogWrite(red_pin, st7);
analogWrite(blue_pin, st7);
analogWrite(green_pin, st7);
}
else
if (hour() == 8, minute() >= 45)
{
analogWrite(red_pin, st8);
analogWrite(blue_pin, st8);
analogWrite(green_pin, st8);
}
}
void turnoff()
{
if (hour() == 20, minute() >= 15)
{
analogWrite(red_pin, st8);
analogWrite(blue_pin, st8);
analogWrite(green_pin, st8);
}
else
if (hour() == 20, minute() >= 30)
{
analogWrite(red_pin, st7);
analogWrite(blue_pin, st7);
analogWrite(green_pin, st7);
}
else
if (hour() == 20, minute() >= 35)
{
analogWrite(red_pin, st6);
analogWrite(blue_pin, st6);
analogWrite(green_pin, st6);
}
else
if (hour() == 21, minute() >= 00)
{
analogWrite(red_pin, st5);
analogWrite(blue_pin, st5);
analogWrite(green_pin, st5);
}
else
if (hour() == 21, minute() >= 15)
{
analogWrite(red_pin, st4);
analogWrite(blue_pin, st4);
analogWrite(green_pin, st4);
}
else
if (hour() == 21, minute() >= 20)
{
analogWrite(red_pin, st3);
analogWrite(blue_pin, st3);
analogWrite(green_pin, st3);
}
else
if (hour() == 21, minute() >= 44)
{
analogWrite(red_pin, st2);
analogWrite(blue_pin, st2);
analogWrite(green_pin, st2);
}
else
if (hour() == 22, minute() >= 00)
{
analogWrite(red_pin, st1);
analogWrite(blue_pin, st1);
analogWrite(green_pin, st1);
}
}
void setup()
{
Serial.begin(9600); // See the cstnectist status in Serial Mstitor
Blynk.begin(auth, "xxxxxxxxxxxxxFi", "clxxxxxxxx3");
while (Blynk.connect() == false) {
// Wait until connected
}
pinMode(red_pin, OUTPUT);
pinMode(blue_pin, OUTPUT);
pinMode(green_pin, OUTPUT);
// Begin synchronizing time
rtc.begin();
// Display digital clock every 1 sec
timer.setInterval(1000L, clockDisplay);
timer.setInterval(10L, turnon);
timer.setInterval(10L, turnoff);
}
void loop()
{
Blynk.run();
timer.run();
turnon();
turnoff();
}
@claytoncamilleri100 is your system that mission critical to 10 milliseconds?
You wouldn’t normally have the functions with a timer AND in the main loop. Suggest you lose the main loop function calls and increase the 10L to 10000L (10 seconds).
You mean this part? I changed the time to 10 sec but still rebooting
timer.setInterval(10000L, clockDisplay);
timer.setInterval(10000L, turnon);
timer.setInterval(10000L, turnoff);
And loop as:
void loop()
{
Blynk.run();
timer.run();
}
The clock display which just shows a log entry in Serial Monitor would be ok as you had it (1000L).
Thats odd I commented these lines and it stopped rebooting and started telling me the time.
//pinMode(red_pin, OUTPUT);
// pinMode(blue_pin, OUTPUT);
// pinMode(green_pin, OUTPUT);
How can I configure the Notification widgetq to send me a low temp alert and high and including the actual temp in the notification?
void lm35()
{
val = analogRead(temp);
float mv = ( val/1024.0)*5000;
float cel = mv/10;
if (cel <= 27)
Blynk.notify("Temp LOW" + cel);
else
if ( cel >= 29)
Blynk.notify("Temperature High" + cel);
I wrote the code but the leds keep turning on and I don
t know why? Could it be because I have the timers before void setup and the pinmodes? Could any one suggest an edit? @Pavlo
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
#define button V1
#define red_pin 13
#define blue_pin 14
#define green_pin 12
//int temp = A0;
//int val;
int st1 = 127;
int st2 = 255;
int st3 = 382;
int st4 = 509;
int st5 = 636;
int st6 = 763;
int st7 = 890;
int st8 = 1024;
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icst).
char auth[] = "dcxxxxxxxxxxxxxb9cb56e646aedbcb";
SimpleTimer timer;
WidgetRTC rtc;
BLYNK_ATTACH_WIDGET(rtc, V5);
/*
void lm35()
{
val = analogRead(temp);
float mv = ( val / 1024.0) * 5000;
float cel = mv / 10;
if (cel <= 27)
Blynk.notify("Temp LOW" );
else
if ( cel >= 29)
Blynk.notify("Temperature High" );
}
if (Button, HIGH)
Blynk
*/
// Digital clock display of the time
void clockDisplay()
{
// You can call hour(), minute(), ... at any time
// Please see Time library examples for details
BLYNK_LOG("Current time: %02d:%02d:%02d %02d %02d %d",
hour(), minute(), second(),
day(), month(), year());
}
void turnon()
{
if (hour() == 7, minute() >= 00)
{
analogWrite(red_pin, st2);
analogWrite(blue_pin, st2);
analogWrite(green_pin, st2);
}
else
if (hour() == 7, minute() >= 30)
{
analogWrite(red_pin, st3);
analogWrite(blue_pin, st3);
analogWrite(green_pin, st3);
}
else
if (hour() == 7, minute() >= 45)
{
analogWrite(red_pin, st4);
analogWrite(blue_pin, st4);
analogWrite(green_pin, st4);
}
else
if (hour() == 8, minute() >= 00)
{
analogWrite(red_pin, st5);
analogWrite(blue_pin, st5);
analogWrite(green_pin, st5);
}
else
if (hour() == 8, minute() >= 15)
{
analogWrite(red_pin, st6);
analogWrite(blue_pin, st6);
analogWrite(green_pin, st6);
}
else
if (hour() == 8, minute() >= 30)
{
analogWrite(red_pin, st7);
analogWrite(blue_pin, st7);
analogWrite(green_pin, st7);
}
else
if (hour() == 8, minute() >= 45)
{
analogWrite(red_pin, st8);
analogWrite(blue_pin, st8);
analogWrite(green_pin, st8);
}
}
void turnoff()
{
if (hour() == 20, minute() >= 15)
{
analogWrite(red_pin, st8);
analogWrite(blue_pin, st8);
analogWrite(green_pin, st8);
}
else
if (hour() == 20, minute() >= 30)
{
analogWrite(red_pin, st7);
analogWrite(blue_pin, st7);
analogWrite(green_pin, st7);
}
else
if (hour() == 20, minute() >= 35)
{
analogWrite(red_pin, st6);
analogWrite(blue_pin, st6);
analogWrite(green_pin, st6);
}
else
if (hour() == 21, minute() >= 00)
{
analogWrite(red_pin, st5);
analogWrite(blue_pin, st5);
analogWrite(green_pin, st5);
}
else
if (hour() == 21, minute() >= 15)
{
analogWrite(red_pin, st4);
analogWrite(blue_pin, st4);
analogWrite(green_pin, st4);
}
else
if (hour() == 21, minute() >= 20)
{
analogWrite(red_pin, st3);
analogWrite(blue_pin, st3);
analogWrite(green_pin, st3);
}
else
if (hour() == 21, minute() >= 44)
{
analogWrite(red_pin, st2);
analogWrite(blue_pin, st2);
analogWrite(green_pin, st2);
}
else
if (hour() == 22, minute() >= 00)
{
analogWrite(red_pin, st1);
analogWrite(blue_pin, st1);
analogWrite(green_pin, st1);
}
}
void setup()
{
Serial.begin(9600); // See the cstnectist status in Serial Mstitor
Blynk.begin(auth, "Cxxxxxxxxxri Wi-Fi", "cxxxxxxxxxxxxx3");
while (Blynk.connect() == false) {
// Wait until connected
}
pinMode(red_pin, OUTPUT);
pinMode(blue_pin, OUTPUT);
pinMode(green_pin, OUTPUT);
// Begin synchronizing time
rtc.begin();
// Display digital clock every 1 sec
// timer.setInterval(1000L, clockDisplay);
timer.setInterval(10000L, turnon);
timer.setInterval(10000L, turnoff);
timer.setInterval(1000L, clockDisplay);
}
void loop()
{
Blynk.run();
timer.run();
}
Have you tried changing
if (hour() == 20, minute() >= 15)
to
if (hour() == 20 && minute() >= 15)
I use a physical RTC with Blynk, but the syntax is the same.