0

0

php控制舵机角度怎么调_php发送pwm信号控制舵机转动【解答】

絕刀狂花

絕刀狂花

发布时间:2026-01-01 20:14:03

|

266人浏览过

|

来源于php中文网

原创

PHP无法直接输出稳定PWM信号控制舵机,必须借助pigpio等底层库;推荐用PHP通过socket调用pigpiod服务,或以Python脚本为中间层执行exec调用。

php控制舵机角度怎么调_php发送pwm信号控制舵机转动【解答】

PHP 本身不能直接输出 PWM 信号

树莓派或类似 Linux 单板机上用 PHP 控制舵机,本质是调用底层硬件接口(如 GPIO),而 PHP 没有内置 PWM 支持。你看到的“PHP 控制舵机”,实际是 PHP 调用外部工具(如 gpio 命令、servo 工具)或通过系统调用操作 /dev/gpiomem,再配合 C 库(如 wiringPi、pigpio)实现。纯 PHP 的 sleep() 或循环延时无法生成稳定 PWM,误差大、抖动严重,舵机会乱转或不动。

推荐方案:用 pigpio + PHP 调用其 socket 接口

pigpio 是目前 Raspberry Pi 上最可靠的用户态 PWM 方案,支持精确到微秒级的脉宽控制,且自带 daemon(pigpiod),PHP 只需发 TCP 命令即可。它不依赖 root 权限(启动时加 -l 参数),比直接 mmap /dev/gpiomem 更安全。

  • 先在树莓派启用 pigpio:运行 sudo pigpiod -l
  • 确认服务监听默认端口(8888):sudo netstat -tuln | grep 8888
  • PHP 中用 socket 连接并发送命令,例如设置 GPIO 12 输出 1500μs 脉宽(中位):
$socket = fsockopen('127.0.0.1', 8888, $errno, $errstr, 1);
if ($socket) {
    // 设置 GPIO 12 为 servo 模式,脉宽 1500μs(0°~180° 对应 500~2500μs)
    fwrite($socket, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00");
    fwrite($socket, "\x01\x00\x00\x00\x0C\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"); // set_servo_pulsewidth
    fwrite($socket, "\x02\x00\x00\x00\x0C\x00\x00\x00\xB8\x05\x00\x00\x00\x00\x00\x00"); // 1500 decimal = 0x05B8
    fclose($socket);
}

注意:上面是简化示意,真实项目建议用封装好的 PHP 客户端库(如 php-pigpio),避免手动拼二进制协议。

常见错误:误用 BCM GPIO 编号或角度映射失准

舵机角度不是线性对应脉宽,但大多数标准舵机(如 SG90、MG90S)按如下近似映射:

立即学习PHP免费学习笔记(深入)”;

  • 500μs ≈ 0°
  • 1500μs ≈ 90°(中位)
  • 2500μs ≈ 180°

但不同型号存在偏差,必须实测校准。另外,PHP 调用时若传入物理引脚号(如 Pin 12)而非 BCM 编号(GPIO 12),会控制错引脚;pigpio 使用的是 BCM 编号,不是 BOARD 编号。

Molica AI
Molica AI

一款聚合了多种AI工具的一站式创作平台

下载

替代方案:用 Python 脚本做中间层,PHP exec 调用

如果不想处理 socket 协议,更简单的方式是写一个 Python 脚本(用 RPi.GPIOgpiozero),接收角度参数,生成 PWM 并控制舵机,PHP 用 exec() 触发:

#!/usr/bin/env python3
import sys
import time
from gpiozero import Servo
from time import sleep

if len(sys.argv) != 2: print("Usage: python servo.py ") sys.exit(1)

angle = float(sys.argv[1])

注意:gpiozero 的 Servo 默认范围 -1 ~ +1,需换算(0°→-1, 180°→+1)

value = (angle / 90.0) - 1.0 value = max(-1.0, min(1.0, value))

servo = Servo(12) # GPIO 12 servo.value = value sleep(0.5) servo.close()

然后 PHP 中:exec('python3 /path/to/servo.py 90 2>&1', $output, $return);。这种方式开发快,但每次调用有启动开销,不适合高频调节(如每秒多次转动)。

真正稳定控制舵机的关键不在 PHP 语法,而在 PWM 时序精度和硬件抽象层的选择。绕过 pigpio 直接用 PHP 操作寄存器或延时模拟 PWM,基本不可行。别在 PHP 里写 for 循环控舵机——那不是控制,是试探运气。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

717

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

627

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

743

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1236

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

575

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

699

2023.08.11

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

74

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号