如何通过互联网使用Raspberry Pi远程控制伺服电机?
用Raspberry Pi + WiFi实现手机远程控制伺服电机
完全可以实现这个需求,不用连接电脑,靠电池供电就能搞定。下面是一步步的操作说明,都是适合非专业人士的简单步骤:
一、硬件准备
- Raspberry Pi(推荐3B+/4,自带WiFi,不用额外买WiFi模块;如果是老型号,再配个USB WiFi适配器就行)
- 伺服电机(比如常见的SG90,便宜好用)
- 供电电池:5V移动电源(直接给树莓派供电,最省事),或者锂电池+5V升压模块(续航更长)
- 杜邦线若干(公对公、公对母)
- 可选:面包板(方便接线,不用焊接)
二、硬件接线(务必断电操作!)
伺服电机一般有3根线,对应树莓派引脚连接:
- 红色线(VCC):接树莓派的5V引脚(物理引脚2或4)
- 棕色/黑色线(GND):接树莓派的GND引脚(物理引脚6、9等都可以)
- 黄色/橙色线(信号):接树莓派的GPIO引脚,比如GPIO18(对应物理引脚12)
接线时一定要断电,接完检查一遍再通电,避免烧坏元件。
三、树莓派系统初始配置(不用显示器!)
- 刷系统:用官方的「Raspberry Pi Imager」工具,选择「Raspberry Pi OS Lite」(无桌面版,省资源,适合远程控制)
- 刷系统前点击「齿轮图标」做以下设置:
- 输入家里的WiFi名称和密码
- 开启SSH(允许远程登录)
- 设置自定义用户名和密码(别用默认的pi/raspberry,不安全)
- 刷完系统后把SD卡插到树莓派,接上电池,树莓派会自动连接WiFi。
- 找树莓派的IP:登录家里的路由器后台,在「已连接设备」里找树莓派的IP地址(名字一般是raspberrypi开头)
四、远程连接树莓派并安装依赖
用手机APP(比如Termius)或者电脑的SSH工具连接树莓派,输入刚才的IP、用户名和密码。
连接成功后,先更新系统并安装控制伺服的库:
sudo apt update && sudo apt install pigpio python3-pigpio -y
然后启动pigpio服务并设置开机自启:
sudo systemctl enable pigpiod sudo systemctl start pigpiod
五、编写远程控制代码
创建一个Python脚本,比如server.py:
import pigpio from http.server import BaseHTTPRequestHandler, HTTPServer # 初始化GPIO pi = pigpio.pi() SERVO_PIN = 18 # 对应刚才接线的GPIO引脚 pi.set_mode(SERVO_PIN, pigpio.OUTPUT) # 伺服电机角度转脉冲宽度(SG90的范围大概500-2500) def angle_to_pulse(angle): return 500 + (angle / 180) * 2000 class RequestHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() # 解析请求路径 if self.path.startswith('/set'): # 比如/set?angle=90 params = self.path.split('?')[1] angle = int(params.split('=')[1]) if 0 <= angle <= 180: pi.set_servo_pulsewidth(SERVO_PIN, angle_to_pulse(angle)) self.wfile.write(f"设置角度为{angle}度".encode()) else: self.wfile.write("角度范围只能是0-180度".encode()) elif self.path == '/stop': pi.set_servo_pulsewidth(SERVO_PIN, 0) # 停止电机供电 self.wfile.write("伺服电机已停止".encode()) else: self.wfile.write("可用指令:<br>/set?angle=xx(0-180)<br>/stop".encode()) if __name__ == '__main__': server_address = ('', 8000) httpd = HTTPServer(server_address, RequestHandler) print("服务器启动,端口8000") httpd.serve_forever()
运行脚本:
python3 server.py
现在树莓派上的HTTP服务器就启动了,端口是8000。
六、实现手机远程访问(内网穿透)
因为树莓派在你家的内网里,上班时在外网没法直接访问,需要用内网穿透工具,比如ngrok(免费版足够测试):
- 在树莓派上下载ngrok:
wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-arm.tgz tar -xvzf ngrok-v3-stable-linux-arm.tgz - 注册ngrok账号,获取authtoken,然后在树莓派上设置:
./ngrok config add-authtoken 你的authtoken - 启动内网穿透,把8000端口映射到公网:
启动后会看到一个类似./ngrok http 8000https://xxxx-xx-xx-xx-xx.ngrok.io的公网地址,复制下来。
七、手机控制伺服电机
打开手机浏览器,访问刚才的ngrok地址:
- 转到90度:
https://xxxx.ngrok.io/set?angle=90 - 转到0度:
https://xxxx.ngrok.io/set?angle=0 - 停止电机:
https://xxxx.ngrok.io/stop
如果觉得输入URL麻烦,可以自己写个简单的HTML页面,存到手机里,点击按钮就能控制:
<!DOCTYPE html> <html> <body> <button onclick="sendRequest('/set?angle=0')">0度</button> <button onclick="sendRequest('/set?angle=90')">90度</button> <button onclick="sendRequest('/set?angle=180')">180度</button> <button onclick="sendRequest('/stop')">停止</button> <script> function sendRequest(path) { fetch('https://xxxx.ngrok.io' + path) .then(res => res.text()) .then(msg => alert(msg)); } </script> </body> </html>
注意事项
- 供电要稳定:如果伺服电机动作时树莓派重启,说明供电不足,换个电流大的移动电源。
- 长期使用:可以把
server.py设置成开机自启(比如用systemd服务);另外可以用动态DNS替代ngrok,避免每次重启ngrok域名变化。 - 安全问题:如果长期暴露公网,建议给HTTP服务器加密码验证,或者用VPN连接家里的内网,更安全。
内容的提问来源于stack exchange,提问作者Yusuff
相关产品推荐
相关产品推荐

