STM32+OneNET 智能家居项目踩坑全记录:数据不显示、更新慢、步长校验全解析
一、OneNET 数据更新极慢2 分钟才刷新一次问题现象代码里设置的是timeCount200约 5 秒发送一次数据结果 OneNET 平台要 2 分钟才更新一次完全不实时。根因分析主循环耗时严重原本以为 5 秒发送一次结果主循环一次就跑了近 300ms200 次就是 60 秒加上网络波动直接变成 2 分钟现象:OneNET 数据更新极慢2 分钟才刷新一次紧急修复5 分钟见效立刻降到 2 秒内更新删除致命延时删掉主循环里的HAL_Delay(100)删掉 MQ2/MQ5 函数里的HAL_Delay(5)DMA ADC 是连续转换不需要延时删除重复传感器读取主循环里重复读 DHT11、BH1750直接删掉只在发送块读一次缓存变量复用OLED 显示、自动模式直接用全局缓存的mq2_ppm_cache/mq5_ppm_cache不用每次都调用采样函数缩短发送间隔把timeCount200改成timeCount100发送间隔从 5 秒降到 2 秒。彻底优化1 秒精准更新零波动用定时器做定时任务彻底摆脱主循环耗时的影响配置 TIM3 定时器1ms 中断一次做软件定时器中断里只做标志位主循环里检测标志位定时发送数据、刷新 OLED主循环只处理 ESP8266 接收、按键、语音、自动模式无阻塞操作。二、大坑 3OneNET 物模型步长设置踩坑0.5 收不到0.1 能收到问题现象MQ2/MQ5 的物模型步长设置为 0.5 时OneNET 完全收不到数据改成 0.1 后立刻正常显示。根因分析OneNET 物模型有严格的步长校验规则设备上传的数值必须是「步长的整数倍」否则平台会直接判定为「非法数据」直接丢弃不会存储、不会显示结合我的场景拆解代码里用%.1f格式化数据上传的是1 位小数的数值比如 92.4、40.6最小单位是 0.1步长 0.5 时92.4 ÷ 0.5 184.8不是整数不满足校验规则数据被丢弃步长 0.1 时92.4 ÷ 0.1 924整数满足校验规则数据正常接收解决方案 最优设置1. 步长设置核心原则步长必须和代码上传的数值精度完全匹配确保上传的数值都是步长的整数倍3. 绝对避坑提醒不要用 0.5、0.2 这种和上传精度不匹配的步长会导致大量数据被丢弃不要用 0.01 这种远小于传感器精度的步长MQ2/MQ5 的测量精度只有 ±5% FS0.01PPM 完全超出能力只会上传噪声。注:调试技巧手动上传测试数据验证规则步长 0.5 时上传 92.50.5 的整数倍看能不能收到再上传 92.4验证校验规则快速定位问题
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2481246.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!