将记录插入Raspberry Pi上的MySQL数据库时打开/关闭LED

时间:2018-02-06 20:14:54

标签: python mysql raspberry-pi raspberry-pi3 led

每当将记录插入MySQL数据库时,我都会尝试打开LED。

目前我使用带有MySQL UDF sys_exec()的Trigger来运行python脚本,除非我想打开GPIO引脚,否则一切正常。

下面是2个python脚本(两者都相同,只有一个有GPIO设置和GPIO输出行注释掉)。

import RPi.GPIO as GPIO
import time

pin = 21
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(pin, GPIO.OUT)

GPIO.output(pin, GPIO.HIGH)
time.sleep(0.25)
GPIO.output(pin, GPIO.LOW)

这个脚本在从python Shell执行时运行正常,但是当触发器执行它时失败,而sys_exec将返回256(我相信这意味着它是假的?)

import RPi.GPIO as GPIO
import time

pin = 21
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
# GPIO.setup(pin, GPIO.OUT)

# GPIO.output(pin, GPIO.HIGH)
time.sleep(0.25)
# GPIO.output(pin, GPIO.LOW)

这个从触发器运行良好。

以下是我的触发器的代码:

DELIMITER $$
CREATE TRIGGER test_trig
AFTER INSERT ON LED_TABLE
FOR EACH ROW
    BEGIN
        DECLARE cmd CHAR(255);
        DECLARE result int(10);
        SET cmd = ('python /home/pi/test.py');
        SET result = sys_exec(cmd);
    END;
$$
DELIMITER ;

有没有人知道为什么当我尝试从触发器激活GPIO引脚时它会失败?

编辑:

因此问题是由mysql用户无权使用GPIO引脚引起的。我通过将mysql用户添加到gpio用户组来解决这个问题。

我在这里找到了答案:

https://www.raspberrypi.org/forums/viewtopic.php?f=27&t=16013

对于将来可能遇到此问题的人,您要运行的命令是:

usermod -a -G gpio mysql

2 个答案:

答案 0 :(得分:2)

很难知道你的特定设置会发生什么(你运行Raspbian吗?Python 2或3?等等)但要检查的一件事是用户权限。如果我没记错的话,在Raspbian默认设置中,只有root可以访问GPIO引脚;如果您以root身份运行Python但是MySQL进程在没有root权限的情况下运行,则可以解释这种差异。

答案 1 :(得分:1)

我找到了答案,

因此问题是由mysql用户无权使用GPIO引脚引起的。我通过将mysql用户添加到gpio用户组来解决这个问题。

我在这里找到了答案:

https://www.raspberrypi.org/forums/viewtopic.php?f=27&t=16013

对于将来可能遇到此问题的人,您要运行的命令是:

usermod -a -G gpio mysql