tgeindre / php-gpio
GPIO相关工具和PHP库
v1.0.0
2016-06-14 19:21 UTC
Requires
- php: >=5.6.0
Requires (Dev)
- atoum/atoum: ^2.7
- m6web/coke: ^2.1
- m6web/symfony2-coding-standard: ^3.3
This package is auto-updated.
Last update: 2024-09-09 20:29:58 UTC
README
一个简单的库,用于使用PHP读取/写入Raspberry PI GPIO。
由 ronanguilloux/php-gpio 分支,并通过 Atoum 测试。
安装
此库可以使用 Composer 安装
$ composer require tgeindre/php-gpio
读取/写入Raspberry Pi GPIO
要读取/写入Raspberry Pi GPIO,请使用 PhpGpio\Gpio
类。此类的实例化需要一个数组,其中包含您将使用的引脚号。
您可以根据您的使用情况和Rasberry Pi版本定义一个特定的引脚号列表,或者您可以使用 PhpGpio\Utils\Pi
类自动查找所有可用的引脚。
<?php namespace myproject; $pi = new PhpGpio\Utils\Pi; $pi->getAvailablePins(); // int array
访问GPIO需要root权限,所以请确保您的代码在足够的权限下运行。记住:您永远不应该以root用户运行您的web服务器。
以下是Gpio类使用的简单示例
<?php namespace MyProject; use PhpGpio\GpioInterface; use PhpGpio\Gpio; // Both pins are available on all raspi versions define('PIN_IN', 4); define('PIN_OUT', 7); $gpio = new Gpio([PIN_IN, PIN_OUT]); // First, setup pins with correct directions $gpio ->setup(PIN_IN, GpioInterface::DIRECTION_IN) // Makes it readable ->setup(PIN_OUT, GpioInterface::DIRECTION_OUT) // Writeable ; // read PIN_IN value and display it $value = $gpio->read(PIN_IN); var_dump($value); // string // write 1 on PIN_OUT $gpio->write(PIN_OUT, GpioInterface::IO_VALUE_ON); sleep(1); // After 1 second, write 0 on PIN_OUT $gpio->write(PIN_OUT, GpioInterface::IO_VALUE_OFF); // Then free all pins // (use the unexport() method to free pins one by one) $gpio->unexportAll();
如果您需要Raspberry Pi版本上所有可用的引脚的完整列表,请查看此页面。
演示
以下是使用Raspberry Pi 3和一些LED的简单演示(点击图片查看视频)
传感器
目前,此库仅支持4或8通道的MCP模拟数字转换器(ADC)
MCP3002, MCP3004 & MCP3008
由于Rapsberry Pi仅支持数字输入,需要一个ADC,如MCP,来读取模拟数据。
MCP3002, MCP3004和MCP3008工作方式相同,但为每个版本提供了专用类
PhpGpio\Sensor\Mcp\Mcp3002
PhpGpio\Sensor\Mcp\Mcp3004
PhpGpio\Sensor\Mcp\Mcp3008
它使用一个SPI接口,至少需要4个引脚
- MISO - 主输入从输出,
- MOSI - 主输出从输入,
- CLK - 时钟,
- CS - 通道选择(使用相同SPI接口的每个组件都有一根专用引脚)。
提供的类使用软件通信系统,因此您可以使用任何引脚。
以下是这3个版本的MCP ADC的连接图
布线
- VDD(电源)接3.3V,
- VREF接3.3v,
- AGND接地(GND),
- CLK接时钟引脚,
- DOUT(数字输出)接MISO引脚,
- DIN(数字输入)接MOSI引脚,
- CS(通道选择)接CS引脚,
- DGND接地(GND)。
现在您可以开始读取数据了
namespace MyProject; use PhpGpio\Gpio; use PhpGpio\Sensor\Mcp\Mcp3008; // Defining pins mapping according to your setup $pinsMapping = [ 'MISO' => 17, 'MOSI' => 8, 'CLK' => 23, 'CS' => 24, ]; // Setup a Gpio class $gpio = new Gpio(array_values($pins)); // Then we can instanciate the MCP class $mcp = new Mcp3008( $gpio $mapping['CLK'], $mapping['MOSI'], $mapping['MISO'], $mapping['CS'] ); // Now let's read some data on the first channel while (true) { echo $mcp->read(['channel' => 0]), "\n"; // every second sleep(1); }