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

ESP8266项目:WebSocket传输RGB值无法实时更新颜色框求助

解决方案

问题根源

你之前尝试的类型转换逻辑完全错误,比如Integer.valueOf((String) "Rvalue")是把字符串"Rvalue"(不是接收到的实际数值)转成整数,这会直接导致NaN或者报错,中断后续代码执行,进而让RGB值也无法正常显示。实际上ESP发送的JSON里的Rvalue/Gvalue/Bvalue本身就是数字类型,前端解析后可以直接使用。

修正后的前端代码

把WebSocket的onmessage函数改成下面这样,直接使用解析后对象里的数值来更新CSS变量:

websock.onmessage = function(event) {
  var obj = JSON.parse(event.data);
                
  document.getElementById('Rvalue').innerHTML = obj.Rvalue;
  document.getElementById('Gvalue').innerHTML = obj.Gvalue;
  document.getElementById('Bvalue').innerHTML = obj.Bvalue;

  const root = document.documentElement;
  // 直接拼接接收到的RGB数值
  root.style.setProperty('--box-color', `${obj.Rvalue}, ${obj.Gvalue}, ${obj.Bvalue}`);
}

关键说明

  1. ESP端发送的JSON数据是正确的,random(100)生成的是数字,序列化后JSON里的对应字段也是数字类型,所以前端JSON.parse后obj.Rvalue直接是可用的数字,不需要任何额外转换。
  2. 你之前错误的类型转换代码(比如引用不存在的jsonObj、硬编码字符串转数字)会引发JavaScript错误,导致代码执行到那里就停止,所以连RGB数值的更新都会被中断,移除这些错误代码即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:02:40