スポンサーリンク

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

gpio-sendmail-pythonRaspberry Pi モデル別
Raspberry Pi モデル別

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番を使用しています。

GPIO-Pinout-Diagram-2

画像引用:公式サイトドキュメント

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

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

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

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

注意点2

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

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

Webスクレイピングの記事「PythonでAmazonの価格変動をウォッチするWebスクレイピング」の中でGmailのメールサーバー認証についてご紹介しました。

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

以下が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)

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

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

情報元Raspberry Pi Python program

\ 初めてのRaspberry Pi はセットで始めよう /
NewLife NewDesingストア

2台目にも最適な最小基本セット!

\ 初めてのRaspberry Pi はセットで始めよう /
NewLife NewDesingストア

2台目にも最適な最小基本セット!

スポンサーリンク
■ラズパイダからのお知らせ
最初はセットになった商品がオススメ!

Raspberry Pi 4Bが発売されてから、セットアップも簡単になってきました。
とはいえ、ラズパイは基板として売っているため、まだあまりよく分からない方がバラバラに必要な物を購入するのは大変です。
初めの頃は何が良いのかも分かりません。

ラズパイダでは、たくさんのRaspberry Piを購入してきました。ケース1つにしても色々とメリット・デメリットがあります。

慣れるまではセットになった商品で善し悪しを含めてトライしてみてください。

オススメをまとめました。

ラズパイダ

コメント ご感想をお願いします。

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