前提・実現したいこと
ラズパイ4とcronを使い、サーボモータを操作するpythonファイルを定期的に実行したいです。
crontabで定期的に実行するpythonファイルを設定しましたが、設定した時刻になってもモータが動きませんでした。
原因と対応策をご存じの方がいたら教えていただきたいです。
よろしくお願いします…。
発生している問題・エラーメッセージ
Aug 8 20:52:01 raspberrypi CRON[16345]: (pi) CMD ([16355] '/usr/bin/python3 /home/pi/RaspberryPi/python/SG90-HV_ServoMorot/servo.py')
Aug 8 20:52:01 raspberrypi CRON[16345]: (CRON) error (grandchild #16355 failed with exit status 127)
Aug 8 20:52:01 raspberrypi CRON[16345]: (pi) END ([16355] '/usr/bin/python3 /home/pi/RaspberryPi/python/SG90-HV_ServoMorot/servo.py')
該当のソースコード
python
1import RPi.GPIO as GPIO 2import time 3 4INTERVAL = 1.0 5PIN = 14 6FREQ = 50 7 8GPIO.setmode(GPIO.BCM) 9 10GPIO.setup(PIN, GPIO.OUT) 11servo = GPIO.PWM(PIN, FREQ) 12 13servo.start(0.0) 14 15for i in range(2): 16 servo.ChangeDutyCycle(2.5) 17 time.sleep(INTERVAL) 18 19 servo.ChangeDutyCycle(7.25) 20 time.sleep(INTERVAL) 21 22GPIO.cleanup()
試したこと
色々調べた結果、ラズパイのターミナルでの環境変数とcronで実行する際の環境変数が異なるためにエラーが生じている可能性が高いと考えています。
特にservo.pyの中でインポートしている2つのライブラリ(RPi.GPIO, time)のパスが環境変数として認識されていないことが原因だと考えました。
そこで、ターミナルでターミナルの環境変数を出力するpysys.pyというファイルを実行し、出力されたパスと同じものをcrontabに登録することを試しました。
↓pysys.py
import sys
print(sys.path)
↓crontab -e で設定した内容
LANG=ja_JP.UTF-8
PATH=/home/pi/RaspberryPi/python/SG90-HV_ServoMorot:/usr/lib/python2.7:/usr/lib/python2.7/plat-arm-linux-gnueabihf:/usr/lib/python2.7/lib-tk:/usr/lib/python2.7/lib-old:/usr/lib/python2.7/lib-dynload:/home/pi/.local/lib/python2.7/site-packages:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages/gtk-2.0
*/2 * * * * '/usr/bin/python3 /home/pi/RaspberryPi/python/SG90-HV_ServoMorot/servo.py'
補足情報(FW/ツールのバージョンなど)
環境変数にかんしてはこちらのサイトを参考にしました。
Raspberry Pi Zero WHで作った定点カメラを改良したい②画像に日付を付ける
ただ、自分の場合はなぜかcronの環境変数が出力できなかったので、個別にモジュールをインストールしし直すのではなく、ターミナルと同じ環境変数をまとめて登録するという方法に変えました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/11 03:37