You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WiringPI是否支持2个以上GPIO引脚?4路LED仅2路工作故障咨询

WiringPI多GPIO引脚支持问题排查

当然支持啊!WiringPI完全能同时控制多个GPIO引脚——别说4个,几十个都没问题。你的问题大概率不是WiringPI本身的限制,而是硬件连接、后端代码或者权限这些环节出了问题,咱们一步步排查:

1. 先确认硬件与引脚编号是否正确

这是最容易踩坑的点:

  • WiringPI有三种编号模式(WiringPI编号、BCM编号、物理引脚编号),你要确保代码里用的编号和实际接线的引脚一致。可以用命令gpio readall打印所有引脚的状态,对照确认你用到的4个引脚编号是否正确。
  • 检查那两个不工作的LED:有没有串联220-330Ω的限流电阻?接线是否松动?阳极(长脚)是否接GPIO、阴极(短脚)是否接地(或者反过来,取决于你代码里的高低电平逻辑)?

2. 后端gpio.php代码是核心问题

你的前端表单提交到gpio.php,但如果这个脚本里只处理了17、22两个引脚,那另外两个LED自然没反应。举个正确处理4个引脚的示例:

<?php
// 初始化WiringPI(用BCM编号,和你提到的17、22对应)
if (!wiringPiSetupGpio()) {
    die("WiringPI初始化失败");
}

// 定义你要控制的4个引脚(替换成你实际用的引脚号)
$ledPins = [17, 22, 23, 24];

// 把所有引脚设置为输出模式
foreach ($ledPins as $pin) {
    pinMode($pin, OUTPUT);
}

// 处理全亮请求
if (isset($_GET['on'])) {
    foreach ($ledPins as $pin) {
        digitalWrite($pin, HIGH);
    }
}

// 处理全灭请求
if (isset($_GET['off'])) {
    foreach ($ledPins as $pin) {
        digitalWrite($pin, LOW);
    }
}

// 如果要实现组合状态控制(比如单独亮某几个LED),需要在前端表单里加对应的参数,比如:
// <input type="submit" value="LED1+LED3亮" name="led1_3_on">
// 然后在后端增加对应的处理逻辑:
// if (isset($_GET['led1_3_on'])) {
//     digitalWrite(17, HIGH);
//     digitalWrite(22, LOW);
//     digitalWrite(23, HIGH);
//     digitalWrite(24, LOW);
// }
?>

重点:要确保每个引脚都执行了pinMode初始化,并且在处理按钮请求时,对所有需要控制的引脚执行digitalWrite操作。

3. 检查Web服务器的GPIO权限

运行Web服务的用户(比如Apache的www-data)默认没有GPIO操作权限,这也会导致部分引脚无响应。执行以下命令给用户添加权限:

sudo usermod -a -G gpio www-data
sudo systemctl restart apache2  # 如果用Nginx就重启nginx服务

4. 排查引脚是否被占用

用gpio readall命令查看那两个不工作的引脚状态:

  • 如果MODE列不是OUT,说明没设置成输出模式;
  • 如果VALUE列状态异常,可能有其他程序在占用这个引脚,关闭其他GPIO相关程序再试试。

内容的提问来源于stack exchange,提问作者Kharlo Cariaga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:22:21