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

树莓派Node.js连续舵机控制异常求助:多次操作后失控

解决树莓派Node.js连续舵机失控问题

这问题我之前帮朋友排查过类似的,大概率是请求处理时的资源泄漏或者未正确响应导致的,咱们一步步来解决:

1. 最可能的原因:未响应POST请求导致连接耗尽

你的POST处理函数里只调用了m1.servoWrite(),但没有给客户端返回响应。这样每次前端发送请求后,都会处于pending状态,服务器的连接资源会被逐渐占满,几次操作后新的请求根本无法到达服务器,看起来就像舵机不响应指令了。

修复代码:

给每个POST处理添加响应,释放连接:

const express = require('express'),
      GPIO = require('pigpio').Gpio,
      app = express(),
      http = require('http').createServer(app);

var m1 = new GPIO(10, { mode: GPIO.OUTPUT });

app.post('/fb', (req, res) => {
  m1.servoWrite(700);
  res.sendStatus(200); // 关键:响应请求,释放服务器连接
});

app.post('/fbTerm', (req, res) => {
  m1.servoWrite(1500);
  res.sendStatus(200); // 必须添加响应
});

2. 进阶调试:添加详细日志定位问题

如果添加响应后还是有问题,建议在每个指令处添加带时间戳的日志,确认请求是否真的到达服务器:

app.post('/fb', (req, res) => {
  const timestamp = new Date().toISOString();
  console.log(`[${timestamp}] 收到前进请求,发送舵机信号:700`);
  m1.servoWrite(700);
  res.sendStatus(200);
});

app.post('/fbTerm', (req, res) => {
  const timestamp = new Date().toISOString();
  console.log(`[${timestamp}] 收到停止请求,发送舵机信号:1500`);
  m1.servoWrite(1500);
  res.sendStatus(200);
});
  • 如果日志不再输出:说明请求没到服务器,检查前端防抖/节流,或者网络连接问题
  • 如果日志正常输出但舵机没反应:可能是pigpio库的资源问题,尝试重启Node服务,或者更新pigpio:npm install pigpio@latest

3. 额外注意事项

  • 运行权限:控制GPIO需要root权限,确保你是用sudo node your-app.js启动服务的
  • 舵机信号频率:连续快速发送指令可能导致GPIO队列溢出,前端可以加个防抖(比如按下后100ms内只触发一次请求),避免短时间内大量指令堆积

先试试第一步的修复,这应该是90%的概率能解决你的问题。

内容的提问来源于stack exchange,提问作者Ank i zle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:13:06