質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

732閲覧

raspberry piでpythonプログラムを自動起動させたい

morutemu

総合スコア45

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2018/05/06 00:56

編集2018/05/06 01:25

Pythonで作ったプログラム(ターミナル上では動きます)をraspberry pi起動時に
自動起動させたいのですが、自動起動しません。

今まで、うまくいった方法で、試してみているのですが、
何がいけないのでしょうかお力下さい。

今までやった自動起動方法

pythonファイルを以下フォルダに置く

/opt/GarbageDayReminder/GarbageDayReminder.py

pythonファイル

python

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4# +++ モジュール +++ 5from threading import Thread 6import RPi.GPIO as GPIO 7import datetime 8import schedule 9import pandas 10import time 11import csv 12import os 13 14# +++ 変数 +++ 15# リマインド時間 16spc_time = "7:20" 17 18# 確認時間 19start_time = "00:00:00" 20end_time = "08:30:00" 21 22# +++ クラス +++ 23class GarbageDayReminder(object): 24 # イニシャライズ 25 def __init__(self): 26 pass 27 28 # 日付処理 29 def date(self): 30 # 変数 31 FormatDay = "%Y/%m/%d " 32 FormatTime = "%H:%M:%S" 33 34 # 今日の日時を取得 35 now = datetime.datetime.now() 36 37 # 明日の日時を取得 38 tmr = now + datetime.timedelta(days=1) 39 40 # 1990-01-01対策の現在日付を追加 41 date = now.strftime(FormatDay) 42 43 # 今日、明日を振り分ける時間を作成 44 start = datetime.datetime.strptime(date + start_time, FormatDay + FormatTime) 45 end = datetime.datetime.strptime(date + end_time, FormatDay + FormatTime) 46 47 # 今日、明日日付取得の分岐 48 if start <= now <= end: 49 # 今日日付の取得 50 today = "{}/{}/{}".format(now.year, now.month, now.day) 51 return today ,"today" 52 else: 53 # 明日の日付を取得 54 tommorow = "{}/{}/{}".format(tmr.year, tmr.month, tmr.day) 55 return tommorow ,"tommorow" 56 57 # csv処理 58 def csv(self,date): 59 # データが格納されている作業ディレクトリまでパス指定 60 os.chdir("/opt/GarbageDayReminder") 61 62 # csvファイルを読み込む 63 df = pandas.read_csv("garbage_day.csv") 64 65 # 何のゴミの日か取得 66 garbage = df[df["日付"] == date]["ゴミ"].values[0] 67 68 return garbage 69 70 # リマインダー処理 71 def reminder(self, now, garbage): 72 # 辞書 73 gb_dict = {"燃":"燃やすごみ",\ 74 "不":"燃やさないごみ",\ 75 "缶":"空き缶、スプレー缶、空きびん、廃蛍光管",\ 76 "資":"プラスチック製容器梱包、ペットボトル",\ 77 "紙":"紙類ごみ",\ 78 "草":"せんてい枝、庭の草", \ 79 "粗":"粗大ごみ"} 80 81 # 今日、明日の切替 82 if now == "today": 83 now = "今日" 84 elif now == "tommorow": 85 now = "明日" 86 else: 87 return 88 89 # リマインド 90 if garbage in gb_dict: 91 msg = "/opt/jtalk/jtalk.sh " + "ぽーーん!" + now + "は" + gb_dict[garbage] + "の日です" 92 os.system(msg) 93 else: 94 msg = "/opt/jtalk/jtalk.sh " + "ぽーーん!" + now + "のごみの日はありません" 95 os.system(msg) 96 97 # 中間処理 98 def intermediate(self): 99 # 日付処理 100 date, now = gdr.date() 101 102 # csv処理 103 garbage = gdr.csv(date) 104 105 # リマインダー処理 106 gdr.reminder(now, garbage) 107 108 # 指定時間処理 109 def specified_time(self): 110 # 指定時間に中間処理を実行 111 schedule.every().day.at(spc_time).do(gdr.intermediate) 112 while True: 113 schedule.run_pending() 114 time.sleep(1) 115 116 # チェック処理 117 def button(self): 118 GPIO.setmode(GPIO.BCM) 119 120 #GPIO12pinを入力モードとし、pull up設定とします 121 GPIO.setup(12,GPIO.IN,pull_up_down=GPIO.PUD_UP) 122 123 while True: 124 GPIO.wait_for_edge(12, GPIO.FALLING) 125 sw_counter = 0 126 127 while True: 128 sw_status = GPIO.input(12) 129 if sw_status == 0: 130 sw_counter = sw_counter + 1 131 if sw_counter >= 30: 132 print("長押し") 133 gdr.intermediate() 134 break 135 else: 136 print("短押し") 137 break 138 139 time.sleep(0.01) 140 141 print(sw_counter) 142 143 # メイン処理 144 def main(self): 145 # 指定時間処理(マルチスレッド) 146 t = Thread(target=gdr.specified_time) 147 t.start() 148 149 # デバッグ用 150 #gdr.intermediate() 151 152 # ボタン処理 153 gdr.button() 154 155# +++ 初期動作 +++ 156if __name__ == "__main__": 157 # GarbageDayReminderクラスをインスタンス化して実行 158 gdr = GarbageDayReminder() 159 gdr.main()

python.serviceを以下フォルダに置く

/etc/systemd/system/GarbageDayReminder.service

serviceファイル

[Unit] Description = GarbageDayReminder [Service] ExecStart = /usr/bin/python /opt/GarbageDayReminder/GarbageDayReminder.py Restart = always Type = simple [Install] WantedBy = multi-user.target

シンボリックを作成する

sudo systemctl enable GarbageDayReminder.service

pythonファイル自体はターミナルで実行して動いているのですが、自動起動しません。
なぜでしょう。

追加

2018.05.06 10:24
プログラムをそっくり変えたところ、起動時に起動していたので、どうやら、プログラムが問題かもしれません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ログを出すなりしてあなたのプログラムの動作を確認しては?
どーみても一般的な事象とも思えないんで、だれもアドバイスは出来ないと思いますぜ

投稿2018/05/06 06:09

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morutemu

2018/05/06 06:35

すみません、例えばログを出すにはどうしたらよいですか?
y_waiwai

2018/05/06 06:46

なにかメッセージを出してどこまでプログラムが走ったか、変数の状態はどうか、をプリントアウトするなりファイルで残すなり、シリアルポートに垂れ流して、ターミナルソフトなどでモニタするとか
morutemu

2018/05/06 23:20

なるほど。とりあえず、方法を思いついたので、ちょっと試して見ます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問