これに関する私の他の見解では結果が得られなかったので、次のことを行いました。 USB 経由で接続された Arduino Lenoardo がボタン経由でピン 2 に入力を取得したら、シャットダウンしたい Orange Pi PC があります。
キーボード入力がうまく機能しなかったため、この通信全体がシリアル経由で行われるはずです。
私の Pi は、Orange Pi ハードウェア用の RetroPie のクローンである RetrOrangePi を実行しています。今、シャットダウンしたい場合は、メニューを使用したくありませんが、代わりにハードウェア ケースに取り付けられたボタンを使用します。
このボタン (Arduino のピン 2 に接続) が押されると、シリアル コマンド (byebyepi) が Orange Pi に送信されます。Orange Pi は、この正確な行をリッスンしてシャットダウン コマンドを送信する Python デーモンを実行します。
ほとんどすべてがうまく機能します。Arduinoは、ピン2が接地されているときにシリアル信号を送信し、シリアルモニターを使用してウィンドウで確認します。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