Wi-Fi接続したRaspberry Pi Pico Wからメール送信
概要
組込デバイスからの通知はLINEやslackが流行っているようですが、環境によってはメール送信の方が都合がいいこともあるかと思います。ここではGmailの送信サーバーを使ってメールを送信する方法を解説します。
実行環境
MCU:Raspberry Pi Pico W
IDE:Thonny 4.1.4(Python:3.10.11)
MicroPython:RPI_PICO_W-20240602-v1.23.0.uf2
MicroPythonの書き込み、Thonnyの環境構築は完了している前提で進めます。Lチカが出来ていれば十分です。
参考サイト
Googleのアプリパスワードを取得
Gmailの送信元に使いたいアカウントでGoogleにログインし、以下のリンク先でGoogleのアプリパスワードを取得します。
https://myaccount.google.com/apppasswords
後で見てわかりやすいアプリ名を入力し、「作成」をクリックします。
アプリパスワードが表示されるので、どこかにメモしてください。後ほどプログラムで使用します。
メール送信ライブラリ「uMail」の導入
このライブラリはパッケージ管理ツールに登録されていないので、手動で導入が必要になります。
まずGithubのuMailのページを開きます。
https://github.com/shawwwn/uMail/blob/master/umail.py
Thonnyで新規ファイルを作成し、ソースコードをコピペします。
コピペをしたらCtrl+Fで検索画面を開き「ussl」と検索、すべて「ssl」に置き換えてください。
※MicroPython-v1.23からライブラリ名が変わったようです。
コピペをしたら[ファイル] – [名前を付けて保存]をクリックします。
以下のように保存先の選択肢が出るので「Raspberry Pi Pico」を選択します。
保存のダイアログが開くので「umail.py」というファイル名で保存します。
main.pyのコーディング
準備が整ったのでmain.pyのコーディングに入ります。以下のコードをコピペしてください。
詳しい意味は参考サイトを参照してください。
****となっている各パラメータは以下を入力してください
sender_email | 送信元メールアドレス ※アプリパスワードを取得したアカウントのアドレスを入れてください。 |
sender_app_password | アプリパスワード 先ほど取得したアプリパスワードを入れます。 |
recipient_email | 送信先メールアドレス |
ssid | Wi-FiのSSID |
password | Wi-Fiのパスワード |
import umail import network import time # Your email details sender_email = '**********@gmail.com' sender_name = 'RaspberryPiPico' sender_app_password = '****************' recipient_email ='**********@gmail.com' email_subject ='Email from RPi Pico' # Your network credentials ssid = '**********' password = '**********' #Connect to Wi-Fi wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(ssid, password) # Wait for connection to establish max_wait = 10 while max_wait > 0: if wlan.status() < 0 or wlan.status() >= 3: break max_wait -= 1 print('waiting for connection...') time.sleep(1) # Manage connection errors if wlan.status() != 3: raise RuntimeError('Network Connection has failed') else: print('connected') # Send email once after MCU boots up smtp = umail.SMTP('smtp.gmail.com', 465, ssl=True) smtp.login(sender_email, sender_app_password) smtp.to(recipient_email) smtp.write("From:" + sender_name + "<"+ sender_email+">\n") smtp.write("Subject:" + email_subject + "\n") smtp.write("This is an email from Raspberry Pi Pico") smtp.send() smtp.quit() print('E-Mail Sent')
動作確認
「現在のスクリプトを実行」をクリックします。「connected」と出ればWi-Fi接続に成功、「E-Mail Sent」と出ればメール送信完了です。上手くいけば送信元の送信済みボックスと送信先の受信ボックスにメールがあるはずです。
ディスカッション
コメント一覧
まだ、コメントがありません