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

Обсуждение Blynk и ESP8266

Sergqxqx

New member
Убрал delay, сделал тайминги и дальше device offline
/**************************************************************
* Blynk is a platform with iOS and Android apps to control
* Arduino, Raspberry Pi and the likes over the Internet.
* You can easily build graphic interfaces for all your
* projects by simply dragging and dropping widgets.
*
* Downloads, docs, tutorials: Home
* Sketch generator: Blynk Example Browser
* Blynk community: Blynk
* Social networks: Blynk
* blynk (@blynk_app) | Твиттер
*
* Blynk library is licensed under MIT license
* This example code is in public domain.
*
**************************************************************
* This example runs directly on ESP8266 chip.
*
* Note: This requires ESP8266 support package:
* GitHub - esp8266/Arduino: ESP8266 core for Arduino
*
* Please be sure to select the right ESP8266 module
* in the Tools -> Board menu!
*
* Change WiFi ssid, pass, and Blynk auth token to run :)
*
**************************************************************/

// CheckServer.ino by Costas 17/7/2016
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <TimeLib.h>
#include <Wire.h>
#include <Adafruit_INA219.h>
#define ONE_WIRE_BUS D5
#define RELE D9
#define BUTTON D3
Adafruit_INA219 ina219;
SimpleTimer timer;
bool rele;

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "---";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "---";
char pass[] = "---";
bool Connected2Blynk = false;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup()
{
Serial.begin(115200);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Blynk.config(auth); // in place of Blynk.begin(auth, ssid, pass);
Blynk.connect(3333); // timeout set to 10 seconds and then continue without Blynk
while (Blynk.connect() == false) {
// Wait until connected
}
Serial.println("Connected to Blynk server");
timer.setInterval(11000L, CheckConnection); // check if still connected every 11 seconds
{
sensors.begin();
timer.setInterval(6000L, sendTemps);
pinMode (RELE, OUTPUT);
pinMode (BUTTON, INPUT);
}
}
BLYNK_WRITE(V2)
{
rele = param.asInt();
digitalWrite(RELE, rele);
timer.run();
if (digitalRead(BUTTON))
{
rele = !rele;
digitalWrite(RELE, rele);
Blynk.virtualWrite(V2, rele, millis() / 6000);
}
}
BLYNK_WRITE(V3)
{
uint32_t currentFrequency;
ina219.begin();
timer.setInterval(6000L, sendVoltage);
}
void CheckConnection() {
Connected2Blynk = Blynk.connected();
if (!Connected2Blynk) {
Serial.println("Not connected to Blynk server");
Blynk.connect(3333); // timeout set to 10 seconds and then continue without Blynk
}
else {
Serial.println("Connected to Blynk server");
}
}
void sendTemps()
{
sensors.requestTemperatures();
float temp = sensors.getTempCByIndex(0);
Serial.println(temp);
Blynk.virtualWrite(V1, temp);
}
void sendVoltage(){
float shuntvoltage = 0;
float busvoltage = 0;
float loadvoltage = 0;
shuntvoltage = ina219.getShuntVoltage_mV();
busvoltage = ina219.getBusVoltage_V();
loadvoltage = busvoltage + (shuntvoltage / 6000);
Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V");
Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
Serial.print("Load Voltage: "); Serial.print(loadvoltage); Serial.println(" V");
Blynk.virtualWrite(V3, busvoltage, millis() / 6000);
Blynk.virtualWrite(V4, loadvoltage, millis() / 6000);
}
void loop() {
if (Connected2Blynk) {
Blynk.run();
timer.run();
sendTemps();
sendVoltage();
}
}
 

Tango

New member
void loop() {
if (Connected2Blynk) {
sendTemps();
sendVoltage();
Blynk.run();
timer.run();
}
}
Помогите пожалуста исправить код . Спасибо.
Я конечно не претендую на истинность предложения, но попробуй в конце вот так переставить..("Я не волшебник, я только учусь...")))) )
 

Tango

New member
Добрый день. Температуру нужно слать не в цикле, а в таймере - иначе если скорость считывания данных с датчика быстрая, то есп может не справится с отправкой стольких данных и будет рвать соединение. Вот пример как это можно сделать для DHT11.
Blynk Docs
Доброго всем времени!Дима, проделал операции по подключению второго телефона(Blynk2)...Я так понимаю, пока мой проект (Blynk1) запущен, то Blynk2 тоже видит, ну в данном случае температуру. Стоит его выключить, как снова потом нужно сканировать или как то брать QR-код. Я пересылал в вайбере свой код, но как его загрузить в Blynk2 так и не понял. Но задача в данном случае не в этом. Как сделать чтобы Blynk2 тоже получал с этого же датчика температуру без участия Blynk1? Двумя токенами в скетче это можно сделать?
 

