用树莓派通过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。

请确认命令是否正常运行

连接电线,通过终端输入命令,确认它能发光。

image.png
image.png

将命令复制到 /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 并应用它,按照以下方式设计页面。

image.png

使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

按下按钮,确保它按照模式闪烁。

image.png
image.png
广告
将在 10 秒后关闭
bannerAds