树莓派4用PHP 8操作GPIO报错,求解决方案及PHP降级方法
问题描述
环境:Raspberry Pi 4、PHP 8、GPIO PHP库
运行以下代码时触发错误:
require 'vendor/autoload.php'; require_once 'vendor/autoload.php'; use PiPHP\GPIO\GPIO; use PiPHP\GPIO\Pin\InputPinInterface; use PiPHP\GPIO\Pin\OutputPinInterface; $gpio = new GPIO(); $buttonPin = $gpio->getInputPin(3);
错误日志:
PHP Fatal error: Uncaught RuntimeException: fwrite(): Write of 1 bytes failed with errno=22 Invalid argument Stack trace: #0 .../piphp/gpio/src/FileSystem/FileSystem.php(46): PiPHP\GPIO\FileSystem\FileSystem->exceptionIfFalse() #1 .../piphp/gpio/src/Pin/Pin.php(165): PiPHP\GPIO\FileSystem\FileSystem->putContents() #2 .../piphp/gpio/src/Pin/Pin.php(62): PiPHP\GPIO\Pin\Pin->writePinNumberToFile() #3 .../piphp/gpio/src/Pin/Pin.php(43): PiPHP\GPIO\Pin\Pin->export() #4 .../piphp/gpio/src/Pin/InputPin.php(19): PiPHP\GPIO\Pin\Pin->__construct() #5 .../piphp/gpio/src/GPIO.php(34): PiPHP\GPIO\Pin\InputPin->__construct() #6 station.php(11): PiPHP\GPIO\GPIO->getInputPin() #7 {main} thrown in .../piphp/gpio/src/FileSystem/FileSystem.php on line 55
疑问:该错误是否由PHP 8版本导致?若是,如何降级PHP版本?
解答
1. 是否为PHP 8版本问题?
这个错误(errno=22 Invalid argument)大概率不是PHP 8本身的兼容性问题,更可能是以下两类原因:
- 权限不足:Linux sysfs GPIO接口需要root权限才能操作,尝试用
sudo php station.php执行脚本 - 引脚操作逻辑问题:检查引脚编号是否符合PiPHP的BCM编号规则,确认引脚3在BCM体系下是可用于输入的有效引脚
若排查上述两点后问题仍存在,再考虑PHP版本适配问题,尝试降级。
2. Raspberry Pi 4降级PHP版本步骤(以降级到PHP 7.4为例)
步骤1:卸载现有PHP 8包
sudo apt purge php8.* -y sudo apt autoremove -y sudo apt clean
步骤2:添加PHP 7.4软件源
针对Raspberry Pi OS Bullseye及以上版本,需添加buster legacy源:
echo "deb http://legacy.raspbian.org/raspbian/ buster main contrib non-free rpi" | sudo tee /etc/apt/sources.list.d/legacy.list sudo apt update
步骤3:安装PHP 7.4及常用扩展
sudo apt install php7.4 php7.4-cli php7.4-common php7.4-curl php7.4-gd php7.4-mbstring php7.4-xml php7.4-zip -y
步骤4:验证版本
php -v
输出应显示PHP 7.4.x版本信息。
步骤5:重新安装依赖
composer install
内容的提问来源于stack exchange,提问作者Floyd Resler
相关产品推荐
相关产品推荐

