BLYNK
HOME       📲 GETTING STARTED       📗 DOCS       ❓HELP CENTER       👉 SKETCH BUILDER

Button in two separate projects


#1

Hi, is it possible to insert a button in two projects and separate circuits?

example:
relay in the lock project (physically)

but I have to control it from the boiler project

To avoid switching from one project to another with the swipe


#2

Add the device and button in the second project too. There is no restriction that a device has to be part of one project only.


#3

I did not understand how to do it. If I put new device does not make me add that one already done in the project but only a new device


#4

This is not yet supported. We will do that soon, however.


#5

@eddie no, you can not take two functional devices/projects and merge them, if that is what you mean (not without manualy rebuilding one into the other).

But you can add a 2nd, 3rd, etc… device to an existing project and account for it in the App with either Device Selector / Device Tiles

You can also have a button in one project control a vPin, and thus a relay etc. in another project… using Bridge


#6

I would like to be able to control a relay in project 1 also project 2


#7

Yep


#8

ok, but the bridge I have to write in the project code where there is no physical relay, correct ???


#9

With bridge you would have sending code on the sending device and receiving code on the receiving device.

https://examples.blynk.cc/?board=ESP8266&shield=ESP8266%20WiFi&example=Widgets%2FBridge


#10

I now have a bidirectional Bridge demo at this link - C++ Blynk - Code Examples for Basic Tasks (Work in Progress)


#11

Code Device A

//Device A:

#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>


char auth[] = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
 
char ssid[] = "xxxxxxxxxxxxxxxx";
char pass[] = "xxxxxxxxxxxxxxx";

WidgetBridge bridge1(V2); //Initiating Bridge Widget on V1 of other Device
 
void setup() {
  Serial.begin(115200);
  
  pinMode(5, OUTPUT); //D1 is GPIO 5 (Relay ACS RELE IN3)
  pinMode(4, OUTPUT); //D2 is GPIO 4 (VUOTO RELE IN4) this is the relay on which to bridge
  digitalWrite(5, HIGH); //Set GPIO 14 LOW
  digitalWrite(4, HIGH); // Set GPIO 13 LOW

pinMode(14, OUTPUT); //D5 is GPIO 4 (Cancello Piccolo RELE IN2)
  pinMode(13, OUTPUT); //D7 is GPIO 13 (Cancello Grande RELE IN1)
  digitalWrite(14, HIGH); //Set GPIO 14 LOW
  digitalWrite(13, HIGH); // Set GPIO 13 LOW
 
  Blynk.begin(auth, ssid, pass);
}

BLYNK_CONNECTED() {
  bridge1.setAuthToken("bbbbbbbbbb"); // Token of the Device B
 
}

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

Code Device B

//Device B:

#include <OneWire.h>
#include <DallasTemperature.h>
#define BLYNK_PRINT Serial
#include <SPI.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

WidgetBridge bridge1(V2); //Initiating Bridge Widget on V1 of other Device

#define ONE_WIRE_BUS 2 //pin connected to DS18B20 Sensor(s) D4 on NodeMCU

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);


#include <Wire.h>
#include <VL53L0X.h>

VL53L0X sensor; //pin SCL (D1)---SDA (D2)



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

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "xxxxxxx";
char pass[] = "xxxxxxxxxxx";

BlynkTimer timer;

void myTimerEvent()
{
  // You can send any value at any time.
  // Please don't send more that 10 values per second.


  

sensors.requestTemperatures(); // Send the command to get temperatures

float temp1 = sensors.getTempCByIndex(0);
  Serial.print("Temperatura Sonda Caldaia °C: ");
  Serial.println(temp1);
 
  Blynk.virtualWrite(V10, temp1); //BLYNK Value Display set to Virtual Pin 10


  Serial.print("Livello Serbatoio in Cm: ");
  Serial.print(sensor.readRangeContinuousMillimeters()/10); // /10 serve per fare convertire in cm 
  delay(3000);

  Serial.println();

  float serb = (sensor.readRangeContinuousMillimeters()/10);

  int y = map(serb, 8, 87, 100, 0); // valori di percentuale Min 6 - Max 82 , 100 Max 0 Min

  //unsigned long temp = (sensor.readRangeContinuousMillimeters()); //per errore 6553

  //if(temp!=65535) serb=temp/10.0;


  

  Blynk.virtualWrite(V0, y); //Virtual Pin Label 
  Blynk.virtualWrite(V1, serb);    //Virtual Pin Level H
}




void setup()
{
Serial.begin(115200);

  pinMode(13, OUTPUT); //D7 is GPIO 13 
  
  digitalWrite(13, LOW); // Set GPIO 13 LOW
  
Blynk.begin(auth, ssid, pass);
  // You can also specify server:
  //Blynk.begin(auth, ssid, pass, "blynk-cloud.com", 8442);
  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8442);
  
  timer.setInterval(10000L, myTimerEvent); //Ritardo di lettura in millisecondi di tutti i sensori (10s)




  Serial.begin(115200);
  Wire.begin();

  sensor.init();
  sensor.setTimeout(500);

  // Start continuous back-to-back mode (take readings as
  // fast as possible).  To use continuous timed mode
  // instead, provide a desired inter-measurement period in
  // ms (e.g. sensor.startContinuous(100)).
  sensor.startContinuous(3000); //Ritardo di lettura del sensore in ms (3s)
}

BLYNK_CONNECTED() {
  bridge1.setAuthToken("aaaaaaaaaa"); // Token of the Device A
}

BLYNK_WRITE(V2) { // Remote LED
  bridge1.virtualWrite(4, HIGH); // take the state of the Button and send it to the Remote LED
}

void loop()
{
  

  Blynk.run();
  timer.run(); // Initiates BlynkTimer
  
}

#12

how would you like my code ??? Can it work ???


#13

probably not…

You have setup DeviceA as if you want to control something on DeviceB… but then never do.

And on DeviceB you are setup with virtual button(V2) to control a V4 pin on DeviceA… but two problems with it…

  1. it will only ever set V4 HIGH, never LOW

  2. but since you don’t even have a Blynk Function for V4 on DeviceA… nothing will happen anyhow.