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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Raspberry Pi

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

Python

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

Q&A

解決済

1回答

1046閲覧

Raspberry pi ZEROで人感センサが反応したときGmailが送信されるシステムをパソコンに接続せずに自動実行できるようにしたい

jikkenyou

総合スコア3

Raspberry Pi

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

Python

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

0グッド

0クリップ

投稿2022/02/12 15:06

編集2022/02/13 10:55

まずraspberry pi ZEROで人感センサが反応したときGmailが送信されるスクリプトが以下のものです。

code

1import requests 2import RPi.GPIO as GPIO 3import time 4 5 6import smtplib 7from email.mime.text import MIMEText 8from email.utils import formatdate 9 10 11 12SLEEPTIME = 60 13 14 15GPIO_PIN = 16 16GPIO.setmode(GPIO.BCM) 17GPIO.setup(GPIO_PIN,GPIO.IN) 18 19def main(): 20 sendAddress = '×××@gmail.com' 21 password = '×××' 22 23 subject = '見守りIoTデバイス 在室通知' 24 bodyText = '在室が検知されました' 25 fromAddress = '×××@gmail.com' 26 toAddress = '×××@gmail.com' 27 28# SMTPサーバに接続 29 smtpobj = smtplib.SMTP('smtp.gmail.com', 587) 30 smtpobj.starttls() 31 smtpobj.login(sendAddress, password) 32 33# メール作成 34 msg = MIMEText(bodyText) 35 msg['Subject'] = subject 36 msg['From'] = fromAddress 37 msg['To'] = toAddress 38 msg['Date'] = formatdate() 39 40# 作成したメールを送信 41 smtpobj.send_message(msg) 42 smtpobj.close() 43 44try: 45 while True: 46 if(GPIO.input(GPIO_PIN) == GPIO.HIGH): 47 main() 48 time.sleep(SLEEPTIME) 49 50finally: 51 GPIO.cleanup()

この実行ファイルは「kk.py」という名前で保存しました。

その後、ラズパイが起動した時、自動でこのプログラムが実行可能にするため、ラズパイのターミナル内で「$ sudo nano /etc/rc.local」コマンドを入力すると以下の文面が表示されます。

#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi python3 /home/pi/Desktop/kk.py exit 0

この構文のうち、下から2行目の
「python3 /home/pi/Desktop/kk.py」は自分で付け足しました。

これで編集を完了し保存した後、ラズパイを再起動すると、センサが反応したとき自動でメールが送信されました。

それでここからが本題で、これらはパソコンにラズパイを接続して起動することで自動実行されていますが、これをパソコンでではなく、モバイルバッテリーにさして起動する際、自動実行できるようにしたいわけです。

そこで試したことが、「$ sudo nano /etc/rc.local」にて、実行ファイルの前に「while ! /sbin/ifconfig eth0 | grep -q 'inet [0-9]'; do sleep 3 done」を加えることで改善されるという情報をもとに内容を修正しました。
※無線 LAN の場合は、eth0 を wlan0に変更するみたいなので、自分の場合はwlan0を使用していますhttps://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12256934807

#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi while ! /sbin/ifconfig wlan0 | grep -q 'inet [0-9]'; do sleep 3 python3 /home/pi/Desktop/kk.py exit 0

これで、モバイルバッテリーにさして起動して試したところメールが来ませんでした。

なぜできないのか原因がわからないというのが現状です。
どなたかご教授よろしくお願いします。

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

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

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

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

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

AbeTakashi

2022/02/12 15:51 編集

ちょっと質問文の意味が分からないですね。「メールが送られてきません」だけ書かれても、そもそもどうやってメールを送信しているのかすら質問文にはありません(「実行ファイルはpyファイルです」のことですか? であれば、最低限そのpyファイルは質問文にあってもいいはずです。間違っていなくても何をしようとしているのかは多少は分かりますので)。「Gmailが送信されるシステム」「パソコン(Windows)につないだ状態での自動実行は可能です」というのもよく分からないですね。Raspberry Piの話をしてますよね? 第三者が見ても現在の状況が分かるよう、かつ、困っていることは具体的に記述して(エラーが出てるならエラー内容を表示するなど)、もうすこし丁寧に質問文を再構成された方が良いかと思います。 参考) https://teratail.com/help/question-tips 全部読んで頂きたいですが、とくに「3. 正しく伝わる質問の仕方」はしっかりと読まれた上で、今回の質問文をいまいちど見つめ直してみてください。現状ではエスパーでも現れない限りお望みの回答は出ない感じです。 追記) あと「while ! /sbin/ifconfig eth0 | grep -q 'inet [0-9]'; do sleep 3 done」は具体的に何をしようとしてるコマンドですか? このコマンドで何か挙動が変わるようなことはなさそうな気がしますけど。このコマンドの意味を具体的に教えてください。
guest

回答1

0

ベストアンサー

知恵袋のサイトも見て、なんとなく「while ! /sbin/ifconfig wlan0 | grep -q 'inet [0-9]'; do sleep 3 done」の意味は分かりました。Raspberry Piは起動直後にwifiのインターフェースを認識しない不具合なのか仕様なのか分かりませんが、とにかくwifiが認識されないんでしょうね。なので「wifi認識できるまで、そこで何もせずに待つ」という処理を入れろという意味だと思います(何かの設定を変えているわけではない)。

/etc/rc.localを見ると

while ! /sbin/ifconfig wlan0 | grep -q 'inet [0-9]'; do sleep 3

と追記されたようですが、おそらく

while ! /sbin/ifconfig wlan0 | grep -q 'inet [0-9]'; do sleep 3; done

まで書かないとその後ろの処理に行かない気がします。これでもメールが送信されないなら、単純にkk.pyがおかしいということでしょう。

投稿2022/02/12 17:29

AbeTakashi

総合スコア4466

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

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

jikkenyou

2022/02/13 01:55

回答ありがとうございます。 おっしゃる通り「; done」を末尾につけて起動してみたところ、自動実行ができました! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問