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