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

NodeMCU ESP8266向Ubidots发送多变量无数据问题求助

问题排查与解决方案

核心错误原因

你的payload拼接逻辑错误,生成的JSON格式非法,Ubidots平台无法正常解析,因此返回“未找到信息”提示,具体错误点如下:

  • 拼接第二个变量时直接覆盖了已写入的第一个变量内容:完成第一个变量ecgmoy的内容写入后,代码直接调用sprintf(payload, "{\"%s\":", VARIABLE_LABEL_2);,sprintf会清空目标字符串原有内容再写入,直接丢失了第一个变量的数据。
  • 变量间缺少JSON要求的逗号分隔符,就算未覆盖内容,多个键值对无分隔也会导致JSON解析失败。

修正后的代码

将原有数据发送段的payload拼接逻辑替换为以下内容即可:

dtostrf(ecgmoy, 4, 2, str_val_1);
dtostrf(spo2, 4, 2, str_val_2);
dtostrf(heartRate, 4, 2, str_val_3);
// 拼接topic
sprintf(topic, "%s", ""); 
sprintf(topic, "%s%s", "/v1.6/devices/", DEVICE_LABEL); 
// 按合法JSON格式拼接payload
sprintf(payload, "%s", "");
sprintf(payload, "{\"%s\": {\"value\": %s},", VARIABLE_LABEL_1, str_val_1);
sprintf(payload, "%s \"%s\": {\"value\": %s},", payload, VARIABLE_LABEL_2, str_val_2);
sprintf(payload, "%s \"%s\": {\"value\": %s}}", payload, VARIABLE_LABEL_3, str_val_3);

// 调试用:串口打印payload校验格式,调试完成后可删除
Serial.print("生成的payload:");
Serial.println(payload);

Serial.println("Publishing data to Ubidots Cloud");
client.publish(topic, payload);
client.loop();  
delay(10);

额外注意事项

需要保证定义payload字符数组的长度足够容纳所有拼接后的内容,避免缓冲区溢出导致数据异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:24:03