完成读取缓冲区后,ESP32蓝牙连接断开

时间:2019-06-07 16:33:13

标签: c bluetooth arduino disconnect esp32

我正在对ESP32进行编程以接受蓝牙命令,并使用串行配置文件将蓝牙数据发送回我的手机。为此,我正在使用Arduino Espressif蓝牙串行库。每当我向ESP32发送东西时,它都会对其进行处理,然后突然关闭Bluetooth连接。

据我所知,我已经尝试了各种延迟,因为我认为处理器可能由于崩溃而无法跟上其他工作。 但是,当通过USB使用串行连接进行监视时,它仍会继续发送状态更新。 除此之外,我找不到真正的解决方案(也在Internet上)。

由于我几乎是初学者,所以我不想尝试构建自己的串行蓝牙库。 发送数据时,ESP不会崩溃。它还会继续处理已发送的数据。收集到字符后,我可以看到它是通过串行接口通过蓝牙通过蓝牙发送的。

此事件之后,无论我等待多长时间,都无法重建连接。

我的Main函数,其中包含函数调用以及将结果写入其中的缓冲区,因为我认为我可能是在滥用它。

void loop() {

  if (ESP_BT.available() > 0)
  {
    char *buffer = (char*) malloc(InputSize);
    getCurrentMessage(ESP_BT, buffer, InputSize);
    Serial.println(buffer);
    strncpy(currentMessage, buffer, InputSize);
    free(buffer);
  }
  if (millis() %2000 == 0){
    Serial.println("Debug");
    delay(1);
  }
} 

被调用的函数应将BluetoothSerial的inputBuffer读取到我的缓冲区中。

void getCurrentMessage(BluetoothSerial ESP_BT, char* receivedChars, int InputSize)
{
 Serial.println("DEBUG: getCurrentMessageInit");
 static byte ndx = 0;

 char rc;

 while (ESP_BT.available() > 0){
   ESP_BT.println("DEBUG: Message Available");    
   Serial.println("DEBUG: Message Available");
   rc = ESP_BT.read();
   receivedChars[ndx] = rc;
   ndx++;
   delay(100);
   if (ndx >= InputSize){
     while(ESP_BT.available() > 0){
       ESP_BT.read();
     }
   }
 }
} 

我希望蓝牙连接能够继续工作。这是不行的。 我还收到错误代码“ queue.c:1442(xQueueGenericReceive)-断言失败!”不使用延迟时,ESP然后重新启动。 在添加延迟之后,它不会执行此操作。

1 个答案:

答案 0 :(得分:0)

问题是我没有通过引用调用我的Bluetooth对象。 与其给我蓝牙对象一个功能,不如指向它:

void getCurrentMessage(BluetoothSerial* ESP_BT, char* receivedChars, int InputSize)
{
 Serial.println("DEBUG: getCurrentMessageInit");
 static byte ndx = 0;

 char rc;

 while (ESP_BT->available() > 0){
   ESP_BT->println("DEBUG: Message Available");    
   Serial.println("DEBUG: Message Available");
   rc = ESP_BT.read();
   receivedChars[ndx] = rc;
   ndx++;
   delay(100);
   if (ndx >= InputSize){
     while(ESP_BT->available() > 0){
       ESP_BT->read();
     }
   }
 }
}