• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP32 Energy Monitor + Climat Control+Blynk

sergmetrolog

New member
Здравствуйте уважаемые!!!
Подскажите кто знает. Делаю мега проект для гаража мониторинг сети + климат контроль техкомнаты и подвала.
Оба проекта работаю отдельно: Климат контроль на ESP8266, мониторинг сети на ESP32.
Хочется собрать все на ESP32 портов хватает.
Не получается прописать второй, а затем 3 и 4 датчики DHT 21. - ошибка компиляции (с одним датчиком все работает отлично)
Ниже привожу скетч.

#define BLYNK_PRINT Serial

#include "EmonLib.h"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

EnergyMonitor emon;
#define vCalibration 106.8
#define currCalibration 41.2
BlynkTimer timer;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "dfgttrrtbtrDsGoZ9-RXP5cgVe75D7";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "ss";
char pass[] = "serg";

float kWh = 0;
unsigned long lastmillis = millis();

void myTimerEvent() {
emon.calcVI(20, 2000);
Serial.print("Vrms: ");
Serial.print(emon.Vrms, 2);
Serial.print("V");
Blynk.virtualWrite(V0, emon.Vrms);
Serial.print("\tIrms: ");
Serial.print(emon.Irms, 4);
Serial.print("A");
Blynk.virtualWrite(V1, emon.Irms);
Serial.print("\tPower: ");
Serial.print(emon.apparentPower, 4);
Serial.print("W");
Blynk.virtualWrite(V2, emon.apparentPower);
Serial.print("\tkWh: ");
kWh = kWh + emon.apparentPower*(millis()-lastmillis)/3600000000.0;
Serial.print(kWh, 4);
Serial.println("kWh");
lastmillis = millis();
Blynk.virtualWrite(V3, kWh);
}
#include "DHT.h"
#define DHT1PIN 2
#define DHT2PIN 4
//#define DHT3PIN 15

#define DHT1TYPE DHT21
#define DHT2TYPE DHT11
//#define DHT3TYPE DHT21

DHT dht1(DHTPIN, DHTTYPE);
DHT dht2(DHTPIN, DHTTYPE);
//DHT dht3(DHTPIN, DHTTYPE);

void sendSensor()
{
float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();

if (isnan(h1) || isnan(t1)) {
Serial.println("Failed to read from DHT sensor!");
return;
float h2 = dht2.readHumidity();
float t2 = dht2.readTemperature();

if (isnan(h2) || isnan(t2)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

Blynk.virtualWrite(V4, h1);
Blynk.virtualWrite(V5, t1);
Blynk.virtualWrite(V6, h2);
Blynk.virtualWrite(V7, t2);
}

void setup() {
Serial.begin(9600);
emon.voltage(35, vCalibration, 1.7); // Voltage: input pin, calibration, phase_shift
emon.current(34, currCalibration); // Current: input pin, calibration.
Blynk.begin(auth, ssid, pass);
timer.setInterval(5000L, myTimerEvent);
dht1.begin();
dht2.begin();
//dht3.begin();

timer.setInterval(5000L, sendSensor);
}

void loop() {
Blynk.run();
timer.run();
}
 

Вложения

ghost21

Member
Не получается прописать второй, а затем 3 и 4 датчики DHT 21. - ошибка компиляции
Ну так красным же по черному написано - suggested alternative DHT1PIN и т.д., что в переводе означает предложенная альтернатива DHT1PIN. Зачем было в скетче для каждого датчика дефайнить свой пин и тип если в итоге вы их пихаете все под одну гребенку. Должно быть
Код:
DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);
DHT dht3(DHT3PIN, DHT3TYPE);
 

sergmetrolog

New member
Здравствуйте! Помогите пожалуйста переехать на с ESP8266 на ESP32 devkit 30 pin
Вот скетч рабочий с ESP 8266
 

sergmetrolog

New member
#include "DHT.h"
#define fan1 D5 //вентилятор D5 Приточная техкомната
#define fan2 D6 //вентилятор D6 Вытяжная техкомната
#define fan3 D7 //вентилятор D7 Приточная подвал
#define fan4 D8 //вентилятор D8 Вытяжная подвал

#define DHT1PIN D1//датчик на улице
#define DHT2PIN D2//датчик в гараже
#define DHT3PIN D3//датчик в техкомнате
#define DHT4PIN D4//датчик в подвале

#define DHT1TYPE DHT21
#define DHT2TYPE DHT21
#define DHT3TYPE DHT21
#define DHT4TYPE DHT21

DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);
DHT dht3(DHT3PIN, DHT3TYPE);
DHT dht4(DHT4PIN, DHT4TYPE);

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

