我正在对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然后重新启动。 在添加延迟之后,它不会执行此操作。
答案 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();
}
}
}
}