Select connection Type via Switch

It seems that the 2 libraries can’t coexist. So that solution isn’t feasible, unless some modifications are done to the libs. I’ll try to find out a workaround, if possible.

Currently, using BT only is the only better solution for both scenarios.

Update
I just had a quick look, and it’s possible but IMHO, it’ll require a drastic change in the library to support this double-dip feature. I don’t feel this change is worthy now.

Update
Just find out the quick solution where you can run either BT or WiFi, selectable by GPIO14 switch. The code is much larger (almost 400K more for additional Blynk instance: 1272994 bytes compared to 888707 bytes for BT only)

This is the terminal output of the same program

  1. BT
GPIO14 LOW, Use BT
[251] 
    ___  __          __
   / _ )/ /_ _____  / /__
  / _  / / // / _ \/  '_/
 /____/_/\_, /_//_/_/\_\
        /___/ v0.6.1 on ESP32

cpm = 0 - Dosisrate = 0.00uSv/h - Equivalenz = 0.0000uSv
cpm = 0 - Dosisrate = 0.00uSv/h - Equivalenz = 0.0000uSv
cpm = 0 - Dosisrate = 0.00uSv/h - Equivalenz = 0.0000uSv
cpm = 0 - Dosisrate = 0.00uSv/h - Equivalenz = 0.0000uSv
...

  1. Reboot with GPIO14 HIGH
GPIO14 HIGH, Use WiFi
[251] Connecting to HueNet1
[4825] Connected to WiFi
[4825] IP: 192.168.2.109
[4825] 
    ___  __          __
   / _ )/ /_ _____  / /__
  / _  / / // / _ \/  '_/
 /____/_/\_, /_//_/_/\_\
        /___/ v0.6.1 on ESP32

[4831] BlynkArduinoClient.connect: Connecting to blynk-cloud.com:80
[4912] Ready (ping: 24ms).

cpm = 0 - Dosisrate = 0.00uSv/h - Equivalenz = 0.0000uSv
cpm = 0 - Dosisrate = 0.00uSv/h - Equivalenz = 0.0000uSv
cpm = 0 - Dosisrate = 0.00uSv/h - Equivalenz = 0.0000uSv
cpm = 0 - Dosisrate = 0.00uSv/h - Equivalenz = 0.0000uSv
cpm = 0 - Dosisrate = 0.00uSv/h - Equivalenz = 0.0000uSv

There must be simple mods in Blynk library, and I don’t know If you can modify them.
So I’ll post later on GitHub.

This is the modified code

#define BLYNK_PRINT Serial

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define BLYNK_USE_BT_ONLY      false //true

#if BLYNK_USE_BT_ONLY
#include <BlynkSimpleEsp32_BT_WF.h>
#else
#include <BlynkSimpleEsp32_BT_WF.h>
#include <BlynkSimpleEsp32_WF.h>
#define switch      14           // Pin D14 mapped to pin GPIO14/HSPI_SCK/ADC16/TOUCH6/TMS of ESP32
char ssid[] = "SSID";
char pass[] = "PASS";
#endif

char auth[] = "****";

#define CONV_FACTOR 0.00658
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
#define OLED_RESET     4

int geiger_input = 18;
float voltage = 0;
long count = 0;
long countPerMinute = 0;
long timePrevious = 0;
long timePreviousMeassure = 0;
long _time = 0;
long countPrevious = 0;
float radiationValue = 0.0;
volatile unsigned long last_micros;
long debouncing = 4200;
float radiationDose = 0;

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
BlynkTimer timer;

bool USE_BT = true;

void setup()
{
  pinMode(geiger_input, INPUT);

  Serial.begin(115200);
  attachInterrupt(geiger_input, countPulse, HIGH);
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  display.display();
  delay(200);
  display.clearDisplay();

#if BLYNK_USE_BT_ONLY
  Blynk_BT.setDeviceName("Geigercounter");
  Blynk_BT.begin(auth);
#else

  
  
  if (digitalRead(switch) == HIGH)
  {
    Serial.println(F("GPIO14 HIGH, Use WiFi"));
    Blynk.begin(auth, ssid, pass);
    USE_BT = false;
  }
  else
  {
    Serial.println(F("GPIO14 LOW, Use BT"));
    Blynk_BT.setDeviceName("Geigercounter");
    Blynk_BT.begin(auth);
  }
#endif

  timer.setInterval(5000L, sendDatatoBLClient);
}

void checkStatus()
{
  static float voltage;

  if (millis() - timePreviousMeassure > 20000)
  {
    countPerMinute = 3 * count;
    radiationValue = countPerMinute * CONV_FACTOR;
    radiationDose = radiationDose + (radiationValue / float(240.0));
    timePreviousMeassure = millis();

    // can optimize this calculation
    voltage = (float)analogRead(36) / 4096 * 4.2 * (3667 / 3300);

    if (radiationDose > 99.999)
    {
      radiationDose = 0;
    }

    Serial.print("cpm = ");
    Serial.print(countPerMinute, DEC);
    Serial.print(" - ");
    Serial.print("Dosisrate = ");
    Serial.print(radiationValue, 2);
    Serial.print("uSv/h");
    Serial.print(" - ");
    Serial.print("Equivalenz = ");
    Serial.print(radiationDose, 4);
    Serial.println("uSv");

    display.setCursor(0, 0);
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.print(countPerMinute, DEC);
    display.setCursor(40, 0);
    display.print("CPM");
    display.setCursor(0, 10);
    display.print(radiationDose, 3);
    display.setCursor(40, 10);
    display.print("uSv");
    display.setCursor(0, 20);
    display.println(voltage, 2);
    display.setCursor(40, 20);
    display.println("V");

    if ((radiationValue, 2) < 9.99)
    {
      display.setTextSize(2);
    }
    else
    {
      display.setTextSize(1);
    }

    display.setCursor(65, 10);
    display.print(radiationValue, 2);
    display.setTextSize(1);
    display.setCursor(90, 25);
    display.print("uSv/h");
    display.display();
    //delay(2000);


    count = 0;
  }
}

void loop()
{
  if (USE_BT)
    Blynk_BT.run();
  else
    Blynk.run();

  timer.run();
  checkStatus();
}

void countPulse() {
  if ((long)(micros() - last_micros) >= debouncing) {
    Puls();
    last_micros = micros();
  }
}
void Puls() {
  count++;
}

void sendDatatoBLClient()
{
  if (USE_BT)
  {
    Blynk_BT.virtualWrite(V1, countPerMinute);
    Blynk_BT.virtualWrite(V2, countPerMinute);
    Blynk_BT.virtualWrite(V3, radiationValue);
    Blynk_BT.virtualWrite(V4, radiationValue);
    Blynk_BT.virtualWrite(V5, radiationDose);
    Blynk_BT.virtualWrite(V6, radiationDose);
    Blynk_BT.virtualWrite(V7, voltage);
    Blynk_BT.virtualWrite(V8, voltage);
  }
  else
  {
    Blynk.virtualWrite(V1, countPerMinute);
    Blynk.virtualWrite(V2, countPerMinute);
    Blynk.virtualWrite(V3, radiationValue);
    Blynk.virtualWrite(V4, radiationValue);
    Blynk.virtualWrite(V5, radiationDose);
    Blynk.virtualWrite(V6, radiationDose);
    Blynk.virtualWrite(V7, voltage);
    Blynk.virtualWrite(V8, voltage);
  }
}

Update

Just posted on GitHub. Please give it a try and let us know.

1 Like