• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Обсуждение Blynk - примеры, документация и FAQ

StalSan

New member
@Jon, спасибо за подсказку, скетч переработал, теперь работает отлично
Код:
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>


char auth[] = "xxxx";
const int OSPin = 12; //open State Pin
const int CSPin = 14; //close State Pin
const int LedOSPin = V12; //open State VPin for Led
const int LedCSPin = V14; //close State VPin for Led
const int LCDPin1 = V1; //VPin for LCD строка 1
const int LCDPin2 = V2; //VPin for LCD строка 2
boolean LastStateCSPin; //Флаг последнего состояния пина close State Pin
boolean LastStateOSPin; //Флаг последнего состояния пина open State Pin
boolean StateCSPin; //Флаг текущего состояния пина close State Pin
boolean StateOSPin; //Флаг текущего состояния пина open State Pin
int state; //флаг состояния ворот для цикла проверки

void setup()
{
  Serial.begin(9600);
  Blynk.begin(auth, "XXXXX", "XXXXX");

  while (Blynk.connect() == false) {
  // Wait until connected
  }
  pinMode(OSPin, INPUT);
  pinMode(CSPin, INPUT);
  Blynk.virtualWrite(LedOSPin, 0);
  Blynk.virtualWrite(LedCSPin, 0);
}

void checkState()
{
  if(StateOSPin==HIGH&&state!=0)
  {
    state = 0;
    Blynk.virtualWrite(LCDPin1, " open"); //вывод состояни на виджет LCD, строка 1
    Blynk.virtualWrite(LCDPin2, " "); //вывод состояни на виджет LCD, строка 2
    Blynk.virtualWrite(LedOSPin, 1023); //включаем виджет LED состояния "открыто"
    Blynk.virtualWrite(LedCSPin, 0); //тушим виджет LED состояния "закрыто"
    Blynk.notify("open"); //шлем на смартфон оповещение "ворота открыты"
  }
    if(StateCSPin==HIGH&&state!=1)
  {
    state = 1;
    Blynk.virtualWrite(LCDPin1, "close"); //вывод состояни на виджет LCD, строка 1
    Blynk.virtualWrite(LCDPin2, " "); //вывод состояни на виджет LCD, строка 2
    Blynk.virtualWrite(LedOSPin, 0); //тушим виджет LED состояния "открыто"
    Blynk.virtualWrite(LedCSPin, 1023); //включаем виджет LED состояния "закрыто"
    Blynk.notify("close");  // шлем на смартфон оповещение "ворота закрыты"
  }
    if(StateOSPin==LOW&&StateCSPin==LOW&&LastStateCSPin==HIGH&&state!=3)
  {
    state = 3;
    Blynk.virtualWrite(LCDPin1, "opening"); //вывод состояни на виджет LCD, строка 1
    Blynk.virtualWrite(LCDPin2, "<--<--<--"); //вывод состояни на виджет LCD, строка 2
    Blynk.virtualWrite(LedOSPin, 0); //тушим виджет LED состояния "открыто"
    Blynk.virtualWrite(LedCSPin, 0); //тушим виджет LED состояния "закрыто"
    Blynk.notify("opening"); //шлем на смартфон оповещение "ворота открываются"
  }
    if(StateOSPin==LOW&&StateCSPin==LOW&&LastStateOSPin==HIGH&&state!=4)
  {
    state = 4;
    Blynk.virtualWrite(LCDPin1, "closing"); //вывод состояни на виджет LCD, строка 1
    Blynk.virtualWrite(LCDPin2, "-->-->-->"); //вывод состояни на виджет LCD, строка 2
    Blynk.virtualWrite(LedOSPin, 0); //тушим виджет LED состояния "открыто"
    Blynk.virtualWrite(LedCSPin, 0); //тушим виджет LED состояния "закрыто"
    Blynk.notify("closing..."); //шлем на смартфон оповещение "ворота закрываются"
  }
  LastStateCSPin = StateCSPin; //запоминаем последнее состояние пина close State Pin
  LastStateOSPin = StateOSPin; //запоминаем последнее состояние пина open State Pin
}
 
void loop()
{
  Blynk.run();
  StateCSPin = digitalRead(CSPin); //запоминаем текущее состояние пина close State Pin
  StateOSPin = digitalRead(OSPin); //запоминаем текущее состояние пина open State Pin
  checkState();
}
 

Rom13j