BlynkTimer timer;

WidgetLED fan_1(V8); // Светодиод на приточка техкомната
WidgetLED fan_2(V9); // Светодиод на вытяжка техкомната
WidgetLED fan_3(V10); // Светодиод на приточка подвал
WidgetLED fan_4(V11); // Светодиод на вытяжка подвал

int stat = 0;
int maxHum = 60; // установка максимально допустимой влажности для тех комнаты
int maxHum2 = 75; // установка максимально допустимой влажности для подвала
int flag_avto_fan = 0; // установка режима работы

char auth[] = "t9KlGhагНi83o5PzhIcwHeTQciyrКа4L";

void setup()
{
Serial.begin(115200);
Blynk.begin(auth, "ss", "serg_24");

dht1.begin();
dht2.begin();
dht3.begin();
dht4.begin();

pinMode(fan1, OUTPUT);
pinMode(fan2, OUTPUT);
pinMode(fan3, OUTPUT);
pinMode(fan4, OUTPUT);
timer.setInterval(5000, Send); // опрос датчиков с интервалом 5с.
timer.setInterval(60000L, reconnectBlynk); // проверяем каждые 60 секунд, если подключение к серверу
}

///----------------------------
///

BLYNK_WRITE(V12) //функция, отслеживающая изменение виртуального пина 5
{
int pinValue = param.asInt(); //переменная текущего состояния виртуального пина
digitalWrite(fan1, pinValue); //задаем значение на физическом пине NodeMcu D5 равное значению виртуального пина 12

if (pinValue == 0){
fan_1.off();
}
else {
fan_1.on();
}
}
BLYNK_WRITE(V13) //функция, отслеживающая изменение виртуального пина 13
{
int pinValue = param.asInt(); //переменная текущего состояния виртуального пина
digitalWrite(fan2, pinValue); //задаем значение на физическом пине NodeMcu D6 равное значению виртуального пина 13

if (pinValue == 0){
fan_2.off();
}
else {
fan_2.on();
}
}
//delay (300); // задержка включения кнопок
BLYNK_WRITE(V14) //функция, отслеживающая изменение виртуального пина 14
{
int pinValue = param.asInt(); //переменная текущего состояния виртуального пина
digitalWrite(fan3, pinValue); //задаем значение на физическом пине NodeMcu D7 равное значению виртуального пина 14

if (pinValue == 0){
fan_3.off();
}
else {
fan_3.on();
}
}
//delay (300); // задержка включения кнопок
BLYNK_WRITE(V15) //функция, отслеживающая изменение виртуального пина 15
{
int pinValue = param.asInt(); //переменная текущего состояния виртуального пина
digitalWrite(fan4, pinValue); //задаем значение на физическом пине NodeMcu D8 равное значению виртуального пина 15

if (pinValue == 0){
fan_4.off();
}
else {
fan_4.on();
}
}
//delay (300); // задержка включения кнопок
///----------------------------

BLYNK_WRITE(V20){ // запрос данных с датчика и возврат состояния реле в выключенное состояние
if (param.asInt()) { // кнопка в режиме SWITCH

digitalWrite(fan1, HIGH);

digitalWrite(fan2, HIGH);

digitalWrite(fan3, HIGH);

digitalWrite(fan4, HIGH);
}
else {

digitalWrite(fan1, LOW);

digitalWrite(fan2, LOW);

digitalWrite(fan3, LOW);

digitalWrite(fan4, LOW);
}
{
stat = param.asInt();
}
}
void loop() {
if (Blynk.connected()) Blynk.run(); // Запуск Blynk
timer.run();
}
//---------------------------------------------------

