クーポン情報〜8/31までお得にセットが購入可能です。「ラズパイ4用アーマーケース」

GPIOとメール送信を利用した参考になるPythonプログラム

gpio-sendmail-python本体について
この記事は約7分で読めます。
スポンサーリンク

radioworld.comというサイトに参考になるPythonプログラムがありましたのでご紹介します。

radioworld.comは古くからあるラジオのニュースサイトのようですね。ラジオを通じたエンジニアさん達の記事がありました。その中で、Stephen Pooleさんの記事はラズパイについての記事で、そのまま使えるなと思います。

計測データの変化時にメール送信

ターミナルから実行し、割り当てられたGPIOピンを1分間隔で継続的にチェックし、取得するデータステータスが変化した場合に電子メールを送信するプログラムです。

計測するデータが一定で変化があった時にメールを送信しますから、逐次に変化している計測にはそのまま利用できません。しかし、少しプログラムを変更すれば対応させることが可能です。

コードのファイルを例では「genwatch.py」として保存し、実行権を与えます。

sudo chmod + x genwatch.py

終了するには、このコードではCTRL+Cを押して強制的にプログラムを停止します。
終了させる処理を追加しても良いでしょう。

./genwatch.py
注意点1

GPIOの番号に注意です。
gpiozeroライブラリを利用しGPIO 22番を使用しています。

この画像で言うと、左側が入力、右側が出力用です。そのため、22番以外に27番や4番も試してみてください。
電子工作に詳しくはありませんが、入力側はLow、出力側がHigjtとなります。つまり、電気が流れない=0と電気が流れた=1です。(間違ってたらすみません)

ラズパイって、単に小さなパソコンの代わりだけではなく、GPIOで入出力が扱えるのも世界で人気の理由になっています。

パソコンと組み込み系のどちらかではなく、どちらも両立できる事が頼もしいですよね!

それも比較的に簡単と言われるPython言語で制御できる点も、非エンジニアでない人なら尚更に敷居を低くしていると思います。

注意点2

メールサーバーの設定は利用するサービスにより制限があります。自身で契約している有料レンタルサーバーならば比較的に問題ありません。
Gmailなどは認証が必要でちょっと面倒に感じるでしょう。

ネットに接続するプロバイダの送信サーバー(SMTP)などは、自社のアクセスポイント以外からの接続は認めないようになっています。

Webスクレイピングの記事の中でGmailのメールサーバー認証についてご紹介しました。

PythonでAmazonの価格変動をウォッチするWebスクレイピング
Raspberry Pi公式ブログに紹介されていた「Bui...

少し面倒な上に分かりづらいので、初心者にはおすすめしません。手順を真似ていただければできますけどね。

以下がStephen Pooleさんのコードです。

#!/usr/bin/python

# These are libraries used by the program.
import smtplib
from gpiozero import Button
from time import sleep

# The “gpiozero” library calls an input a “Button.” If it goes LOW,
# we assume that the input has been turned on. Note that we assign
# the “genrun” Button to GPIO 22, which is actually pin 15 on the
# 40-pin connector.

genrun = Button(22)

# Other values to try might include pin 7 for GPIO 4 (“Button(4)”),
# or pin 13 for GPIO 27 (“Button(27)”).

# These are simple “flag” variables that I use to keep from sending
# the same email over and over.
running = 1
sent1 = 0
sent2 = 0

# IMPORTANT: Change these to your needed values. You’ll need a
# valid email account for the Pi, and a valid recipient. Replace
# “pi” and “recip” below with the correct values.
msg1 = “””From:pi@yourserver.com
Subject: Generator Is RUNNING! \n
To: recip@yourserver.com\n”””
msg2 = “””From:pi@yourserver.com
Subject: Generator Is NOT Running! \n
To: recip@yourserver.com\n”””

# This subroutine takes care of actually sending the email. You
# must edit this with a valid server name; you may need to change
# the port number. Note that this will also need “pi’s” password
# to log in, and that I’m using a secure SSL/TLS connection.
def sendmsg(mstr=””):
server = smtplib.SMTP_SSL(‘mail.yourmailserver.com’,port=465)
server.ehlo()
server.login(‘pi@yourserver.com’,’password’)
server.sendmail(‘pi@yourserver.com’,’recip@yourserver.com\n’,mstr)
server.quit() # exit the connection
# The main program loop, which runs forever, or until you
# press CTRL-C in the terminal that’s running this program.
while(1):

# Check the genrun “Button” object. The “running” flag
# prevents sending the same email if it has already
# been sent.
if genrun.is_pressed:
if( running == 0 ):
running = 1
print(“Gen running.”)
if not sent1:
sent1 = 1
sent2 = 0
sendmsg( msg1 )

# Same, but check for Button “genrun” NOT being pressed —
# i.e., the generator isn’t running.
if not genrun.is_pressed:
if( running == 1 ):
running = 0
print(“Gen idle.”)
if not sent2:
sent2 = 1
sent1 = 0
sendmsg( msg2 )

# Go to sleep for 60 seconds, then run again.
sleep(60.0)

こういうプログラムの見本は覚えなくてもストックしておくと、何かの仕組みで応用できるから、いつもブックマークしています。

ラズパイにプログラムを導入したら、もっとできることが増えます。お試しあれ。

情報元https://www.radioworld.com/tech-and-gear/radio-it-management/raspberry-pi-python-program

タイトルとURLをコピーしました