New member
Подскажите, пожалуйста, в чем может быть проблема: режим, который изначально задан как "0", сам переключается в "1". Я сейчас только учусь и если ошибся темой направьте, пожалуйста в нужную. Это выдает монитор порта: Gyazo - 4c164db203c475973319111cc6d6b673.png. А вот код в Arduino IDE:
Код:
#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define RELAY_1 5                            //Выход на реле или светодиод
#define BUTTON_1 12                           //Кнопка
boolean Status1 = true;                       //объявляем статус реле в 0
boolean btnPress1 = false;                    //объявляем что кнопка не нажата 0
boolean lastbtnStat1 = false;                 //временная переменная для хранения статуса
int regim1 = 0;                               //режим по умолчанию при включении
                        
long last_mls4 = millis();


// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
const char* ssid     = "ssid";
const char* password = "pass";
char auth[] = "token";
DHT dht(DHTPIN, DHTTYPE);
WidgetLED led1(V4);

void setup()
{
  Serial.begin(115200);
  Blynk.begin(auth, ssid, password);
  dht.begin();

  pinMode(RELAY_1, OUTPUT);                  //Выход на реле или светодиод
  pinMode(BUTTON_1, INPUT);                  //Кнопка
  digitalWrite(RELAY_1, Status1);            //устанавливаем на выходе статус реле
}

void Send(){
   float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
    {
  Blynk.virtualWrite(V2, h);
  Blynk.virtualWrite(V3, t);
  }
}


void button1() {
  btnPress1 = digitalRead(BUTTON_1);
  Status1 = digitalRead(RELAY_1);
  if (btnPress1 == LOW && lastbtnStat1 == false) {
    delay(30); // защита от дребезга
    regim1++;
    lastbtnStat1 = true;
    if (regim1 > 1) {
      regim1 = 0;
    }
  }
  if (btnPress1 == HIGH && lastbtnStat1 == true) {
    lastbtnStat1 = false;
  }

  if (regim1 == 0) {
    Status1 = true;
    digitalWrite(RELAY_1, Status1);
    led1.off();
  
  }
  if (regim1 == 1) {
    Status1 = false;
    digitalWrite(RELAY_1, Status1);
    led1.on();
  
    }

  Serial.print("Regim:");
  Serial.println(regim1);
  Serial.print("Relay:");
  Serial.println(Status1);
}

void loop()
{
  Blynk.run();
  Send();
  button1();
  }
 

Jon

Member
в чем может быть проблема: режим, который изначально задан как "0", сам переключается в "1".
1) что за модуль используется? #define BUTTON_1 12 //Кнопка
Что-то я не помню у какого модуля ESP имеется больше десяти портов. У вас кнопка на 12 порту, это скорей всего какой-то служебный порт и там может быть любое состояние помимо вашей кнопки.
2) опрос датчиков нужно вести не чаще 1 раза в секунду и делать это через таймер.
3) Судя по монитору Blink с трудом пролез со своей синхронизацией в ваш бесконечный цикл опроса датчика.
Для отладки отключить Blink и выявить неисправность обычным способом.
 

Rom13j

New member
Спасибо за ответ. Проверил без Blynk, все работает отлично, заметил, что именно после подключения к серверу Blynk изменяется режим. Поставил как вы и порекомендовали через таймер, проблема все равно остается. Не подскажете куда дальше можно посмотреть. Выкладываю скетч:
Код:
#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define BLYNK_PRINT Serial    // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h> //таймер
#define RELAY_1 5                            //Выход на реле или светодиод
#define BUTTON_1 4                           //Кнопка
#define BUTTON_2 14                           //Кнопка
boolean Status1 = true;                       //объявляем статус реле в 0
boolean btnPress1 = false;                    //объявляем что кнопка не нажата 0
boolean lastbtnStat1 = false;                 //временная переменная для хранения статуса
boolean btnPress2 = false;                    //объявляем что кнопка не нажата 0
boolean lastbtnStat2 = false;                 //временная переменная для хранения статуса
int regim1 = 0;                               //режим по умолчанию при включении
int regim2 = 0;
int hm = 0;
int h;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
const char* ssid     = "ssid";
const char* password = "pass";
char auth[] = "auth";
DHT dht(DHTPIN, DHTTYPE);
SimpleTimer timer;

WidgetLED led1(V4);
WidgetLED led2(V5);