Sergqxqx

New member
Спасибо Сергей за ответ. Немножко помогло перестановкой. появилось значение датчика тока. Но всеравно на телефоне через 5-10 секунд девайс оффлайн, но монитор порта показывает что сервер конектед. Может у вас или у когото есть идеи. Спасибо.
 

Hüb

New member
Вечер добрый! не подскажите как настроить на BLYNK сигнализацию. например при нажатии вирт.кнопки и при например срабатывании PIR датчика выводилось PUSH сообщение. т.е. должно быть некое условие IF AND то выводиь PUSH- подскажите плз код.
 

gydota

New member
Вечер добрый! не подскажите как настроить на BLYNK сигнализацию. например при нажатии вирт.кнопки и при например срабатывании PIR датчика выводилось PUSH сообщение. т.е. должно быть некое условие IF AND то выводиь PUSH- подскажите плз код.
Могу предложить свой код для двух пир сенсоров, можно его уменьшить до одного или наоборот увеличить. Работает в двух режимах:
1. Стандартная работа пир сенсора, тоесть при срабатьівание включается лампочка.
2. Если включить кнопку в приложение, то будет при срабатьівание слать сообщение на телефон.

Код:
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>

char auth[] = "your tocken";
char ssid[] = "your ssid";
char pass[] = "your password";

#define ledPin 16
#define pirPin 14
#define ledPin2 5
#define pirPin2 12
int pirState;
int pirState2;
int val = 0;
int val2 = 0;
int x = 0;
SimpleTimer timer;