void Send() {

// опрос датчиков
//---------- dht1 улица
float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();
if (isnan(h1) || isnan(t1)) Serial.println("Failed to read from DHT1 sensor!");
else {
Serial.print("Humidity1: ");
Serial.print(h1);
Serial.print(" %\t ");
Serial.print("Temperature1: ");
Serial.print(t1);
Serial.println(" *C ");
}
//---------- dht2 гараж
float h2 = dht2.readHumidity();
float t2 = dht2.readTemperature();
if (isnan(h2) || isnan(t2)) Serial.println("Failed to read from DHT2 sensor!");
else {
Serial.print("Humidity2: ");
Serial.print(h2);
Serial.print(" %\t ");
Serial.print("Temperature2: ");
Serial.print(t2);
Serial.println(" *C ");
}
//--------- dht3 техкомната
float h3 = dht3.readHumidity();
float t3 = dht3.readTemperature();
if (isnan(h3) || isnan(t3))Serial.println("Failed to read from DHT3 sensor!");
else {
Serial.print("Humidity3: ");
Serial.print(h3);
Serial.print(" %\t ");
Serial.print("Temperature3: ");
Serial.print(t3);
Serial.println(" *C ");
}
//--------- dht4 подвал
float h4 = dht4.readHumidity();
float t4 = dht4.readTemperature();
if (isnan(h4) || isnan(t4)) Serial.println("Failed to read from DHT4 sensor!");
else {
Serial.print("Humidity4: ");
Serial.print(h4);
Serial.print(" %\t ");
Serial.print("Temperature4: ");
Serial.print(t4);
Serial.println(" *C ");
}
Serial.println();
///
// ********************* Логика работы вентиляторов **************

if (flag_avto_fan) { // если ВКЛ автоматический режим !!!!!!!!

//-------- микроклимат приточка техкомната
if (h1 > h3 && h3 < (maxHum - 5) && t1<0) // если влажность на улице ниже, чем в техкомнате и установленной, и температура на улице ниже 0 градусов, выключается вентилятор fan1
{
digitalWrite(fan1, LOW);
fan_1.off();//выкл вирт.светодиод
}
else if (h1 < h3 && h3 > maxHum && t1>0) // если влажность на улице ниже, чем в техкомнате и установленной, и температура на улице выше 0 градусов, включается вентилятор fan1
{
digitalWrite(fan1, HIGH);
fan_1.on(); //вкл вирт.светодиод
}
//-------- микроклимат приточка подвал
if (h1 > h4 && h4 < (maxHum2 - 5) && t1<0) // если влажность на улице выше, и температура на улице ниже 0 градусов, чем в подвале, выключается вентилятор fan3
{
digitalWrite(fan3, LOW);
fan_3.off();//выкл вирт.светодиод
}
else if (h1 < h4 && h4 > maxHum2 && t1>0 ) // если влажность на улице ниже, чем в подвале и температура на улице выше 0 градусов, включается вентилятор fan3
{
digitalWrite(fan3, HIGH);
fan_3.on(); //вкл вирт.светодиод
}

//-------- вытяжка техкомната
if (h3 > maxHum)
{
digitalWrite(fan2, HIGH);
fan_2.on(); //вкл вирт.светодиод
}
else if (h3 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
{
digitalWrite(fan2, LOW);
fan_2.off(); //выкл вирт.светодиод
}
//-------- вытяжка подвал
if (h4 > maxHum2)
{
digitalWrite(fan4, HIGH);
fan_4.on(); //вкл вирт.светодиод
}
else if (h3 < (maxHum2 - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
{
digitalWrite(fan4, LOW);
fan_4.off(); //выкл вирт.светодиод
}

}

//------------ на Blynk
if (stat == 1) {
Blynk.virtualWrite(V0, h1);
Blynk.virtualWrite(V1, t1);
Blynk.virtualWrite(V2, h2);
Blynk.virtualWrite(V3, t2);
Blynk.virtualWrite(V4, h3);
Blynk.virtualWrite(V5, t3);
Blynk.virtualWrite(V6, h4);
Blynk.virtualWrite(V7, t4);
}
}


//-------------------------------групповое вкл/откл вентиляции
BLYNK_WRITE (V30) {
if (param.asInt()){
flag_avto_fan = 0; // выключить автоматику
digitalWrite(fan1, LOW); fan_1.off();
digitalWrite(fan2, LOW); fan_2.off();
digitalWrite(fan3, LOW); fan_3.off();
digitalWrite(fan4, LOW); fan_4.off();
}
else{
flag_avto_fan = 1; // включить автоматику
}
}
//-------------------------------------------------

//digitalWrite(fan1, LOW);
// fan_1.off();//выкл вирт.светодиод

//---------------------------------
void reconnectBlynk() { // функция проверяет соединение с сервером Блинк
if (!Blynk.connected()) { // если соединения нет то
if (Blynk.connect()) // конектимся
BLYNK_LOG("Reconnected"); // выводим в лог
else
BLYNK_LOG("Not reconnected"); // выводим в лог
}
}
 

sergmetrolog

New member
/#define BLYNK_PRINT Serial
#include "DHT.h"
#include "EmonLib.h"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

EnergyMonitor emon;
#define vCalibration 106.8
#define currCalibration 41.2
BlynkTimer timer;

char auth[] = "t9KlGhагНi83o5PzhIcwHeTQciyrКа4 ";
char ssid[] = "ss";
char pass[] = "serg_24";

float kWh = 0;
unsigned long lastmillis = millis();

void myTimerEvent() {
emon.calcVI(20, 2000);
Serial.print("Vrms: ");
Serial.print(emon.Vrms, 2);
Serial.print("V");
Blynk.virtualWrite(V0, emon.Vrms);
Serial.print("\tIrms: ");
Serial.print(emon.Irms, 4);
Serial.print("A");
Blynk.virtualWrite(V1, emon.Irms);
Serial.print("\tPower: ");
Serial.print(emon.apparentPower, 4);
Serial.print("W");
Blynk.virtualWrite(V2, emon.apparentPower);
Serial.print("\tkWh: ");
kWh = kWh + emon.apparentPower*(millis()-lastmillis)/3600000000.0;
Serial.print(kWh, 4);
Serial.println("kWh");
lastmillis = millis();
Blynk.virtualWrite(V3, kWh);
}


#define DHT1PIN 2
#define DHT2PIN 26
#define DHT3PIN 25
#define DHT4PIN 33
#define fan1 2 //вентилятор D5 Приточная техкомната
#define fan2 26 //вентилятор D6 Вытяжная техкомната
#define fan3 25 //вентилятор D7 Приточная подвал
#define fan4 33 //вентилятор D8 Вытяжная подвал

//#define DHT1PIN D1//датчик на улице
//#define DHT2PIN D2//датчик в гараже
//#define DHT3PIN D3//датчик в техкомнате
//#define DHT4PIN D4//датчик в подвале

#define DHT1TYPE DHT21
#define DHT2TYPE DHT21
#define DHT3TYPE DHT21
#define DHT4TYPE DHT21

DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);
DHT dht3(DHT3PIN, DHT3TYPE);
DHT dht4(DHT4PIN, DHT4TYPE);

#define BLYNK_PRINT Serial
//#include <ESP8266WiFi.h>
//#include <BlynkSimpleEsp8266.h>

//BlynkTimer timer;

WidgetLED fan_1(V8); // Светодиод на приточка техкомната
WidgetLED fan_2(V9); // Светодиод на вытяжка техкомната
WidgetLED fan_3(V10); // Светодиод на приточка подвал
WidgetLED fan_4(V11); // Светодиод на вытяжка подвал

//int stat = 0;
int maxHum = 60; // установка максимально допустимой влажности для тех комнаты
int maxHum2 = 75; // установка максимально допустимой влажности для подвала
int flag_avto_fan = 0; // установка режима работы

//char auth[] = "t9KlGhагНi83o5PzhIcwHeTQciyrКа4";

void setup()
{
Serial.begin(115200);
Blynk.begin(auth, "ss", "serg_24");

dht1.begin();
dht2.begin();
dht3.begin();
dht4.begin();

pinMode(fan1, OUTPUT);
pinMode(fan2, OUTPUT);
pinMode(fan3, OUTPUT);
pinMode(fan4, OUTPUT);
timer.setInterval(5000, Send); // опрос датчиков с интервалом 5с.
timer.setInterval(60000L, reconnectBlynk); // проверяем каждые 60 секунд, если подключение к серверу
}

///----------------------------
///

BLYNK_WRITE(V12) //функция, отслеживающая изменение виртуального пина 5
{
int pinValue = param.asInt(); //переменная текущего состояния виртуального пина
digitalWrite(fan1, pinValue); //задаем значение на физическом пине NodeMcu D5 равное значению виртуального пина 12

if (pinValue == 0){
fan_1.off();
}
else {
fan_1.on();
}
}
BLYNK_WRITE(V13) //функция, отслеживающая изменение виртуального пина 13
{
int pinValue = param.asInt(); //переменная текущего состояния виртуального пина
digitalWrite(fan2, pinValue); //задаем значение на физическом пине NodeMcu D6 равное значению виртуального пина 13

if (pinValue == 0){
fan_2.off();
}
else {
fan_2.on();
}
}
//delay (300); // задержка включения кнопок
BLYNK_WRITE(V14) //функция, отслеживающая изменение виртуального пина 14
{
int pinValue = param.asInt(); //переменная текущего состояния виртуального пина
digitalWrite(fan3, pinValue); //задаем значение на физическом пине NodeMcu D7 равное значению виртуального пина 14

if (pinValue == 0){
fan_3.off();
}
else {
fan_3.on();
}
}
//delay (300); // задержка включения кнопок
BLYNK_WRITE(V15) //функция, отслеживающая изменение виртуального пина 15
{
int pinValue = param.asInt(); //переменная текущего состояния виртуального пина
digitalWrite(fan4, pinValue); //задаем значение на физическом пине NodeMcu D8 равное значению виртуального пина 15

if (pinValue == 0){
fan_4.off();
}
else {
fan_4.on();
}
}
//delay (300); // задержка включения кнопок
///----------------------------

BLYNK_WRITE(V20){ // запрос данных с датчика и возврат состояния реле в выключенное состояние
if (param.asInt()) { // кнопка в режиме SWITCH

digitalWrite(fan1, HIGH);

digitalWrite(fan2, HIGH);

digitalWrite(fan3, HIGH);

digitalWrite(fan4, HIGH);
}
else {

digitalWrite(fan1, LOW);

digitalWrite(fan2, LOW);

digitalWrite(fan3, LOW);

digitalWrite(fan4, LOW);
}
{
// stat = param.asInt();
}
}
void loop() {
if (Blynk.connected()) Blynk.run(); // Запуск Blynk
timer.run();
}
//---------------------------------------------------

void Send() {

// опрос датчиков
//---------- dht1 улица
float h1 = dht1.readHumidity();
float t1 = dht1.readTemperature();
if (isnan(h1) || isnan(t1)) Serial.println("Failed to read from DHT1 sensor!");
else {
Serial.print("Humidity1: ");
Serial.print(h1);
Serial.print(" %\t ");
Serial.print("Temperature1: ");
Serial.print(t1);
Serial.println(" *C ");
}
//---------- dht2 гараж
float h2 = dht2.readHumidity();
float t2 = dht2.readTemperature();
if (isnan(h2) || isnan(t2)) Serial.println("Failed to read from DHT2 sensor!");
else {
Serial.print("Humidity2: ");
Serial.print(h2);
Serial.print(" %\t ");
Serial.print("Temperature2: ");
Serial.print(t2);
Serial.println(" *C ");
}
//--------- dht3 техкомната
float h3 = dht3.readHumidity();
float t3 = dht3.readTemperature();
if (isnan(h3) || isnan(t3))Serial.println("Failed to read from DHT3 sensor!");
else {
Serial.print("Humidity3: ");
Serial.print(h3);
Serial.print(" %\t ");
Serial.print("Temperature3: ");
Serial.print(t3);
Serial.println(" *C ");
}
//--------- dht4 подвал
float h4 = dht4.readHumidity();
float t4 = dht4.readTemperature();
if (isnan(h4) || isnan(t4)) Serial.println("Failed to read from DHT4 sensor!");
else {
Serial.print("Humidity4: ");
Serial.print(h4);
Serial.print(" %\t ");
Serial.print("Temperature4: ");
Serial.print(t4);
Serial.println(" *C ");
}
Serial.println();
///
// ********************* Логика работы вентиляторов **************

if (flag_avto_fan) { // если ВКЛ автоматический режим !!!!!!!!

//-------- микроклимат приточка техкомната
if (h1 > h3 && h3 < (maxHum - 5) && t1<0) // если влажность на улице ниже, чем в техкомнате и установленной, и температура на улице ниже 0 градусов, выключается вентилятор fan1
{
digitalWrite(fan1, LOW);
fan_1.off();//выкл вирт.светодиод
}
else if (h1 < h3 && h3 > maxHum && t1>0) // если влажность на улице ниже, чем в техкомнате и установленной, и температура на улице выше 0 градусов, включается вентилятор fan1
{
digitalWrite(fan1, HIGH);
fan_1.on(); //вкл вирт.светодиод
}
//-------- микроклимат приточка подвал
if (h1 > h4 && h4 < (maxHum2 - 5) && t1<0) // если влажность на улице выше, и температура на улице ниже 0 градусов, чем в подвале, выключается вентилятор fan3
{
digitalWrite(fan3, LOW);
fan_3.off();//выкл вирт.светодиод
}
else if (h1 < h4 && h4 > maxHum2 && t1>0 ) // если влажность на улице ниже, чем в подвале и температура на улице выше 0 градусов, включается вентилятор fan3
{
digitalWrite(fan3, HIGH);
fan_3.on(); //вкл вирт.светодиод
}

//-------- вытяжка техкомната
if (h3 > maxHum)
{
digitalWrite(fan2, HIGH);
fan_2.on(); //вкл вирт.светодиод
}
else if (h3 < (maxHum - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
{
digitalWrite(fan2, LOW);
fan_2.off(); //выкл вирт.светодиод
}
//-------- вытяжка подвал
if (h4 > maxHum2)
{
digitalWrite(fan4, HIGH);
fan_4.on(); //вкл вирт.светодиод
}
else if (h3 < (maxHum2 - 5) ) // Числа нижнего порога можете поменять по желанию. { digitalWrite(fan, LOW);
{
digitalWrite(fan4, LOW);
fan_4.off(); //выкл вирт.светодиод
}

}

//------------ на Blynk
// if (stat == 1) {
Blynk.virtualWrite(V0, h1);
Blynk.virtualWrite(V1, t1);
Blynk.virtualWrite(V2, h2);
Blynk.virtualWrite(V3, t2);
Blynk.virtualWrite(V4, h3);
Blynk.virtualWrite(V5, t3);
Blynk.virtualWrite(V6, h4);
Blynk.virtualWrite(V7, t4);
}
}
 

sergmetrolog

New member
Здравствуйте! Подскажите кто знает почему Widget LED не работает
Вот так прописал (реле работают, температура, напряжение, ток измеряется)
WidgetLED RelayPin_1(V10); // Светодиод нагреватель BOX
WidgetLED RelayPin_2(V11); // Светодиод вентилятор BOX
WidgetLED RelayPin_3(V12); // Светодиод освещение LED
WidgetLED RelayPin_4(V13); // Светодиод освещение IR

СПАСИБО

Скетч
#include <DHT.h>
#include "EmonLib.h"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>

#define DHTTYPE DHT11 // DHT 21
#define DHTPIN 2 // pin connected with DHT

DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;

// define the GPIO connected with Relays and switches
#define RelayPin1 12 //D23 нагреватель BOX
#define RelayPin2 13 //D22 вентилятор BOX
#define RelayPin3 14 //D21 освещение LED
#define RelayPin4 15 //D19 освещение IR

#define VPIN_BUTTON_1 V4
#define VPIN_BUTTON_2 V5
#define VPIN_BUTTON_3 V6
#define VPIN_BUTTON_4 V7

WidgetLED RelayPin_1(V10); // Светодиод нагреватель BOX
WidgetLED RelayPin_2(V11); // Светодиод вентилятор BOX
WidgetLED RelayPin_3(V12); // Светодиод освещение LED
WidgetLED RelayPin_4(V13); // Светодиод освещение IR


EnergyMonitor emon;
#define vCalibration 106.8
#define currCalibration 41.2


char auth[] = "NdxthsbiDsGoZ9rtyulu64Dvdfdn";
char ssid[] = "are";
char pass[] = "serg_24";

float kWh = 0;
unsigned long lastmillis = millis();

void myTimerEvent() {
emon.calcVI(20, 2000);
Serial.print("Vrms: ");
Serial.print(emon.Vrms, 2);
Serial.print("V");
Blynk.virtualWrite(V0, emon.Vrms);
Serial.print("\tIrms: ");
Serial.print(emon.Irms, 4);
Serial.print("A");
Blynk.virtualWrite(V1, emon.Irms);
Serial.print("\tPower: ");
Serial.print(emon.apparentPower, 4);
Serial.print("W");
Blynk.virtualWrite(V2, emon.apparentPower);
Serial.print("\tkWh: ");
kWh = kWh + emon.apparentPower*(millis()-lastmillis)/3600000000.0;
Serial.print(kWh, 4);
Serial.println("kWh");
lastmillis = millis();
Blynk.virtualWrite(V3, kWh);
}


// Relay State
bool toggleState_1 = LOW; //Define integer to remember the toggle state for relay 1
bool toggleState_2 = LOW; //Define integer to remember the toggle state for relay 2
bool toggleState_3 = LOW; //Define integer to remember the toggle state for relay 3
bool toggleState_4 = LOW; //Define integer to remember the toggle state for relay 4

BLYNK_WRITE(VPIN_BUTTON_1) {
toggleState_1 = param.asInt();
if(toggleState_1 == 1){
digitalWrite(RelayPin1, LOW);
}
else {
digitalWrite(RelayPin1, HIGH);
}
}

BLYNK_WRITE(VPIN_BUTTON_2) {
toggleState_2 = param.asInt();
if(toggleState_2 == 1){
digitalWrite(RelayPin2, LOW);
}
else {
digitalWrite(RelayPin2, HIGH);
}
}

BLYNK_WRITE(VPIN_BUTTON_3) {
toggleState_3 = param.asInt();
if(toggleState_3 == 1){
digitalWrite(RelayPin3, LOW);
}
else {
digitalWrite(RelayPin3, HIGH);
}
}

BLYNK_WRITE(VPIN_BUTTON_4) {
toggleState_4 = param.asInt();
if(toggleState_4 == 1){
digitalWrite(RelayPin4, LOW);
}
else {
digitalWrite(RelayPin4, HIGH);
}
}

void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit

if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// You can send any value at any time.
// Please don't send more that 10 values per second.
Blynk.virtualWrite(V8, h); // select your virtual pins accordingly
Blynk.virtualWrite(V9, t); // select your virtual pins accordingly

}
void setup() {
Serial.begin(115200);
emon.voltage(35, vCalibration, 1.7); // Voltage: input pin, calibration, phase_shift
emon.current(34, currCalibration); // Current: input pin, calibration.
Blynk.begin(auth, ssid, pass);
timer.setInterval(3000L, myTimerEvent);

dht.begin();

// Setup a function to be called every second
timer.setInterval(5000, sendSensor);

pinMode(RelayPin1, OUTPUT);
pinMode(RelayPin2, OUTPUT);
pinMode(RelayPin3, OUTPUT);
pinMode(RelayPin4, OUTPUT);

//During Starting all Relays should TURN OFF
digitalWrite(RelayPin1, HIGH);
digitalWrite(RelayPin2, HIGH);
digitalWrite(RelayPin3, HIGH);
digitalWrite(RelayPin4, HIGH);

}
void loop() {
Blynk.run();
timer.run();
}
 

svs2007m

Active member
Да и для "мега проекта" лучше одноплатник (для полной автономии хотя и значительно дороже) а не ESP32.
Bkynk это Украинский проект и серверы под них заточены. Что будет с ним дальше ... :)
 

sergmetrolog

New member
Да, задумался уже, планирую свой сервер blynk поднимать. На том что из облака дороже энергия стала да и купить уже не позволяют. Мне blynk очень понравился, хороший продукт.
 

svs2007m

Active member
Удачи !
Да и параметры мин-макс да и прочие настройки возможно лучше делать через виджет ТЕРМИНАЛ и записывать в EEPROM
(как вытаскивать цифры из командной строки где то было описано :)
 
Сверху Снизу