メール
 Computer >> コンピューター >  >> ソフトウェア >> メール

Raspberry PiでGmail通知ライトを自作する方法

この記事では、Raspberry Piを使った手軽な電子工作として、Gmailの未読メール通知ライトの作り方を紹介します。未読メールがあると、Pythonスクリプトが自動的にLEDを点灯させる仕組みです。必要なパーツはごくわずかで、1時間もあれば完成します。LEDはMinecraftのレッドストーンブロック風にアレンジしたり、クリア樹脂で3Dプリントしたオブジェクトに収めたりと、自由にデザインできます。完成イメージは以下の通りです。

必要なもの

  • Raspberry Pi × 1
  • ブレッドボード × 1
  • 220Ω抵抗 × 1
  • 5mm LED × 1
  • Gmailアカウント × 1
  • オス-メス ジャンパーワイヤー

このプロジェクトにはどのRaspberry Piでも使えます。Pi Zeroでも問題ありません。必要なGPIOピンは1本だけで、CPUへの負荷もほとんどありません。スターターキットをお持ちなら、十分すぎるほどのパーツが揃っているはずです。

全体の構成

Raspberry PiでGmail通知ライトを自作する方法

仕組みはとてもシンプルです。LED(発光ダイオード)をRaspberry PiのGPIO(汎用入出力)ピンに接続し、定期的に実行される簡単なPythonスクリプトが未読メールをチェックして、LEDのオン/オフを切り替えます。

ハードウェアの組み立て

Raspberry PiでGmail通知ライトを自作する方法

LEDのアノード(長い足・プラス側)を抵抗に接続し、そこからGPIO 14番ピンにつなぎます。GPIOピンはどれを使っても構いませんが、モデルによってピン配置が少し異なるため、事前にピン配置図を確認しておきましょう。カソード(短い足・平らな面がある側)はグランド(GND)に接続します。

Raspberry Piのセットアップ

Raspberry PiでGmail通知ライトを自作する方法

Raspberry PiにOSがインストールされていれば、特別な設定はほとんど不要です。まず新しいターミナルを開きましょう(画面左上のメニューアクセサリTerminal)。Pythonスクリプトを保存するための新しいフォルダを作成します。以下のコマンドを入力してください。

pwd

これは「Print Working Directory」の略で、現在いるフォルダを表示します(デフォルトでは「/home/pi」)。Documentsフォルダに移動し、「gmail_python」という新しいディレクトリ(フォルダ)を作成しましょう。

cd Documents/
sudo mkdir gmail_python

「mkdir」は「Make Directory」の略で、続けて指定した名前のディレクトリを作成するコマンドです。作成できたか確認してみましょう。

ls

間違えて作ってしまった場合は、次のコマンドでディレクトリを削除できます。

sudo rm -r gmail_python

次に、新しいディレクトリへ移動します。

cd gmail_python/

新しいPythonスクリプトを作成します。

sudo nano check_messages.py

これでスクリプトが作成され、Nanoエディタで編集できる状態になります。Vimなど他のエディタを使ってももちろん構いませんが、初心者にはNanoの方が扱いやすいでしょう。

CTRL + Xキーを押すとNanoを終了してターミナルに戻れます。

Pythonのセットアップ

Raspberry PiでGmail通知ライトを自作する方法

Piの準備ができたら、いよいよコードを書いていきます。このプロジェクトでは、Charlie Guo氏による高機能な「Gmail Pythonライブラリ」を使用します。GitHubからライブラリをダウンロードして展開すると、中に「gmail」というフォルダがあるはずです。このフォルダ全体を「/home/pi/Documents/gmail_python」にコピーしてください。

コマンドラインに戻り、スクリプトを再度開きます(上矢印キーを押すと、以前入力したコマンドを呼び出せます)。

sudo nano check_messages.py

ファイル作成時と同じコマンドですが、すでにファイルが存在する場合はそのファイルが開かれ、存在しない場合は新規作成されます。以下がPythonコードです。

import gmail, RPi.GPIO as GPIO, time # import modules
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) # tell the Pi what headers to use
GPIO.setup(14, GPIO.OUT) # tell the Pi this pin is an output
g = gmail.login('YOUREMAIL@gmail.com', 'YOUR PASSWORD')
unread_messages = g.inbox().mail(unread=True)
total_messages = 0
for message in unread_messages:
total_messages += 1
if total_messages > 0:
# there are unread emails, turn light on
GPIO.output(14, True)
else:
# there are no unread emails, turn light off
GPIO.output(14, False)

動作させるには、自分のユーザー名とパスワードを入力する必要があります。gmailプラグインの完全なソースコードも公開されているので、気になる方は確認してみてください。パスワードを直接入力したくない場合や、二段階認証を使用している場合は、OAuth2でGmailに接続する必要があります。Googleが公開しているスタートガイドが参考になります。なお、現在のGmailでは通常のパスワードによるログインが制限されているため、Googleアカウントの設定から「アプリパスワード」を発行して利用するのが安全です。

