Blynk Bridge Widget czyli przepływ danych między urządzeniami

Bridge Widget to świetne narzędzie do komunikacji między różnymi urządzeniami IoT w ramach projektu BLYNK.

Pobiera on wirtualny pin (dowolny, który zadeklarujemy) i zamienia go w kanał do sterowania innym urządzeniem. Oznacza to, że możemy z jednej płytki sterować dowolnymi cyfrowymi, analogowymi lub wirtualnymi pinami drugiej. Trzeba tylko znać jej kod autentyczności. Kody są banalnie proste. Podobno to najrzadziej używany widget. Nie mam pojęcia dlaczego.

Komunikacja master -> slave

KOD dla master:

/*************************************************************

  Control another device using Bridge widget!

  Bridge is initialized with the token of any (Blynk-enabled) device.
  After that, use the familiar functions to control it:
    bridge.digitalWrite(8, HIGH)
    bridge.digitalWrite("A0", LOW) // <- target needs to support "Named pins"
    bridge.analogWrite(3, 123)
    bridge.virtualWrite(V1, "hello")
 *************************************************************/


#define BLYNK_PRINT Serial

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

#include "config2.h" //auth, ssid, pass

// The first bridge widget on virtual pin 51
WidgetBridge bridge1(V51);
// The second bridge widget on virtual pin 52
WidgetBridge bridge2(V52);

// Timer for blynking
BlynkTimer timer;

static bool value = true;
void blynkAnotherDevice() // Here we will send HIGH or LOW once per second
{
  // Send value to another device
  if (value) {
    bridge1.digitalWrite(2, HIGH);  // Digital Pin 2 (LED) włączona na pierwszym urządzeniu
    bridge1.virtualWrite(V5, 1); // Sends 1 value to BLYNK_WRITE(V5) handler on receiving side.
    bridge2.digitalWrite(13, HIGH); // Digital Pin 13 - stan wysoki na drugim urządzeniu
  } else {
    bridge1.digitalWrite(2, LOW); // Digital Pin 9 on the second board will be set LOW
    bridge1.virtualWrite(V5, 0); // Sends 0 value to BLYNK_WRITE(V5) handler on receiving side.
    bridge2.digitalWrite(13, LOW); // Digital Pin 13 - stan niski na drugim urządzeniu
  }
  // Toggle value
  value = !value;
}

BLYNK_CONNECTED() {
  bridge1.setAuthToken("..........."); // Wpisz AuthToken pierwszego urządzenia
  bridge2.setAuthToken("..........."); // Wpisz AuthToken drugiego urządzenia
}

void setup()
{
  // Debug console
  Serial.begin(9600);

  Blynk.begin(auth, ssid, pass);

  // Call blynkAnotherDevice every second
  timer.setInterval(1000L, blynkAnotherDevice);
}

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

KOD dla slave:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>

#include "config.h" //auth, ssid, pass

// This code will update the virtual port 5
BLYNK_WRITE(V5) {
  int pinData = param.asInt();
  Serial.print(pinData);
}

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

  Blynk.begin(auth, ssid, pass);

}

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

Komunikacja w obie strony

Urządzenie A

// Urządzenie A

/*************************************************************

  Control another device using Bridge widget!

  Bridge is initialized with the token of any (Blynk-enabled) device.
  After that, use the familiar functions to control it:
    bridge.digitalWrite(8, HIGH)
    bridge.digitalWrite("A0", LOW) // <- target needs to support "Named pins"
    bridge.analogWrite(3, 123)
    bridge.virtualWrite(V1, "hello")
 *************************************************************/

#define BLYNK_PRINT Serial

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

#include "config.h" //auth, ssid, pass

// Bridge widget on virtual pin 100
WidgetBridge bridge1(V100);

// Timer for blynking
BlynkTimer timer;

static bool value = true;
void blynkAnotherDevice() 
{
  // Send value to another device
  if (value) {
    bridge1.digitalWrite(2, HIGH);  // D1 mini zapala LED na pinie 2 gdy dostaje niski poziom
    bridge1.virtualWrite(V5, "Wyłączone \n"); 
  } else {
    bridge1.digitalWrite(2, LOW); // Digital Pin 9 on the second board will be set LOW
    bridge1.virtualWrite(V5, "Włączone \n"); 
  }
  // Toggle value
  value = !value;
}

BLYNK_CONNECTED() {
  bridge1.setAuthToken("A4GDZ4YWnRfmGTQlebAEUV1hghRMlSk-"); // Place the AuthToken of the second hardware here
}

BLYNK_WRITE(V8) {
  String pinData = param.asString();
  Serial.print(pinData);
}

void setup()
{
  // Debug console
  Serial.begin(9600);

  //Blynk.begin(auth, ssid, pass);

  Blynk.begin(auth, ssid, pass, IPAddress IPA); // serwer lokalny

  // Call blynkAnotherDevice every 3 second
  timer.setInterval(3000L, blynkAnotherDevice);
}

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

Urządzenie B

// Urządzenie B


#define BLYNK_PRINT Serial

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

#include "config.h" //auth, ssid, pass


WidgetBridge bridge1(V100);

BlynkTimer timer;

static bool value = true;
void sendMessage(){
  if (value){
  bridge1.virtualWrite(V8, "Komunikat ");
  }else{
  bridge1.virtualWrite(V8, "zwrotny.\n");  
  }
  value=!value;
}

// This code will update the virtual port 5
BLYNK_WRITE(V5) {
  String pinData = param.asString();
  Serial.print(pinData);
}

BLYNK_CONNECTED() {
  bridge1.setAuthToken("ekkoLIeyEgwhbMJ0KW53Hhk4X4q3nJ8R"); // Place the AuthToken of the second hardware here
}

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

  //Blynk.begin(auth, ssid, pass, IPAddress(192,168,0,5), 8080);
    Blynk.begin(auth, ssid, pass, IPAddress IPA);

    timer.setInterval(3000L, sendMessage);

}

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

Blynk Example

LINK

Dodaj komentarz