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

ESP32+HC-SR04通过Node-RED存MQTT数据到MySQL遇错误,求解决

问题分析与解决

错误1:Function节点语法错误(SyntaxError: Unexpected identifier 'src')

问题出在两处:

  • 变量赋值错误:Node-RED中必须通过msg.payload获取消息负载,直接写payload会导致src变量未定义。
  • SQL语句拼接错误:你用单引号包裹src,导致它被识别为字符串字面量而非变量,同时单引号嵌套也触发了语法错误。

修正后的Function节点代码:

var src = msg.payload;
// 用模板字符串拼接SQL
msg.topic = `INSERT INTO transaction_log (distance,Timestamp) VALUES (${src}, CURTIME());`;
return msg;

或者使用传统字符串拼接方式:

var src = msg.payload;
msg.topic = "INSERT INTO transaction_log (distance,Timestamp) VALUES (" + src + ", CURTIME());";
return msg;

错误2:JSON节点解析错误(Unexpected end of JSON input)

ESP32发布的MQTT消息是纯数值字符串(如"19.18"),并非标准JSON格式,但流程中的JSON节点会尝试将输入解析为JSON对象,纯数值字符串不符合解析要求,因此报错。

解决方法二选一:

  • 方案一:移除流程中的JSON节点,让MQTT输入的消息直接进入Function节点;
  • 方案二:修改ESP32代码,发布JSON格式的消息:
// 替换原publish代码
char jsonBuffer[64];
snprintf(jsonBuffer, sizeof(jsonBuffer), "{\"distance\":%.2f}", distanceCm);
client.publish("distance", jsonBuffer);

此时Function节点代码需对应调整为:

var src = msg.payload.distance;
msg.topic = `INSERT INTO transaction_log (distance,Timestamp) VALUES (${src}, CURTIME());`;
return msg;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:13:20