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

Turn LED on/ off when inserting a record into a MySQL database on a Raspberry Pi

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

目前我正在使用带有 MySQL UDF sys_exec() 的触发器到 运行 一个 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 会 return 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

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

我找到了答案,

所以问题是由 mysql 用户没有使用 GPIO 引脚的权限引起的。我通过将 mysql 用户添加到 gpio 用户组来解决这个问题。

我在这里找到了答案:

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

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

usermod -a -G gpio mysql