首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >串行命令到debian/armbian关闭系统

串行命令到debian/armbian关闭系统
EN

Stack Overflow用户
提问于 2016-12-07 18:46:29
回答 1查看 839关注 0票数 1

由于我的其他对此没有产生任何结果,我做了以下工作:我有一个橙色Pi个人电脑,我想关闭一旦Arduino Lenoardo通过USB连接到它通过一个按钮获得一个输入到Pin 2。

整个通信应该通过串行方式进行,因为键盘输入不能正常工作。

我的Pi正在运行RetrOrangePi,这是Orange硬件的RetroPie的一个克隆。现在,如果我希望它关闭,我不想使用菜单,而是一个按钮,安装在硬件的情况下。

当按下此按钮(连接到Arduino上的Pin 2)时,它会向Orange Pi发送一个串行命令(byebyepi),Orange Pi运行一个python守护进程,该守护进程监听发送关机命令的准确行。

几乎所有的事情都很好。Arduino在pin 2接地时发送串行信号,并在windows上使用串行监视器进行检查。init.d服务正在运行。只有python脚本有问题,当我手动运行它时,因为缺少一个模块(序列)。我安装了pip,然后用pip安装了"pyserial“模块。从而消除了这个模块丢失的错误。

现在,当我手动运行python脚本时,arduino正在侦听,但是当我按下Pin 2时,什么都不会发生。Arduino亮起了led,所以发出信号发送关闭命令,但是Pi没有关闭,我不知道为什么。我也做了chmod 755在我的init.d/byebyepi。

这里有人能帮我吗?谢谢你好心!

我的arduino的草图是:

代码语言:javascript
运行
复制
#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守护进程使用以下内容:

代码语言:javascript
运行
复制
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/脚本是这样的:

代码语言:javascript
运行
复制
#! /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
EN

回答 1

Stack Overflow用户

发布于 2016-12-08 11:32:15

在发送命令之前发送空行可能是个好主意:

代码语言:javascript
运行
复制
if (!digitalRead(abutton)){
    Serial.println("");
    Serial.println("byebyepi");
}

否则,由电噪声产生的字符可能最终出现在字符串的开头。一个新的行字符应该让python脚本在读取循环中运行一次,然后准备接收一个清晰的字符串。

否则,您可以在Python脚本中添加一些打印输出,这说明它即将重新启动。这样您就可以确认Python脚本接收到了ok命令。

还有一件事是,在init.d脚本中运行时,您的环境变量将与登录时不同。例如,路径和PYTHONPATH可以是不同的。因此,在python脚本中使用shutdown的完整路径可能是个好主意。这句话是:

代码语言:javascript
运行
复制
os.system("sudo FULLPATHHERE/shutdown -h now")

你得弄清楚你的系统里是什么。也许您也应该删除init.d脚本的sudo。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41025037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档