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

Первый раз реле и термометр совет по коду

Yuriiip

New member
Привет форуму, сделал wifi термометр на два датчика:

/* ESP & Blynk */
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial


/* Blynk credentials */
char auth[] = "***********************";


/* WiFi credentials */
char ssid[] = "internet";
char pass[] = "prosto888";


/* TIMER */
#include <SimpleTimer.h>
SimpleTimer timer;


/* DS18B20 Temperature Sensor */
#include <OneWire.h>
#include<DallasTemperature.h>
#define ONE_WIRE_BUS 2 // DS18B20 подключаем на D4 на плате
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
float temp_0;
float temp_1;


void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
DS18B20.begin();
timer.setInterval(1000L, getSendData);
Serial.println(" ");
Serial.println("Testing Dual Sensor data");
}


void loop()
{
timer.run(); // Initiates SimpleTimer
Blynk.run();
}


/***************************************************
* Send Sensor data to Blynk
**************************************************/
void getSendData()
{
DS18B20.requestTemperatures();
temp_0 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях
temp_1 = DS18B20.getTempCByIndex(1); // Sensor 0 показания для датчика 2 в цельсиях


Serial.printf("Temp_0= %3.1f/n",temp_0);
Serial.printf("Temp_1= %3.1f/n",temp_1);
Serial.println(" oC");

Blynk.virtualWrite(10, temp_0); //выврд данных на виртуальный пин V10
Blynk.virtualWrite(11, temp_1); //вывод данных навиртуальный пин V11
}

Теперь очень желательно настроить, что бы при опускании температуры ниже предела отключалось реле. Пока сам ищу не нашел. Буду благодарен.
 
Последнее редактирование модератором:

CodeNameHawk

Moderator
Команда форума
Это просто, померили температуру, потом оператор if (то_что_намерили < заданной_температуры) выключить_реле;
Почитайте что такое оператор сравнения.
 

svs2007m

Active member
В Blynk ecть виджет eventor (срабатывать при событии). Можно настроить там и не мучится с кодом на ЕSP :)
 

svs2007m

Active member
Зачем просто(на есп), если можно сложно(на сервере).
Согласен. Но на Blynk с помощью виджетов можно быстро "отладить первичные хотелки" без перепрошивок железки. Со временем когда алгоритм будет "утвержден" после полевых испытаний, перенести все на ESP :)
 

Yuriiip

New member
Ищу примеры пару часов, пока не могу разобраться.
Помогите, напиште пожалуйста один пример правильный простой.
Пересмотрел много вариантов, все сложные пока для меня или для телеграмма или навороченные с вэб сервером.
 

Yuriiip

New member
Нашел примеры!

if(Temp + accuracy > stand_temp)
{
digitalWrite(relay_pin, LOW);
}
else if(Temp - accuracy < stand_temp)
{
digitalWrite(relay_pin, HIGH);
}

/*
Скетч для управления реле ардуино с помощью PIR датчика

PIN_RELAY содержит номер пина, к которому подключено реле, которым мы будем управлять
PIN_PIR содержит номер пина с подключенным PIR-сенсором

В функции setup устанавливаем начальное положение реле (закрытое)
В теле функции loop проверяем наличия высокого уровня сигнала от датчика с помощью функции digitalRead

Для отладки текущее значение датчика выводим в окно монитора порта
*/


#define PIN_RELAY 8 // Определяем пин, используемый для подключения реле
#define PIN_PIR 5 // Определяем пин, используемый для подключения PIR-датчика

// В этой функции определяем первоначальные установки
void setup()
{
Serial.begin(9600);
pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход
digitalWrite(PIN_RELAY, HIGH); // Выключаем реле - посылаем высокий сигнал
}
void loop()
{

int val = digitalRead(PIN_PIR); // Считваем значение с датчика движения в отдельную переменную

if (val == HIGH) {
Serial.println("Датчик сработал");
digitalWrite(PIN_RELAY, LOW); // Включаем реле - посылаем низкий уровень сигнала
} else {
digitalWrite(PIN_RELAY, HIGH); // Отключаем реле - посылаем высокий уровень сигнала
}

delay(1000); // Проверяем значения один раз в секунду.
}
 

Yuriiip

New member
Решена! В итоге вот, что вышло:

/* ESP & Blynk */
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial


/* Blynk credentials */
char auth[] = "*****************************";


/* WiFi credentials */
char ssid[] = "internet";
char pass[] = "********";


/* TIMER */
#include <SimpleTimer.h>
SimpleTimer timer;


/* DS18B20 Temperature Sensor */
#include <OneWire.h>
#include<DallasTemperature.h>
#define ONE_WIRE_BUS 2 // DS18B20 подключаем на D4 на плате
#define RELAY_PIN 5
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
float temp_0;
float temp_1;


void setup()
{
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
DS18B20.begin();
timer.setInterval(1000L, getSendData);
Serial.println(" ");
Serial.println("Testing Dual Sensor data");
pinMode(RELAY_PIN, OUTPUT); // Объявляем пин реле как выход
digitalWrite(RELAY_PIN, HIGH); // Включаем реле - посылаем высокий сигнал

}


void loop()
{
timer.run(); // Initiates SimpleTimer
Blynk.run();


if(temp_1 < 50)
{
digitalWrite(RELAY_PIN, LOW);
}
else if(temp_1 > 50)
{
digitalWrite(RELAY_PIN, HIGH);
}

}


/***************************************************
* Send Sensor data to Blynk
**************************************************/
void getSendData()
{
DS18B20.requestTemperatures();
temp_0 = DS18B20.getTempCByIndex(0); // Sensor 0 показания для датчика 1 в цельсиях
temp_1 = DS18B20.getTempCByIndex(1); // Sensor 0 показания для датчика 2 в цельсиях


Serial.printf("Temp_0= %3.1f/n",temp_0);
Serial.printf("Temp_1= %3.1f/n",temp_1);
Serial.println(" oC");

Blynk.virtualWrite(10, temp_0); //вывод данных на виртуальный пин V10
Blynk.virtualWrite(11, temp_1); //вывод данных навиртуальный пин V11
}
 

Ildarmustafin86

Active member
На практике у тебя реле будет постоянно щелкать в районе 50. Используй гистерезис или сделай вкл - 40, выкл - 60.
 

svs2007m

Active member
1. Две библиотеки BlynkSimpleEsp8266.h и SimpleTimer.h это одно и тоже. Выкинь одну (лучше вторую).
2. Реле "щелкает" от температуры убери из loop и перенеси в процедуру опроса датчика
 
Сверху Снизу