Sergey0001
New member
Добрый день, помогите добрые люди. Сделал терморегулятор на dht22+node mcu+ blynk, два устройства одно с dht22 считывает температуру и отправляет на второе устройство с реле. Все работает, всё хорошо, НО регулирование температуры идёт в 1 градус, т.е. уставка выставляется 25.6, 25.8, а по факту срабатывает при 25, 26, 27(десятичные значения не учитывает, хотя использую float). Помогите с доработкой скейтча, чтобы температура регулировалась с шагом, например 0,2,а не 1,2,3.
Думаю проблема с переменными float, а как знаки после запятой использовать не знаю.
Скейтч 1 устр.
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>
#define DHTPIN 12 //pin gpio 12 in sensor
#define DHTTYPE DHT22 // DHT 22 Change this if you have a DHT11
DHT dht(DHTPIN, DHTTYPE);
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "";// Put your Auth Token here. (see Step 3 above)
WidgetBridge bridge1(V1);
SimpleTimer timer;
void setup()
{
Serial.begin(9600); // See the connection status in Serial Monitor
Blynk.begin(auth, "1", "1", ""); //insert here your SSID and password
// Setup a function to be called every second
timer.setInterval(1000L, sendUptime);
}
void sendUptime()
{
// You can send any value at any time.
// Please don't send more that 10 values per second.
//Read the Temp and Humidity from DHT
float h = dht.readHumidity();
float t = dht.readTemperature();
Blynk.virtualWrite(10, t); // virtual pin
Blynk.virtualWrite(11, h); // virtual pin
bridge1.virtualWrite(V16, t);
}
BLYNK_CONNECTED() {
bridge1.setAuthToken(""); // Сюда пишем Токен Первого устройства
}
void loop()
{
Blynk.run();
timer.run();
}
2устр.
BLYNK_WRITE(V15)
{
value = param.asFloat();
}
BLYNK_WRITE(V17)
{
valuet = param.asFloat();
}
BLYNK_WRITE(V16)
{
pinData = param.asFloat();
}
BLYNK_WRITE(V18)
{
valueta = param.asFloat();
}
if (Morningstatus == 1 || Eveningstatus == 1){
if (pinData < value+0.2)
{digitalWrite(relay, HIGH); // set LED ON
Blynk.virtualWrite(V2, 1);}
else if (pinData > value -0.2 )
{digitalWrite(relay, LOW);
Blynk.virtualWrite(V2, 0);}
} else {// код что бы переключить реле в OFF
if (pinData < valuet+0.2)
{digitalWrite(relay, HIGH); // set LED ON
Blynk.virtualWrite(V2, 1);}
else if (pinData > valuet-0.2 )
{digitalWrite(relay, LOW);
Blynk.virtualWrite(V2, 0);}
}
} else {// код что бы переключить реле в OFF
if (pinData < valuet+0.2)
{digitalWrite(relay, HIGH); // set LED ON
Blynk.virtualWrite(V2, 1);}
else if (pinData > valuet-0.2 )
{digitalWrite(relay, LOW);
Blynk.virtualWrite(V2, 0);}
}
}
Думаю проблема с переменными float, а как знаки после запятой использовать не знаю.
Скейтч 1 устр.
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <DHT.h>
#define DHTPIN 12 //pin gpio 12 in sensor
#define DHTTYPE DHT22 // DHT 22 Change this if you have a DHT11
DHT dht(DHTPIN, DHTTYPE);
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "";// Put your Auth Token here. (see Step 3 above)
WidgetBridge bridge1(V1);
SimpleTimer timer;
void setup()
{
Serial.begin(9600); // See the connection status in Serial Monitor
Blynk.begin(auth, "1", "1", ""); //insert here your SSID and password
// Setup a function to be called every second
timer.setInterval(1000L, sendUptime);
}
void sendUptime()
{
// You can send any value at any time.
// Please don't send more that 10 values per second.
//Read the Temp and Humidity from DHT
float h = dht.readHumidity();
float t = dht.readTemperature();
Blynk.virtualWrite(10, t); // virtual pin
Blynk.virtualWrite(11, h); // virtual pin
bridge1.virtualWrite(V16, t);
}
BLYNK_CONNECTED() {
bridge1.setAuthToken(""); // Сюда пишем Токен Первого устройства
}
void loop()
{
Blynk.run();
timer.run();
}
2устр.
BLYNK_WRITE(V15)
{
value = param.asFloat();
}
BLYNK_WRITE(V17)
{
valuet = param.asFloat();
}
BLYNK_WRITE(V16)
{
pinData = param.asFloat();
}
BLYNK_WRITE(V18)
{
valueta = param.asFloat();
}
if (Morningstatus == 1 || Eveningstatus == 1){
if (pinData < value+0.2)
{digitalWrite(relay, HIGH); // set LED ON
Blynk.virtualWrite(V2, 1);}
else if (pinData > value -0.2 )
{digitalWrite(relay, LOW);
Blynk.virtualWrite(V2, 0);}
} else {// код что бы переключить реле в OFF
if (pinData < valuet+0.2)
{digitalWrite(relay, HIGH); // set LED ON
Blynk.virtualWrite(V2, 1);}
else if (pinData > valuet-0.2 )
{digitalWrite(relay, LOW);
Blynk.virtualWrite(V2, 0);}
}
} else {// код что бы переключить реле в OFF
if (pinData < valuet+0.2)
{digitalWrite(relay, HIGH); // set LED ON
Blynk.virtualWrite(V2, 1);}
else if (pinData > valuet-0.2 )
{digitalWrite(relay, LOW);
Blynk.virtualWrite(V2, 0);}
}
}