Raspberry Pi 作品集
気象情報をスマホにメールで送信する
気象情報をスマホにメールで送信する
B+ と言うモデルを3台購入。
最初に取り組んだのが、照度・気温・湿度・気圧を測定する電子工作で、出力は ”キャラクタLCD” だった。
最初に取り組んだのが、照度・気温・湿度・気圧を測定する電子工作で、出力は ”キャラクタLCD” だった。
しかし、これだと Raspberry Pi を常に見に行かなければならない。
そこで、一定間隔で測定した結果を、自分の携帯に送信出来れば家にいなくとも見れると、 メールで通知するプログラムを ”Python” と言う言語で書いた。
スポンサー リンク
目 次
Raspberry Pi 壁掛け型『百葉箱』
1. Raspberry Pi モデル B+
使用中の「Raspberry Pi」は、初期のモデル「B+」でリビジョンは「0010」。
ハードウェアのモデルを確認する方法。
cat /proc/cpuinfo
Pythonによる 基盤のリビジョン番号を確認するコマンド。
sudo python
>>> import RPi.GPIO as GPIO
>>> GPIO.RPI_REVISION
・・・ Ctrl + D で終了
>>> import RPi.GPIO as GPIO
>>> GPIO.RPI_REVISION
・・・ Ctrl + D で終了
OSのバージョンを確認するコマンド。
cat /etc/os-release
カーネルのバージョンを確認するコマンド。
uname -a
Pythonのバージョンを確認するコマンド。
python --version
2. 使用した部品
①.湿度センサー:
HIH6130:スイッチサイエンス 3,743 円
②.気圧センサー:
MPL115A2:秋月電子通商 600 円
③.照度測定用CdSセル(光センサー):
GL5528 1MΩ:秋月電子通商 40 円
④.ADコンバーター:
ADS1015 スイッチサイエンス 1,393 円
ADS1015 スイッチサイエンス 1,393 円
④.ADS1015: 12 ビット、3.3kSPS、4 チャネル・デルタ・シグマ ADC。
CdSセル(光センサー)のアナログ情報を入力して、デジタル情報に変換。
ADS1015は、12 ビット(4096)のデータに変換するので約4000段階の値が取得できる。
CdSセル(光センサー)のアナログ情報を入力して、デジタル情報に変換。
ADS1015は、12 ビット(4096)のデータに変換するので約4000段階の値が取得できる。
PGA (プログラマブル・ゲイン・アンプ) と発振器と VREF とコンパレータと I2C 搭載。https://www.ti.com/product/ja-jp/ADS1015
3. 気象情報取得回路図
4. Python プログラム
Python PGM List
#! /usr/bin/env /usr/bin/python
# -*- coding: utf-8 -*-
import datetime
import time
import signal, sys
from Adafruit_ADS1x15 import ADS1x15
import smbus
import mpl1152a2
from acm1602 import acm1602
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate
# アナログ変換セットアップ
ADS1015 = 0x00
ADS1115 = 0x01
gain = 4096
sps = 250
adc = ADS1x15( ic=ADS1015 )
# メールセットアップ
def create_message2(from_addr, to_addr, subject, body, encoding):
# 'text/plain; charset="encoding"'というMIME文書を作ります
msg = MIMEText(body, 'plain', encoding)
msg['Subject'] = Header(subject, encoding)
msg['From'] = from_addr
msg['To'] = to_addr
msg['Date'] = formatdate()
return msg
def send_via_gmail(from_addr, to_addr, msg):
s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.login <span style="color: red;">('メールアドレス@gmail.com', 'パスワード')</span>
s.sendmail(from_addr, [to_addr], msg.as_string())
s.close()
# ループ
SLEEPTIME = 3600
while True:
# 日時取得
d1 = datetime.datetime.today()
d2 = datetime.datetime.strftime(d1,"%Y-%m-%d/%H:%M:%S")
# 照度取得
volts = adc.readADCSingleEnded( 0, gain, sps ) / 1000
#if volts > 1:
# print( "Well Lighted : " + str(volts) + "V" )
#else:
# print( "Dark : " + str(volts) + "V" )
# 湿度・気温・気圧取得
i2c_channel = 1
i2c = smbus.SMBus( i2c_channel )
dac = i2c.read_i2c_block_data( 0x27, 0, 4 )
h = ( ( dac[0] & 0x3f ) << 8 ) | dac[1]
humi = (float)(h) / 16383 * 100
t = ( dac[2] << 6 ) | (dac[3] >> 2)
temp = (float)(t) /16383 * 165 - 40
pres = mpl1152a2.getpressur( i2c_channel )
# メール送信
if __name__ == '__main__':
from_addr = 'xxxxx@gmail.com'
to_addr = 'yyyyy@hotmail.co.jp'
subject = u'3F-気象情報'.encode('ISO-2022-JP')
body = '%s\n' % d2 + u' 照度 :
' + str(volts) + " V\n" + u' 温度 :
%.2f C\n' % temp + u" 湿度 :
%.2f %%\n" % humi + u" 気圧 :
%.2f hPa\n" % pres + u"onjipi より、送信しています。\n"
msg = create_message2(from_addr, to_addr, subject, body,'ISO-2022-JP')
send_via_gmail(from_addr, to_addr, msg)
time.sleep( SLEEPTIME )
5. pythonからGmailを送信する際のSMTPAuthenticationError
SMTPAuthenticationError。
File "/usr/lib/python2.7/smtplib.py", line 613, in login
raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (534, '5.7.9 Application-specific password required. Learn more at\n5.7.9 https://support.google.com/mail/?p=InvalidSecondFactor 15-20020aa7914f000000b0058d9428e482sm8421722pfi.85 - gsmtp')
raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (534, '5.7.9 Application-specific password required. Learn more at\n5.7.9 https://support.google.com/mail/?p=InvalidSecondFactor 15-20020aa7914f000000b0058d9428e482sm8421722pfi.85 - gsmtp')
対策:
2段階認証プロセスを使用している場合は、googleアカウントのパスワードではなく、アプリ パスワードを使ってログインする。
2段階認証プロセスを使用している場合は、googleアカウントのパスワードではなく、アプリ パスワードを使ってログインする。
アプリ パスワードの取得要領
6. まとめ
まずは、POPメール(PC)で試したのち、スマホ(DOCOMO)にも送信することが出来た。
この過程で、メールボックスの内容を見る方法が判ったり、自動で・大量のメールを送る方法なども理解でき、ハッカー気分に浸る。
この過程で、メールボックスの内容を見る方法が判ったり、自動で・大量のメールを送る方法なども理解でき、ハッカー気分に浸る。
参考書やネットの情報を頼りに、年末年始、昼夜を問わず没頭した。久しぶりに熱中できることに巡り合い、『気力』なるものに改めて気づく。
参考:Raspberry Pi 気象情報をキャラクタLCDに表示
参考:Raspberry Pi 監視カメラを構築し遠隔監視が出来るようにする
以上。
(2015.01.05)
スポンサー リンク