//#define BLYNK_MAX_SENDBYTES 600
//#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <TimeLib.h>
#include <WidgetRTC.h>
char currentTime[9];
char startTime[9];
char stopTime[9];
int SThour;
int STmin;
int STsec;
int SPhour;
int SPmin;
int SPsec;
WidgetLED led(V5);
// цвета для светодиодов и цвета букв
#define BLYNK_GREEN "#23C48E"
#define BLYNK_BLUE "#04C0F8"
#define BLYNK_YELLOW "#ED9D00"
#define BLYNK_RED "#D3435C"
#define BLYNK_DARK_BLUE "#5F7CD8"
#define BLYNK_WHITE "#FFFFFF"
// Уголок личных данных
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "++++++++++++++++++++++++++";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "HUAEIl";
char pass[] = "neeepass";
BlynkTimer timer;
WidgetRTC rtc;
// Digital clock display of the time
void clockDisplay()
{
// You can call hour(), minute(), ... at any time
// Please see Time library examples for details
String currentTime = String(hour()) + ":" + minute() + ":" + second();
String currentDate = String(day()) + " " + month() + " " + year();
Serial.print("Current time: ");
Serial.print(currentTime);
Serial.print(" ");
Serial.print(currentDate);
Serial.println();
// Send time to the App
Blynk.virtualWrite(V1, currentTime);
// Send date to the App
Blynk.virtualWrite(V2, currentDate);
}
BLYNK_CONNECTED() {
// Synchronize time on connection
rtc.begin();
}
BLYNK_WRITE(GP1) {
if (param.asInt()) {
digitalWrite(1, HIGH);
} else {
digitalWrite(0, LOW);
}
}
float B; // инициализируем пременную для хранения данных с плавоющей точкой Для датчика вариант 1
float C; // инициализируем пременную для хранения данных с плавоющей точкой Для датчика вариант 2
void readSensorB() // функция для считывания показаний датчика B
{
//*********Код для получение рандомных значений*******************
//**************************Начало********************************
// Эта конструкция интересна, так как это цыкл
// с частотой прохождения заданным таймером
static int x = random (100, 200);
static int i = 2000;
if (i > -1) {
i = i + x;
B = (float)i / 100;
if (i >= 4000) x = -random (100, 200); // переключение управления на максимуме
if (i <= 2000) x = random (100, 200); // переключение управления на максимуме
}
//*********Код для получение рандомных значений*******************
//**************************Конец*********************************
//**************************Отправка данных вариант 1******************
// Отправка данных в Blynk в настройках Виджета
// находим REDIN RATE и выставляем PUSH. !!!!Только!!!!PUSH!!!!
// иначе будет вылетать из онлайна
Blynk.virtualWrite(V11, B);
//***В зависимости от показаний датчика можно менять цвет и надпись***
//Serial.println(B); // выводим значения в сериал монитор
static int hotState = 0;
if (B > 32 && hotState != 1)
{ hotState = 1; // благодаря этому мы один раз отправим изменения
}
else if (B <= 32 && hotState != 2)
{ hotState = 2; // благодаря этому мы один раз отправим изменения
}
}
//Суть в том что в этом случае мы обнавляем данные с той частотой которую прописали
//в таймере в. Эта строка находится в
//void setup()
//timer.setInterval(1000L, readSensorB);
//тоесть обновлением данных в виджете управляет Наше железо (ESP8266)
//**Конец********************Отправка данных вариант 1******************
//**Начало*****************Отправка данных вариант 2******************
// Отправка данных в Blynk. В настройках Виджета
// находим REDIN RATE и выставляем !!!!!ВСЕ КРОМЕ PUSH!!!!
// Например раз в секунду
BLYNK_READ(V12) // Отправляем данные в виджет Labeled Value
{
static int x = random (100, 200);
static int i = 2000;
if (i > -1) {
i = i + x;
C = (float)i / 100;
if (i >= 4000) x = -random (100, 200); // переключение управления на максимуме
if (i <= 2000) x = random (100, 200); // переключение управления на максимуме
}
Blynk.virtualWrite(V12, C);
}
//Суть в том что функцию обновления данных в данном случае дергает виджет
//И данные будут вычисляться и обновляться, только если будет свзь с
//мобильным устройством насколько я смог понять
//***Конец*****************Отправка данных вариант 2******************
void setup()
{
timer.setInterval(1000L, readSensorB);
// Debug console
Serial.begin(115200);
Serial.println(" ");
Serial.println("Launch");
Blynk.config(auth);
Blynk.disconnect();
Blynk.connect();
setSyncInterval(10 * 60); // Sync interval in seconds (10 minutes)
// Display digital clock every 10 seconds
timer.setInterval(10000L, clockDisplay);
}
void loop()
{
Blynk.run(); // Запускаем Блинк
timer.run(); // Запускаем таймер
}
BLYNK_WRITE(V4) {
TimeInputParam t(param);
{
if (t.hasStartTime()) {
led.on();
}
if (t.hasStopTime())
led.off();
}
}