You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32向Firebase实时数据库发送条码数据报错:无法解析JSON

解决Firebase实时数据库写入条码数据时的JSON解析错误

问题根源是扫描器返回的条码字符串包含隐藏的换行/回车字符(比如\r),这些字符导致Firebase无法正确解析JSON格式的数据,而你测试的固定字符串"Hello"没有这类多余字符,所以可以正常写入。

修复步骤

对读取到的条码字符串进行修剪,移除首尾的空白字符(包括换行、回车、空格等),直接使用String类的trim()方法即可:

修改代码中读取条码的行:

String barcodeData = scannerSerial.readStringUntil('\n').trim();

调试验证(可选)

如果想确认字符串中是否存在隐藏字符,可以添加以下代码打印字符串长度和每个字符的ASCII值:

Serial.println("Barcode length: " + String(barcodeData.length()));
for (int i = 0; i < barcodeData.length(); i++) {
  Serial.print("Char " + String(i) + ": ");
  Serial.println((int)barcodeData[i]);
}

正常的条码字符ASCII值应该在可打印范围内(32~126),如果出现13(回车\r)或10(换行\n),就说明是这些字符导致的问题。

修改后的完整loop函数

void loop(){
  if (scannerSerial.available() > 0) { 
    String barcodeData = scannerSerial.readStringUntil('\n').trim();

    Serial.println(barcodeData); 
    Serial.println("Barcode: " + barcodeData);

    if (Firebase.ready() && signupOK && (millis() - sendDataPrevMillis > 15000 || sendDataPrevMillis == 0)){
      sendDataPrevMillis = millis();
      
      // Write on the database path test/int
      if (Firebase.RTDB.setString(&fbdo, "test/int", barcodeData)){
        Serial.println("PASSED");
        Serial.println("PATH: " + fbdo.dataPath());
        Serial.println("TYPE: " + fbdo.dataType());
        Serial.println("Barcode: " + barcodeData);
        digitalWrite(ledPinGreen, HIGH);
        delay(2000);
        digitalWrite(ledPinGreen, LOW);
      } else {
        Serial.println("FAILED");
        Serial.println("REASON: " + fbdo.errorReason());
        digitalWrite(ledPinRed, HIGH);
        delay(2000);
        digitalWrite(ledPinRed, LOW);
      }
    }
  }
}

内容的提问来源于stack exchange,提问作者user21007637

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 06:17:23