【发布时间】:2017-04-22 20:14:57
【问题描述】:
由于我对此的其他看法没有产生任何结果,因此我执行了以下操作: 我有一台 Orange Pi PC,一旦通过 USB 连接到它的 Arduino Lenoardo 通过按钮在 Pin 2 上获得输入,我想关闭它。
整个通信应该通过串行进行,因为键盘输入效果不佳。
我的 Pi 正在运行 RetrOrangePi,它是用于 Orange Pi 硬件的 RetroPie 的克隆。 现在,如果我想关闭它,我不想使用菜单,而是使用安装在硬件箱上的按钮。
当这个按钮(连接到 Arduino 上的引脚 2)被按下时,它会向 Orange Pi 发送一个串行命令 (byebyepi),Orange Pi 会运行一个 Python 守护程序,该守护程序会侦听此确切行以发送关机命令。
几乎一切正常。 当引脚 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 守护进程使用这个:
import serial
import os
ser = serial.Serial('/dev/ttyACM0', 9600)
while 1 :
line = ser.readline()
if line == 'byebyepi':
os.system("sudo shutdown -h now")
而 /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
【问题讨论】:
-
您可以为您的问题添加更多相关标签(例如
arduino、orange-pi等)并引起更多关注 -
@downshift 完成,谢谢。
标签: python arduino debian shutdown orange-pi