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
- 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
...
- 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.