每当将记录插入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
答案 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