用树莓派通过Apache控制GPIO
用 RaspberryPi 多通道驱动 WS281X LED 带。
为了能够从外部操作,我们通过在Web浏览器中显示的按钮来触发指定的模式运行。
环境 –
-
- Raspberry Pi 3
-
- Raspberry Pi OS Lite
-
- Release date: February 21st 2023
-
- System: 32-bit
- apache2
准备rpi_8chwave命令。
从https://github.com/nanbuwks/rpi_multichannel_ws281x克隆存储库并编译rpi_8chwave。
请确认命令是否正常运行
连接电线,通过终端输入命令,确认它能发光。
将命令复制到 /usr/local 目录下。
# cp /home/pi/rpi_multichannel_ws281x/rpi_8chwave /usr/local
# ls -alh /usr/local
total 68K
drwxr-xr-x 10 root root 4.0K Apr 23 18:31 .
drwxr-xr-x 11 root root 4.0K Feb 21 01:02 ..
drwxr-xr-x 3 root root 4.0K Apr 23 11:38 bin
drwxr-xr-x 2 root root 4.0K Feb 21 01:02 etc
drwxr-xr-x 2 root root 4.0K Feb 21 01:02 games
drwxr-xr-x 3 root root 4.0K Apr 23 13:30 include
drwxr-xr-x 4 root root 4.0K Apr 23 13:30 lib
lrwxrwxrwx 1 root root 9 Feb 21 01:02 man -> share/man
-rwxr-xr-x 1 root root 25K Apr 23 18:31 rpi_8chwave
drwxr-xr-x 2 root root 4.0K Feb 21 01:02 sbin
drwxr-xr-x 5 root root 4.0K Feb 21 01:06 share
drwxr-xr-x 2 root root 4.0K Feb 21 01:02 src
网络服务器
我将安装Apache和PHP。
$ sudo apt install apache2 php
创作内容
将以下内容制作为 /var/www/html/index.php 文件。
<!DOCTYPE html>
<HTML>
<HEAD>
<META CHARSET="UTF-8">
<link href="design.css" rel="stylesheet">
</HEAD>
<BODY>
<pre>
<?php
?>
</pre>
<?php
if ( "1" == $_POST["SWITCH"])
{
$mode = "1 ON";
exec("sudo pkill rpi_8chwave");
exec("sudo /usr/local/rpi_8chwave -n 100 -w 100 -B 10 -G ff0000 ff0000 00ffff 00ffff ff0000 00ffff ff0000 000000 > /dev/null &");
}
if ( "2" == $_POST["SWITCH"])
{
$mode = "2 ON";
exec("sudo pkill rpi_8chwave");
exec("sudo /usr/local/rpi_8chwave -n 100 -w 100 -B 10 -G ff0000 ff0000 00ffff 00ffff ff0000 00ffff ff00ff 000000 > /dev/null &");
}
if ( "3" == $_POST["SWITCH"])
{
$mode = "3 ON";
exec("sudo pkill rpi_8chwave");
exec("sudo /usr/local/rpi_8chwave -n 100 -w 100 -B 10 -G ff0000 ff0000 00ffff 00ffff ff0000 00ffff 00ffff 000000 > /dev/null &");
}
.
.
.
if ( "7" == $_POST["SWITCH"])
{
$mode = "7 ON";
exec("sudo pkill rpi_8chwave");
exec("sudo /usr/local/rpi_8chwave -n 100 -w 100 -B 10 -G ff0000 ff0000 000000 000000 ff0000 ff00ff 000000 ff00ff > /dev/null &");
}
if ( "0" == $_POST["SWITCH"])
{
$mode = "OFF";
exec("sudo pkill rpi_8chwave");
exec("sudo /usr/local/rpi_8chwave -n 100 -w 100 -B 10 -G 000000 000000 000000 000000 000000 000000 000000 000000 > /dev/null &");
}
?>
<H1><?php echo $mode; ?></H1>
<HR>
<FORM ACTION=. METHOD=POST>
<INPUT TYPE=HIDDEN NAME="SWITCH" VALUE="1">
<INPUT TYPE=SUBMIT VALUE="1 ON" >
</FORM>
<FORM ACTION=. METHOD=POST>
<INPUT TYPE=HIDDEN NAME=SWITCH VALUE="2">
<INPUT TYPE=SUBMIT VALUE="2 ON" >
</FORM>
<FORM ACTION=. METHOD=POST>
<INPUT TYPE=HIDDEN NAME=SWITCH VALUE="3">
<INPUT TYPE=SUBMIT VALUE="3 ON" >
</FORM>
<FORM ACTION=. METHOD=POST>
<INPUT TYPE=HIDDEN NAME=SWITCH VALUE="4">
<INPUT TYPE=SUBMIT VALUE="4 ON" >
</FORM>
<FORM ACTION=. METHOD=POST>
<INPUT TYPE=HIDDEN NAME=SWITCH VALUE="5">
<INPUT TYPE=SUBMIT VALUE="5 ON" >
</FORM>
<FORM ACTION=. METHOD=POST>
<INPUT TYPE=HIDDEN NAME=SWITCH VALUE="6">
<INPUT TYPE=SUBMIT VALUE="6 ON" >
</FORM>
<FORM ACTION=. METHOD=POST>
<INPUT TYPE=HIDDEN NAME=SWITCH VALUE="7">
<INPUT TYPE=SUBMIT VALUE="7 ON" >
</FORM>
<FORM ACTION=. METHOD=POST>
<INPUT TYPE=HIDDEN NAME=SWITCH VALUE="0">
<INPUT TYPE=SUBMIT VALUE="OFF" >
</FORM>
</BODY>
</HTML>
另外,创建合适的 CSS 并应用它,按照以下方式设计页面。
使www-data用户能够使用sudo。
# cd /etc/sudoers.d
# ls
010_at-export 010_pi-nopasswd 010_proxy README
# visudo www-data
请用中文原生地重新表达以下内容,只需要一个选项:
www-data ALL = (root) NOPASSWD: /usr/local/rpi_8chwave,/usr/bin/pkill
按下按钮,确保它按照模式闪烁。