因为我的另一个观点没有产生任何结果,所以我做了以下几点: 我有一台橙色的Pi电脑,一旦通过USB连接的arduinolenoardo通过一个按钮在pin2上得到一个输入,我想关闭它。在
整个通信应该通过串行通信来完成,因为键盘输入工作不好。在
我的Pi正在运行RetrOrangePi,它是Orange Pi硬件的RetroPie的克隆。 现在,如果我想关闭它,我不想使用菜单,而是一个按钮,安装在硬件外壳上。在
当按下这个按钮(连接到Arduino上的pin2)时,它会向Orange Pi发送一个串行命令(byebyepi),Orange Pi运行一个python守护进程,该守护进程监听这个确切的行来发送shutdown命令。在
几乎一切都很好。 当针脚2接地时,Arduino发送串行信号, 在windows上用串行监视器检查过。 init.d服务正在运行。 只有python脚本有问题,当我手动运行它时, 因为一个模块(串行)丢失了。 我安装了pip,然后用pip安装了“pyserial”模块。 它消除了这个模块丢失的错误。在
现在,当我手动运行python脚本时,arduino正在监听, 但当我把2号脚接地时,什么也没发生。Arduino点亮led, 所以它发出了关闭命令,但是Pi没有关闭 我不知道为什么。我还在init.d/byebyepi上做了chmod 755。在
有人能帮我吗?谢谢你!在
我的arduino的草图是这样的:
#define abutton 2
//Pin 2 is now called abutton
void setup() {
pinMode(abutton,INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
if (!digitalRead(abutton)){Serial.println("byebyepi");
//send byebyepi via serial when abutton is used
delay(5000);
//wait for 5 seconds
}
}
我的python守护进程使用这个:
^{pr2}$而/etc/init.d/脚本是这样的:
#! /bin/sh
# /etc/init.d/byebyepi
#
case "$1" in
start)
echo "Starting byebyepi.py"
# run application you want to start
python /home/pi/shutdown/byebyepi.py &
;;
stop)
# kill application you want to stop
;;
*)
echo "Usage: /home/pi/shutdown/byebyepi.py {start|stop}"
exit 1
;;
esac
exit 0
在发送命令之前发送一个空白行可能是个好主意:
否则,由电噪声产生的字符可能会在字符串的开头结束。一个新行字符应该让python脚本在读取循环中循环一次,然后准备好接收一个清晰的字符串。在
否则,您可以向Python脚本添加一些打印输出,只说明它即将重新启动。这样您就可以确认Python脚本接收到命令ok。在
还有一点是,在init.d脚本中运行时,环境变量将与登录时不同。例如,路径和PYTHONPATH可以不同。因此,最好在python脚本中使用
^{pr2}$shutdown
的完整路径。这条线是:你得找出你的系统里有什么。也许您应该删除init.d脚本的sudo。在
相关问题 更多 >
编程相关推荐