1.编写 wiringpi.i ,格式:
%module wiringpi
%{
所有头文件
%}
%apply unsigned char { uint8_t };
%include "bindings.i"
把所有头文件加入。
可以使用如下命令批量处理,
ls -l *.h | sed 's/[ ]\+/ /g' | cut -d ' ' -f 9 | sed 's/^/#include "&/g' | sed 's/$/&"/g'
例如:
$:~/tmp/WiringNT-PHP/WiringPi/wiringPi$ ls -l *.h | sed 's/[ ]\+/ /g' | cut -d ' ' -f 9 | sed 's/^/#include "&/g' | sed 's/$/&"/g'
#include "drcSerial.h"
#include "max31855.h"
#include "max5322.h"
#include "mcp23008.h"
#include "mcp23016.h"
#include "mcp23016reg.h"
#include "mcp23017.h"
#include "mcp23s08.h"
#include "mcp23s17.h"
#include "mcp23x0817.h"
#include "mcp23x08.h"
#include "mcp3002.h"
#include "mcp3004.h"
#include "mcp3422.h"
#include "mcp4802.h"
#include "pcf8574.h"
#include "pcf8591.h"
#include "RKIO.h"
#include "sn3218.h"
#include "softPwm.h"
#include "softServo.h"
#include "softTone.h"
#include "sr595.h"
#include "wiringNT.h"
#include "wiringPi.h"
#include "wiringPiI2C.h"
#include "wiringPiSPI.h"
#include "wiringSerial.h"
#include "wiringShift.h"
#include "wpiExtensions.h"
#
2. 把所有头文件中的函数全部读取出来,填入到 bindings.i ,使用工具 generate-bindings.py (注意文件路径)
$ python generate-bindings.py > bindings.i
3.利用swig工具,生成包装程序
$swig -php7 wiringpi.i
- SWIG 将 wiringpi.i 转变为 wiringpi_wrap.c 并生成 wiringpi.php 和 php_wiringpi.h
4.编译:
$gcc -fpic -c `php-config --includes` -I/usr/local/include wiringpi_wrap.c
$gcc -fpic -c `php-config --includes` -I/usr/local/include -Winline wiringpi_wrap.c
$gcc -fpic -c `php-config --includes` -I/usr/local/include -Winline -pipe wiringpi_wrap.c
- 注意,有些库我们是默认不安装到系统的,比如 font.h,softTone.h 这些,这个时候编译会出错,我们需要在 wiringpi.i 和 bindings.i中注释掉,然后再用 swig -php wiringpi.i 命令重新生成包装程序。
5.生成php扩展库:
$gcc -shared wiringpi_wrap.o -o wiringpi.so -lwiringPi -L/usr/local/lib -lwiringPiDev -lpthread -lm
6.测试
$php -d extension=/root/WiringNT-PHP/wiringpi.so /root/WiringNT-PHP/examples/test2.php
7.这个是控制GPIO口的,因此我们可以使用以下命令进行监视:
$watch -n 1 gpio readall
8.安装:
$cp wiringpi.so `php-config --extension-dir`
9.使用技巧,在使用的过程中,除了可以直接调用库中的函数,调试的时候,还可以利用空间命名的方式来进行所有函数的直接调用。例如:
wiringpi::wiringPiSetup();
wiringpi::pinmode(8, 1);
参考文档:
https://www.ibm.com/developerworks/cn/opensource/os-php-swig/