それではコードを詳しく見ていきましょう。最初にいくつかのモジュールをインポートしています。Pythonのモジュールとは、特定の目的のために書かれた小さなコードの集まりです(Arduino IDEにおけるライブラリのようなものです)。RPi.GPIOはPiのGPIOにアクセスするための専用モジュール、gmailは先ほどダウンロードしたモジュール、timeはタイミング機能を提供するPython標準モジュールです。「GPIO.setmode」と「GPIO.setup」により、14番ピンを出力として使用すること、そして「Broadcomピン番号」(BCM)方式を使うことをPiに伝えています。

次の行でGmailアカウントに接続します。「g」というオブジェクトを作成し、インポートしたgmailモジュールのloginメソッドを呼び出しています。自分のGmailアドレスとパスワードを入力するのを忘れないでください。

g = gmail.login('YOUREMAIL@gmail.com', 'YOUR PASSWORD')

続いて、すべての未読メッセージを取得して「unread_messages」という変数に格納します。

unread_messages = g.inbox().mail(unread=True)

「unread=True」というパラメータが渡されていることに注目してください。送信者や件名など、別の条件でメッセージを取得することも可能です。詳細についてはAPIドキュメントを参照してください。

次に、forループですべてのメッセージを処理します。

for message in unread_messages:
total_messages += 1

forループは非常に便利な構文です。同じコードブロックを何度も繰り返し実行でき、毎回少し異なる値を使うこともできます。このforループでは、unread_messages内の各メッセージを順に処理し、「total_messages」変数を1ずつ増やしています。

最後に、シンプルなif文で条件分岐を行います。未読メールがあればLEDを点灯させ、なければ消灯します。

Pythonは大文字小文字を区別し、インデント(空白)にも意味を持つ言語です。コードがうまく動かない場合は、オンラインのバリデーターサイトを利用してみましょう。Pythonコードを貼り付けて「validate above python code」ボタンを押せば、エラーの有無を教えてくれます。

ターミナルに戻って、スクリプトを実行してみましょう。

python check_messages.py

このコマンドでスクリプトが実行されます。受信トレイの一部のメールを手動で未読に変更してから、もう一度スクリプトを実行してみてください。受信トレイの状態に応じてLEDが点灯・消灯するはずです。

cronで自動化する

スクリプトが正常に動いたら、次は自動化です。最も簡単な方法はcronジョブを使うことです。cronジョブはタスクやスクリプトの実行をスケジュールする仕組みで、自動バックアップなどによく使われます。Crontab(スケジュール済みタスクの一覧)を開きます。

crontab -e

まだスケジュールされたタスクがない場合、このファイルは空です(「#」で始まる説明文やコメントが含まれている場合もあります)。すでにエントリーがある場合は、新しい行にコマンドを追加するだけです。

* * * * * python ~/pi/Documents/gmail_python/check_messages.py

5つの「*」(アスタリスク)はタスクの実行頻度を指定します(ここはかなり柔軟に設定でき、例えば「毎月第2水曜日の午前2時」のような指定も可能です)。この5つの星は「毎分実行」を意味し、これが最小の間隔となります。次の「python」は、スクリプトをPythonファイルとして実行するようスケジューラに指示しています。最後の「~/pi/Documents/gmail_python/check_messages.py」はスクリプトへの絶対パスです。相対パスでは動作しないので注意してください。

これで、あなただけのGmail通知ライトが完成しました!条件やフィルタを変えて特定のメールだけを検知するように改造したり、まったく別のコードを実行させたりするのも簡単です。例えば、メールの内容に応じてツイートするTwitterボットを作るのも面白いでしょう。

どんな通知ボックスを作ったのか、ぜひコメント欄で教えてください!

  1. Gmailで連絡先グループを作成する2つの方法を初心者向けに解説

    仕事でGmailを使っていると、同じメンバーに何度もメールを送ることがありますよね。毎回メールアドレスを一つひとつ入力するのは手間がかかり、時間のロスにもなります。そこで便利なのが「連絡先グループ」機能です。連絡先をグループ化しておけば、メール作成時に宛先欄へグループ名を入力するだけで、登録済みの全員に一括で送信できます。しかもグループは複数作成できるため、「仕事用」「取引先用」「プライベート用」など、用途別に整理すれば連絡先管理がさらに楽になります。ここでは、Gmailで連絡先グループを作成する手順を画像付きでわかりやすく解説します。Google連絡帳を開くまずはGoogle連絡帳を開きまし

  2. Elegoo Unoで学ぶ!LEDをセットアップしてコードで点滅させる方法

    LEDをコードで制御するのは、ソフトウェアとハードウェアがどのように連携するのかを体感できる、初心者に最適な入門プロジェクトです。週末に手軽に完成できるシンプルな内容ながら、ハードウェアの基ハードウェアの基礎的な知識をしっかり身につけることができます。このプロジェクトを終える頃には、自分で書いたコードでLEDを点灯・消灯させられるようになり、好きな間隔で点滅をコントロールする方法や、ハードウェアの基本的な仕組みを理解できるでしょう。Elegoo Unoスターターキットには、シンプルなLEDライトを作るために必要なハードウェアと説明書がすべて揃っています。LEDの点滅は、同キットに収録された最初