1 Robodyn Mega2560 WIFI(Mega+ESP8266)
2.Android 9 + Blynk 2.27.5
3.Local Server 0.41.2-java8 on windows 10
4.Blynk Library 0.6.1
5. ESP SDK 1.5.4
I have a problem with a smart home project.
Many sensors are connected to Arduino, which successfully work with the blink, but reconnections to the server occur and the relay control button does not work. The relay is dual, controls light and ventilation, ventilation switches on when a high gas content is detected, or if a flame is present, the light turns on through a button in the application and works depending on the lighting. If the light through the button is turned on, it works as expected: it turns off during the day, turns on at night, but if it is turned on at night and I turn it off with the button, then nothing happens (except disconnect). Without the server side, everything is stable.
- На русском:
У меня есть проблема с проектом умного дома.
Подключено много датчиков к ардуино, которые успешно работают с блинк, но происходят переподключения к серверу и не работает кнопка упрвления реле. Реле двойное, управляет светом и вентиляцией, вентиляция включается при обнаружении высокого содержания газа, либо при наличии пламени, свет включается через кнопку в приложении и работает в зависимости от освещения. Если свет через кнопку включен, то он работает как положено: днем выключается, ночью включается, но если он включен ночью и я его выключаю с помощью кнопки, то ничего не происходит( кроме дисконнекта). Без серверной части все работает стабильно.
> [44]
>
> ___ __ __
> / _ )/ /_ _____ / /__
> / _ / / // / _ \/ '_/
> /____/_/\_, /_//_/_/\_\
> /___/ v0.6.1 on Arduino Mega
>
> [550] Connecting to dlink
> [3600] AT version:1.1.0.0(May 11 2016 18:09:56)
> SDK version:1.5.4(baaeaebb)
> Ai-Thinker Technology Co. Ltd.
> Jun 13 2016 11:29:20
> OK
> [6665] +CIFSR:STAIP,"192.168.0.101"
> +CIFSR:STAMAC,"2c:3a:e8:26:02:06"
> [6665] Connected to WiFi
> [16839] Ready (ping: 13ms).
> [21576] Packet too big: 17452
> [33374] Ready (ping: 3681ms).
> [33414] Packet too big: 30322
#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <DHT.h>
char auth[] = "";
char ssid[] = "";
char pass[] = "";
char IP[] = "";
int Relay = 12;
int Relay2 = 11;
int stat = 0;
int lghtPin = 50;
int buzzPin = 13;
int flamePin = 9;
int movePin = 8;
const int analogSignal = A0; //подключение аналогового сигнального пина
int t;
int h;
int Co2Value = 0; //переменная для хранения количества газа
const int analogSignal2 = A1; //подключение аналогового сигнального пина
int CH4Value = 0; //переменная для хранения количества газа
WidgetLED led1(V10); //![FiNtrYv-A3Q|205x500](upload://tesXKP4QpnlfVAXa91SAwx4oa0e.jpeg) виртуальные пины для индикации датчика пламени и движения
WidgetLED led2(V9);
#define EspSerial Serial1
#define ESP8266_BAUD 115200
ESP8266 wifi(&EspSerial);
#define DHTPIN 22 // пин DHT
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
{ Blynk.virtualWrite(V5, h); //отправка данных с dht22 в приложение
Blynk.virtualWrite(V6, t);
delay(1000);
}
Co2Value = analogRead(analogSignal); // опрос датчиков газа
CH4Value = analogRead(analogSignal2);
}
void setup()
[details="Summary"]
This text will be hidden
[/details]
{
Serial.begin(115200);
lcd.begin(16, 2);
EspSerial.begin(ESP8266_BAUD);
delay(30);
pinMode(Relay, OUTPUT);
pinMode(Relay2, OUTPUT);
Blynk.begin(auth, wifi, ssid, pass, IP, 8080);
dht.begin();
pinMode( analogSignal, INPUT );
pinMode( flamePin, INPUT );
pinMode (movePin, INPUT );
pinMode( buzzPin, OUTPUT );
pinMode( lghtPin, INPUT );
timer.setInterval(2000L, sendSensor);
}
BLYNK_WRITE(V1) // задаем виртуальный пин для кнопки управления светом
{ stat = param.asInt();
}
void loop()
{ if (( !digitalRead( lghtPin )) || (stat == 0)) //управление реле
{
digitalWrite( Relay, HIGH );
}
else if (stat == 1)
{
digitalWrite( Relay, LOW );
}
{
float h = dht.readHumidity(); // код для работы дисплея
float t = dht.readTemperature();
{
lcd.setCursor(0, 1);
lcd.print("Hum:");
lcd.println(h);
lcd.print("%");
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.print(t);
lcd.print("C");
delay(1000); // задержка 1 сек между считываниями
}
{ if ( !digitalRead( flamePin ) ) //индикация датчика пламени в приложении
led2.on();
else
led2.off();
if ( !digitalRead( lghtPin ) )
Blynk.virtualWrite(V4, "Светло");
else
Blynk.virtualWrite(V4, "Темно" );
CH4Value = analogRead(analogSignal2); /
if ( !digitalRead( movePin ) ) //индикация датчика движения в приложении
led1.off();
else
led1.on();
{ if ( !digitalRead( flamePin ) || ( ( CH4Value >= 150 ) ) )
tone(13, 1000);
else
noTone(13);
{ if ( !digitalRead( flamePin ) || ( ( CH4Value >= 150 ) ) )
digitalWrite( Relay2, LOW ); //включение вентиляции
else
digitalWrite( Relay2, HIGH );
Blynk.run();
timer.run();
}
}
}
}
}
(old, but working sketch without some functions)
#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
#include <DHT.h>
char auth[] = "";
char ssid[] = "";
char pass[] = "";
char IP[] = "";
int Relay = 12 ;
int stat = 0;
int lghtPin = 8;
int buzzPin = 13;
int flamePin = 9;
int movePin = 51;
const int analogSignal = A0; //подключение аналогового сигналоьного пина
int Co2Value = 0; //переменная для хранения количества газа
const int analogSignal2 = A1; //подключение аналогового сигнального пина
int CH4Value = 0; //переменная для хранения количества газа
#define EspSerial Serial1
#define ESP8266_BAUD 115200
; ESP8266 wifi(&EspSerial);
#define DHTPIN 52 // What digital pin we're connected to
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
// This function sends Arduino's up time every second to Virtual Pin (5).
// In the app, Widget's reading frequency should be set to PUSH. This means
// that you define how often to send data to Blynk App.
void sendSensor()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
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(V5, h);
Blynk.virtualWrite(V6, t);
Co2Value = analogRead(analogSignal);
Blynk.virtualWrite(V7, Co2Value);
CH4Value = analogRead(analogSignal2);
Blynk.virtualWrite(V8, CH4Value);
Serial.print(Co2Value);
}
void setup()
{
// Debug console
Serial.begin(9600);
// Set ESP8266 baud rate
EspSerial.begin(ESP8266_BAUD);
delay(10);
pinMode(Relay, OUTPUT);
Blynk.begin(auth, wifi, ssid, pass, IP, 8080);
dht.begin();
pinMode( flamePin, INPUT );
pinMode (movePin, INPUT );
pinMode( buzzPin, OUTPUT );
timer.setInterval(1000L, sendSensor);
}
BLYNK_WRITE(V1) //виртуальный пин кнопки
{ stat = param.asInt();
}
void loop()
{ if (!analogRead (Co2Value >= 300))
tone(buzzPin, 300);
else
noTone(buzzPin);
{ if ( !digitalRead( flamePin ) )
tone(buzzPin, 300);
else
noTone(buzzPin);
}
{
if ( !digitalRead( lghtPin ) )
Blynk.virtualWrite(V4, "Светло"); // информация от датчика света
else
Blynk.virtualWrite(V4, "Темно" );
{
if (stat == 1)
digitalWrite( Relay, LOW ); //управление реле
else
digitalWrite( Relay, HIGH );
{
Blynk.run();
timer.run();
}
}
}
}