HOME → 1 Raspberry Pi → 03 作品集 → 

Raspberry Pi 気象情報を メールで送信する

Raspberry Pi 作品集
気象情報をスマホにメールで送信する
 
docomoml12014年末、Raspberry Pi と言う超小型のシングルボードコンピュータに出会い、電子工作の趣味が甦る。
 
B+ と言うモデルを3台購入。
最初に取り組んだのが、照度・気温・湿度・気圧を測定する電子工作で、出力は ”キャラクタLCD” だった。
 
しかし、これだと Raspberry Pi を常に見に行かなければならない。
 
そこで、一定間隔で測定した結果を、自分の携帯に送信出来れば家にいなくとも見れると、 メールで通知するプログラムを ”Python” と言う言語で書いた。
 

 

スポンサー リンク

 

 
 
 
 
Raspberry Pi 壁掛け型『百葉箱』 
 
 
 
1. Raspberry Pi モデル B+
 
使用中の「Raspberry Pi」は、初期のモデル「B+」でリビジョンは「0010」。
 
ハードウェアのモデルを確認する方法。
cat /proc/cpuinfo
 
cat /proc/cpuinfo
 
 
Pythonによる 基盤のリビジョン番号を確認するコマンド。
sudo python
>>> import RPi.GPIO as GPIO
>>> GPIO.RPI_REVISION
 ・・・ Ctrl + D で終了
 
Pythonによる 基盤のリビジョン番号を確認する
リビジョン番号は「3」と表示される。
I2Cのチャンネル番号(I2Cバス番号)は「i2c_channel = 1」とする。
 
OSのバージョンを確認するコマンド。
cat /etc/os-release
 
OSのバージョンを確認
 
カーネルのバージョンを確認するコマンド。
uname -a
 
カーネルのバージョンを確認
 
Pythonのバージョンを確認するコマンド。
python --version
 
Pythonのバージョンを確認する
 
 
 
2. 使用した部品
 

①.湿度センサー:
HIH6130:スイッチサイエンス 3,743 円

②.気圧センサー:
MPL115A2:秋月電子通商 600 円

③.照度測定用CdSセル(光センサー):
GL5528 1MΩ:秋月電子通商 40 円

④.ADコンバーター:
ADS1015 スイッチサイエンス 1,393 円
 
①.HIH-6130 デジタル湿度センサ。slave addresses (0x27
HIH-6130 デジタル湿度センサ
 
②.MPL115A2 気圧センサモジュール。slave addresses (0x60
MPL115A2 気圧センサモジュール
 
③.照度測定用 CdSセル(光センサー):GL5528 1MΩ。
・明るい状態(10Lux)10~20KΩ。
・暗い状態 500KΩ。
照度測定用CdSセル(光センサー):GL5528 1MΩ
 
④.ADS1015: 12 ビット、3.3kSPS、4 チャネル・デルタ・シグマ ADC。
CdSセル(光センサー)のアナログ情報を入力して、デジタル情報に変換。
ADS1015は、12 ビット(4096)のデータに変換するので約4000段階の値が取得できる。

ADS1015: 12 ビット、3.3kSPS、4 チャネル・デルタ・シグマ ADC
 
PGA (プログラマブル・ゲイン・アンプ) と発振器と VREF とコンパレータと I2C 搭載。https://www.ti.com/product/ja-jp/ADS1015
 
slave addresses(ADDRピンの接続先でアドレスが選択できる)
ADS1015: slave addresses
 
 
 
3. 気象情報取得回路図
 
I2Cデバイス接続回路図
 
 
 
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')
 
対策:
2段階認証プロセスを使用している場合は、googleアカウントのパスワードではなく、アプリ パスワードを使ってログインする。
 
アプリ パスワードの取得要領
 
googleアカウントにログインした後、「セキュリティ」画面を開く。
googleアカウントにログインした後、「セキュリティ」画面を開く
 
「アプリ パスワード」を開く。
「アプリ パスワード」を開く
 
「アプリを選択→メール」にし、「デバイス選択→その他(名前を入力)」にして、「生成」ボタンをクリックする。
「アプリを選択→メール」にし、「デバイス選択→その他(名前を入力)」にして、「生成」ボタンをクリックする
 
デバイス名を入力すると、「アプリパスワード」が生成されるのでコピーして保存する。
デバイス名を入力すると、「アプリパスワード」が生成されるのでコピーして保存する
 
「完了」ボタンをクリックすると、入力したデバイス名の「アプリパスワード」が表示される。
「完了」ボタンをクリックすると、入力したデバイス名の「アプリパスワード」が表示される
 
Python プログラムに、生成された「アプリパスワード」をセットする。
Python プログラムに、生成された「アプリパスワード」をセットする
 
Python プログラムの実行結果 → OK。
Python プログラムの実行結果 → OK
 
 
 
6. まとめ
 
まずは、POPメール(PC)で試したのち、スマホ(DOCOMO)にも送信することが出来た。
popmail
この過程で、メールボックスの内容を見る方法が判ったり、自動で・大量のメールを送る方法なども理解でき、ハッカー気分に浸る。
 
 
参考書やネットの情報を頼りに、年末年始、昼夜を問わず没頭した。久しぶりに熱中できることに巡り合い、『気力』なるものに改めて気づく。
 
 
参考:Raspberry Pi 気象情報をキャラクタLCDに表示
 
参考:Raspberry Pi 監視カメラを構築し遠隔監視が出来るようにする
 

以上。
(2015.01.05)

 

 

スポンサー リンク

 

             

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください