• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
(как вытаскивать цифры из командной строки где то было описано :)
 
Сверху Снизу