ronanguilloux/php-gpio

GPIO相关工具和工具箱PHP库

v1.0.0 2013-06-24 16:53 UTC

This package is auto-updated.

Last update: 2024-09-22 20:19:33 UTC


README

php-gpio 是一个简单的PHP库,用于与树莓派(Raspberry PI)的GPIO引脚进行交互。

它提供了简单的工具,例如读取和写入引脚。

Latest Stable Version Build Status Scrutinizer Code Quality SensioLabsInsight Total Downloads

Circuit snapshot

[更新: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

(在此处查看单个LED的完整电路图以及解释和图表)

对于传感器,启用适当的传感器。例如,对于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-datapi用户使用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代码:它会生成各种统计数据、指标和改进建议。

致谢

许可

php-gpio遵循MIT许可证发布。
有关详细信息,请参阅捆绑的LICENSE文件。
您可以在以下位置找到此软件的副本:https://github.com/ronanguilloux/php-gpio