void setup(){
  Serial.begin(115200);
  delay(10);
  Blynk.begin (auth, ssid, pass);
  pinMode(ledPin, OUTPUT);
  pinMode(pirPin, INPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(pirPin2, INPUT);
}

BLYNK_CONNECTED() {
      Blynk.syncVirtual(V0);
  }

BLYNK_WRITE(V0){
x = param.asInt();
}

void loop(){
   Blynk.run();
   pir();

  val = digitalRead(pirPin);
  val2 = digitalRead(pirPin2);
  if (val == HIGH) {digitalWrite(ledPin, HIGH);
    if (pirState == LOW) {pirState = HIGH;}
     }
     else {digitalWrite(ledPin, LOW);
    if (pirState == HIGH){pirState = LOW;}
  }
  if (val2 == HIGH) {digitalWrite(ledPin2, HIGH);
    if (pirState2 == LOW) {pirState2 = HIGH;}
     }
     else {digitalWrite(ledPin2, LOW);
    if (pirState2 == HIGH){pirState2 = LOW;}
  }
}
  void pir(){
  if (x == 1){
    if (digitalRead(pirPin) == HIGH){
Blynk.notify("ТРЕВОГА!!! Движение в зале");}
  if (digitalRead(pirPin2) == HIGH){
Blynk.notify("ТРЕВОГА!!! Движение в кухне");}
  }
  }
 

kir

New member
Возможно вопрос будет многим интересен, перепрошил Sonoff RF на Blynk и пытаюсь вернуть ему прошлую функциональность, т.е. нажатие на хардварную кнопку(gp0) - вкл./выкл. реле(gp12), нажатие на кнопку пульта(модуль 433MHz тоже использует gp0) - вкл./выкл. реле(gp12).
Получилось сделать с прерываниями, код ниже, подскажите как можно сделать чтобы от этих нажатий кнопка меняла свое состояние в приложении Blynk? Пробовал использовать BLYNK_WRITE, но это похоже сосвсем не о том.

Код:
int i = 0;
void swich()
{

if (i == 0) {digitalWrite(12, HIGH); digitalWrite(13, HIGH); i = 1; return;}
if (i == 1) {digitalWrite(12, LOW); digitalWrite(13, LOW); i = 0; return;}
 
}
void loop()
{
  Blynk.run();
  attachInterrupt(0,swich,FALLING);
 

ЮрийК

New member
помогите исправить скетч, отдельно температура измеряется и реле включается, если совместить реле не работает, температура работает
 

Вложения

ivan1945

New member
Нужна помощь , установил локальный сервер на orangepi , захожу на сервер через приложение , но не вижу токена , где мне его посмотреть?
Видео :

Буду признателен за ответы сильно не пинайте.


hardware.mqtt.port=8440
hardware.ssl.port=8441
hardware.default.port=8442
http.port=8080
https.port=9443
app.ssl.port=8443
listen.address=
server.ssl.cert=./server.pem
server.ssl.key=./server.crt
server.ssl.key.pass=123123
data.folder=
logs.folder=./logs
log.level=info
user.devices.limit=25
user.tags.limit=100
user.dashboard.max.limit=100
user.widget.max.size.limit=20
user.message.quota.limit=100
notifications.queue.limit=5000
blocking.processor.thread.pool.limit=6
notifications.frequency.user.quota.limit=15
webhooks.frequency.user.quota.limit=1000
webhooks.response.size.limit=72
user.profile.max.size=128
terminal.strings.pool.size=25
map.strings.pool.size=25
lcd.strings.pool.size=6
table.rows.pool.size=100
profile.save.worker.period=60000
stats.print.worker.period=60000
hard.socket.idle.timeout=15
enable.native.epoll.transport=false
enable.native.openssl=false
enable.db=false
enable.raw.db.data.store=false
async.logger.ring.buffer.size=2048
initial.energy=100000
#ADMINISTRATION SECTION
admin.rootPath=/admin
net.interface=eth
allowed.administrator.ips=0.0.0.0/0,::/0
admin.email=admin@blynk.cc
admin.pass=admin
allowed.users.list=
 
Последнее редактирование:

Chatlanin

New member
Можно ли со стороны устройства сделать неактивной Button. Нужда такая - управляю закрыванием открыванием двери. Процедура эта не мгновенная. Пока дверочка двигается, есть возможность жамкнуть кнопку на телефоне, несколько раз. И все это сваливается в буфер, и потом обрабатывается. Подскажите идею, как это обойти?
 

Anmiha

New member
Кто нибудь пробовал отправку маил из Blynk. Хочу сделать чтобы при снижении температуры отправлялся маил. Боле менее написал, но при достижении диапазона температуры от 35 до 40 маил постоянно отправляется и другие кнопки не работают, как только температура выйдет из диапазона все начинает работать нормально.

#define BLYNK_PRINT Serial
#define ONE_WIRE_BUS 2//датчик температуры на 2 пине

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define PIN 15 // контролируемый пин модуля с которого приходит сиграл

char auth[] = "...........";

WidgetLED led1(V3);

BlynkTimer timer;

void buttonLedWidget(){
int x = digitalRead(PIN);//читаем пин модуля
if (x == 1) {//проверим состояние
led1.on(); //вкл вирт.светодиод
}
else { //иначе выключим
led1.off();
}
}

char ssid[] = "...";
char pass[] = "...";
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup()
{

Serial.begin(9600);

Blynk.begin(auth, ssid, pass);
sensors.begin();
pinMode(PIN, INPUT_PULLUP);
timer.setInterval(500L, buttonLedWidget);
}
void sendTemps()
{
sensors.requestTemperatures();
float temp = sensors.getTempCByIndex(0);
Blynk.virtualWrite(V4, temp);

//if (temp >= 35 && temp <= 40){
// Blynk.email("................@mail.ru", "ВНИМАНИЕ низкая температура теплоносителя меньше 40С");

//}
}
void mail()
{
float sen;
sen=sensors.getTempCByIndex(0);
if (sen >= 35 && sen <= 40){

Blynk.email(".............@mail.ru", "ВНИМАНИЕ низкая температура теплоносителя меньше 40С");//отправка майла при приходе сигнала
}
}

void loop()
{
Blynk.run();
sendTemps();
mail();
timer.run();
}
 

gydota

New member
Кто нибудь пробовал отправку маил из Blynk. Хочу сделать чтобы при снижении температуры отправлялся маил. Боле менее написал, но при достижении диапазона температуры от 35 до 40 маил постоянно отправляется и другие кнопки не работают, как только температура выйдет из диапазона все начинает работать нормально.
У меня похожая ситуация только с Blynk.notify, строю сигналку на пир датчиках и при обнаружении движения начинает слать сообщения пачками, и кратковременно уходит в оффлайн. Потом где-то через минуту успокаивается.
 

Anmiha

New member
Помогли мне надо делать через прерывания и ставить таймеры на функции.


Отправка майла один раз.

void setup(){
timer.setInterval(2000L, mail);
}

void mail(){
static bool mailSent = false;
float sen=sensors.getTempCByIndex(0);
if (sen <= 45 && !mailSent) {
Blynk.email("......@mail.ru", "ВНИМАНИЕ низкая температура теплоносителя меньше 45С");
//отправка майла при приходе сигнала
mailSent = true;
}
else if (sen > 45) mailSent = false;
}
 
Последнее редактирование:

gydota

New member
И мне тоже помог такой вариант, главное нашел в официальной документации на сайте разработчика такое описание, но дело бьіло позной ночью и не мог код довести до ума, а на свежую голову обнаружилось, что не хватало всего лиш одной скобки:)
 
Сверху Снизу