ronanguilloux / php-gpio
GPIO相关工具和工具箱PHP库
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-22 20:19:33 UTC
README
php-gpio 是一个简单的PHP库,用于与树莓派(Raspberry PI)的GPIO引脚进行交互。
它提供了简单的工具,例如读取和写入引脚。
[更新:2014年秋季] 现已兼容树莓派B型和B+版本
长话短说
- "Hey, I just want to blink a LED from my raspberry pi hosted website!"
- "OK good guy: git clone https://github.com/ronanguilloux/php-gpio-web.git`
& remember to come back here when you're lost ;-)"
=> php-gpio-web:一个简单的示例,让您玩转LED和PHP
GPIO
通用输入/输出(简称GPIO)是芯片上的一个通用引脚,其行为(包括它是否是输入或输出引脚)可以通过软件进行控制(编程)。树莓派允许外围设备和扩展板(如Rpi Gertboard)通过暴露输入和输出访问CPU。
有关树莓派GPIO功能的更多信息,请参阅http://elinux.org/RPi_Low-level_peripherals上的文档和图表。
有关树莓派GPIO控制LED的示例,请参阅单个LED的完整电路图,其中包含详细的解释和图表,在此。
有关树莓派GPIO控制传感器的示例,请参阅DS18B20(温度传感器)的使用示例,在此。
硬件要求
在将LED和电阻器安装在面包板上并接线后,添加Linux内核中的相应模块
对于LED,启用GPIO模块
$ sudo modprobe w1-gpio
对于传感器,启用适当的传感器。例如,对于DS18B20 1-Wire数字温度传感器
$ sudo modprobe w1-therm
(在此处查看Raspberry Pi上DS18B20的使用示例)
要自动在启动时加载这些内核模块,编辑/etc/modules
文件并添加以下两行
w1-gpio
w1-therm
安装
安装php-gpio的推荐方法是使用composer。
只需运行以下三个命令即可安装
$ sudo apt-get install git
$ wget https://getcomposer.org.cn/composer.phar
$ php composer.phar create-project --stability='dev' ronanguilloux/php-gpio intoYourPath
现在您可以添加自动加载器,并将能够访问库
<?php require 'vendor/autoload.php';
如果您既不使用Composer也不使用ClassLoader来管理您的应用程序,只需要求提供的自动加载器即可
<?php require_once 'src/autoload.php';
API使用
API使用需要sudo权限。
为了满足这些权限需求(例如,对于任何与Web相关的使用),请参阅blinker文件及其下面的说明。
<?php require 'vendor/autoload.php'; use PhpGpio\Gpio; echo "Setting up pin 17\n"; $gpio = new GPIO(); $gpio->setup(17, "out"); echo "Turning on pin 17\n"; $gpio->output(17, 1); echo "Sleeping!\n"; sleep(3); echo "Turning off pin 17\n"; $gpio->output(17, 0); echo "Unexporting all pins\n"; $gpio->unexportAll();
理解I/O权限
权限很重要
- 将您的Web服务器用户(例如,Apache2的www-data)作为
root
运行是不好的做法 - 仅因为某人想要自由闪烁LED,就使用
chmod 777 /dev
是不好的做法
这些做法在RPi论坛上经常被提出,但它们没有意识到安全性,因此在互联网环境中不可取。相反,古老的/etc/sudoers
文件允许Linux用户以sudo权限执行单个文件,而无需输入密码。
blinker文件解决方案(“一个文件即可闪烁所有”)
在基于PHP的项目中,API只能使用sudo权限。但有一个解决方案可以避免将您的树莓派暴露于安全风险:在一个单独的PHP文件中准备和打包您需要运行的GPIO操作。在基于硬件的项目中,这样的操作通常很少,比如闪烁LED、运行伺服电机等。包含您GPIO相关动作的单个PHP文件可以通过使用exec()
命令从您的基于网页的应用程序中调用,并使用确定性的参数。
(...) $result = exec('sudo -t /usr/bin/php ./blinker 17 20000'); // calling the API client file (...)
将一个单独的PHP文件用作一个GPIO动作的API客户端,使得在/etc/sudoers
文件中配置特定的sudo权限更容易,如下所示。如果您有更多的硬件操作要运行(比如LED、伺服电机和2-3个传感器),更多的专用API客户端文件,带有它们自己的参数,也是完全可以的。
作为一个这样的解决方案的例子,我们提供了一个简单的闪烁PHP文件,可以从shell或您的基于网页的应用程序中执行。要使用sudo权限运行此闪烁器而不输入密码,只需允许您的www-data
或pi
用户使用exec()
运行闪烁脚本。根据以下提供的解决方案,只需一个闪烁脚本就可以管理所有的LED,并且您的web服务器应用程序只需在/etc/sudoers
中指定一个PHP文件。
这是常规的Linux文件权限系统方式来做这些事情,而不是一个愚蠢的chmod 777
。
编辑您的/etc/sudoers
文件
$ sudo visudo
然后在您的/etc/sudoers
文件中添加这两行
www-data ALL=NOPASSWD:/path/to/the/blinker
将/path/to/the/blinker
替换为您的单个API客户端PHP文件。
现在提供的闪烁文件具有足够的权限,并且已经准备好使用GPIO API。您不需要安装apache2-suexec或suPHP。
您可以使用这里提供的blinkerTest.php
文件测试闪烁文件解决方案。
<?php # blinkTester.php # Blinks the LED wired to the GPIO #17 pin with 0.2 second delay: $result = exec('sudo -t /usr/bin/php ./blinker 17 20000');
测试您的闪烁器
$ php blinkTester.php
API实现
一些php-gpio API示例/演示
- Temperature-Pi:一个简单的PHP项目,使用DS18B20 1-Wire数字温度传感器和此php-gpio库读取和记录温度。
- Php-Gpio-Web:php-gpio库的一个简单网站集成示例。
单元测试
运行php-gpio的全套PhpUnit测试需要一个可sudo的用户,因为涉及各种GPIO操作。您不必安装phpunit,只需下载并使用单个PhpUnit包即可。这可以通过使用cURL
轻松完成,以获取独立的PhpUnit的phar文件。
$ wget http://pear.phpunit.de/get/phpunit.phar $ chmod +x phpunit.phar
$ wget https://getcomposer.org.cn/composer.phar $ php composer.phar install --dev
$ sudo /usr/bin/php phpunit.phar
PHP质量
对于PHP质量爱好者,以及为了我自己的代码改进,我在./bin目录中写了一个小脚本,用于检查我的PHP代码:它会生成各种统计数据、指标和改进建议。
致谢
- Aaron Pearce,因其aaronpearce/PHP-GPIO项目分支
- Ronan Guilloux ronan.guilloux@gmail.com
- Bas Bloemsaat bas@bloemsaat.com,树莓派版本依赖
- Alex Ciarlillo (@alexciarlillo),树莓派B+版本支持
- 所有贡献者
许可
php-gpio遵循MIT许可证发布。
有关详细信息,请参阅捆绑的LICENSE文件。
您可以在以下位置找到此软件的副本:https://github.com/ronanguilloux/php-gpio