void Send(){
   float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  {
  Blynk.virtualWrite(V2, h);
  Blynk.virtualWrite(V3, t);
  }
 
}


void hum()                             //функция чтения с датчика dht
{
int h = dht.readHumidity();
Serial.print("humidity:");
  Serial.println(h);
  if (h < 47)                 //если влажность меньше указанного
  {
    hm = 1;                     //то hm 1
  } else if (h > 55)                                     //если нет то 0
  {
    hm = 0;
  }
  Serial.print("Hum_ch:");
  Serial.println(hm);
}

void reg() {

int h = dht.readHumidity();
  if (regim2 == 1 && hm == 1) {
      Status1 = false;
      digitalWrite(RELAY_1, Status1);
    }
  if (regim2 == 1 && hm == 0) {
    Status1 = true;
    digitalWrite(RELAY_1, Status1);
  }

  if (regim1 == 1 && h > 60) {
      regim1 = 0;
          }
}

void button1() {
  btnPress1 = digitalRead(BUTTON_1);
  Status1 = digitalRead(RELAY_1);
  if (btnPress1 == LOW && lastbtnStat1 == false) {
    delay(30); // защита от дребезга
    regim1++;
    lastbtnStat1 = true;
    if (regim1 > 1) {
      regim1 = 0;
    }
  }
  if (btnPress1 == HIGH && lastbtnStat1 == true) {
    lastbtnStat1 = false;
  }

  if (regim1 == 0 && regim2 == 0) {
    Status1 = true;
    digitalWrite(RELAY_1, Status1);
    led1.off();
    led2.off();
 
  }
  if (regim1 == 1) {
    regim2 = 0;
    Status1 = false;
    digitalWrite(RELAY_1, Status1);
    led1.on();
    led2.off();
      }

  Serial.print("Regim:");
  Serial.println(regim1);
  Serial.print("Relay:");
  Serial.println(Status1);
}

void button2() {
  btnPress2 = digitalRead(BUTTON_2);
  Status1 = digitalRead(RELAY_1);
  if (btnPress2 == LOW && lastbtnStat2 == false) {
    delay(30); // защита от дребезга
    regim2++;
    lastbtnStat2 = true;
    if (regim2 > 1) {
      regim2 = 0;
    }
  }
  if (btnPress2 == HIGH && lastbtnStat2 == true) {
    lastbtnStat2 = false;
  }

  if (regim2 == 0 && regim1 == 0) {
    Status1 = true;
    digitalWrite(RELAY_1, Status1);
    led1.off();
    led2.off();
  }
   if (regim2 == 1) {
   regim1 = 0;
   led1.off();
   led2.on();
    }
  Serial.print("Regim2:");
  Serial.println(regim2);
  Serial.print("Relay2:");
  Serial.println(Status1);
}

void setup()
{
  Serial.begin(115200);
  Blynk.begin(auth, ssid, password);
  dht.begin();

  pinMode(RELAY_1, OUTPUT);                  //Выход на реле или светодиод
  pinMode(BUTTON_1, INPUT);                  //Кнопка
  digitalWrite(RELAY_1, Status1);            //устанавливаем на выходе статус реле
  timer.setInterval(30000L, Send);
  timer.setInterval(30000L, hum);
  timer.setInterval(1000L, button1);
  timer.setInterval(1000L, button2);
  timer.setInterval(30000L, reg);
}
void loop()
{
  Blynk.run();
  timer.run();
  }

Может я еще что-то не так прописал?
 
Последнее редактирование:

Jon

Member
меня удивляет то что вы берете для кнопки порт с номером больше 10. Какой модуль ESP?
 
Последнее редактирование:

Jon

Member
У меня сам скетч работает стабильно. Попробую навесить кнопки и датчик - отпишусь.
 

Nikolaha53rus

New member
Я вижу что тема умерла, но все таки, подскажите есть ли пример в библиотеке Blynk для связи между собой 2-х esp8266? Два разных проекта.
 
Последнее редактирование:

Partizanex

New member
Даже зарегался ДЛя такого нежданого появления в 2020 году.
Nikolaha53rus
Ты хоть и был последний раз в 2017 м Но отвечу примеры есть И всем остальным кого сюда занесет рекомендую искать примеры и вообще разбор библиотеки Блинк вот тут .
Благо там есть переключатель РУ . Так вот на одной странице собрана вся инфа которая вот как тут разбросана по форумам.
 
Сверху Снизу