Problems with bluetooh + mqtt

filipesdkerplunk
Posts: 5
Joined: Mon Oct 18, 2021 6:57 pm

Problems with bluetooh + mqtt

Postby filipesdkerplunk » Wed Oct 27, 2021 8:04 pm

Hello!

I'm trying to work with serial bluetooth and wifi+mqtt, but I'm having problems:

Code: Select all

#include "BluetoothSerial.h"
#include <WiFi.h>
#include <PubSubClient.h>
#include <WiFiClient.h>

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif

BluetoothSerial SerialBT;
String msgB;
String usermqtt;
const char* mqtt_server = "XXX.XXX.XXX.123";

WiFiClient wifiClient;
PubSubClient client(wifiClient);

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32test"); //Bluetooth device name
  Serial.println("The device started, now you can pair it with bluetooth!");
  if (WiFi.begin("SSID", "pass")) {
    client.setServer(mqtt_server, 1883);
    client.setBufferSize(30000);
    client.setCallback(callback);
    client.setKeepAlive(90);
  }

  usermqtt = "esp32/user/777";
}

void loop() {
  verificaMqtt();
  client.loop();
  if (Serial.available()) {
    SerialBT.write(Serial.read());
  }
  /*if (SerialBT.available()) {
    Serial.write(SerialBT.read());
    }*/
  if (SerialBT.available() > 0) {
    msgB = "";
    while (SerialBT.available() > 0) {
      char ch = SerialBT.read();
      msgB += ch;
      delay(5);
    }
    Serial.println("Mensagem:");
    Serial.println(msgB);
    Serial.println("Tamanho:");
    Serial.println(msgB.length());

    if (msgB == "page0") {
      Serial.println("Enviando...");
      sendMsg("page0ok");
    }
    else if (msgB == "page1") {
      Serial.println("Enviando...");
      sendMsg("page1ok");
    }
  }

  if (!SerialBT.hasClient()) {
    Serial.println("NAO CONECTADO");
  }
  delay(20);
}


void sendMsg(String a)
{
  uint8_t buf[a.length()];
  memcpy(buf, a.c_str(), a.length());
  SerialBT.write(buf, a.length());
}

void verificaMqtt()
{
  if (!client.connected())
  {
    Serial.println(F("DESCONECTOU MQTT, CONECTANDO NOVAMENTE"));
    connectMqtt();
  }
}


void connectMqtt() {

  if (client.connect(usermqtt.c_str(), "user", "pass1234")) {
    //Serial.println(F("conectado!"));
    String sub = "topic1/lyme3";
    if (client.subscribe(sub.c_str())) {
      Serial.println(F("Se inscreveu no tópico"));
      Serial.println(sub);
    }
  } else {
    Serial.print("falha, erro =");
    Serial.print(client.state());
  }
}

void  callback(char* topic, unsigned char* message, unsigned int length) {
  Serial.print("Mensagem chegou no topico: ");
  Serial.print(topic);
  Serial.print(". Mensagem: ");
  String messageTemp;
  for (int i = 0; i < length; i++) {
    messageTemp += (char)message[i];
  }
  messageTemp = "";
}
When loading this sketch, the wifi, bluetooth and mqtt connections are made without error, but I don't receive anything from the topic I subscribe to. And after a while the mqtt connection starts to wobble, then it disconnects and connects again, then disconnects and so on. But in this same sketch, if I take the Bluetooth functionality out of the code, the mqtt works without any problem. The mqtt connection does not drop and I receive messages normally.

Can anyone help me?

tommeyers
Posts: 184
Joined: Tue Apr 17, 2018 1:51 pm
Location: Santiago, Dominican Republic

Re: Problems with bluetooh + mqtt

Postby tommeyers » Wed Oct 27, 2021 9:32 pm

Google: esp32 wifi Bluetooth coexist

I saw a relevant setting to permit it.

Tom
IT Professional, Maker
Santiago, Dominican Republic

Who is online

Users browsing this forum: MicroController and 95 guests