1. 程式人生 > >樹莓派從裝系統,連線wifi 到每次登入自動發郵件

樹莓派從裝系統,連線wifi 到每次登入自動發郵件

我自己有一個樹莓派,放那很久硬是沒有用到。今天在工作不忙的情況下,梳理一下樹莓派的使用。

首先,你需要下載一個樹莓派的映象檔案。樹莓派下載連結

樹莓派首先需要把你下載的這個系統燒到一個cf卡里面,其實就是寫到cf卡上。這個各個系統有專門的軟體。

我主要分享的寫完硬碟之後的樹莓派的操作。

如果你有hdmi線,這種情況是最好的。你就直接接上顯示器,就可以配置了。如果沒有,就需要網線的方式,比較複雜。需要提前寫一個ssh的空白檔案到根目錄中。

我之前用網線的時候,按其他人的教程操作,找到樹莓派的ip,連上過。但是我當時下載的那個版本樹莓派是有bug的,所有wifi一直開不起來。然後就放那了。這次直接用的就比較新的映象,bug已經被修復了。

如果你下載的是官方的映象,初始的使用者名稱和密碼分別是

user: pi
passwd: raspberry

連線上以後,我們首先開啟ssh服務。

sudo systemctl enable ssh
sudo systemctl start ssh

然後就是wifi了。
配置wifi的檔案是 /etc/wpa_supplicant/wpa_supplicant.conf
我們使用vim開啟它。

sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

開啟之後,直接把你的wifi密碼和使用者名稱加入即可。類似下圖這樣的。
新增自己wifi的樣式
最上面這行你預設就有,你只需要仿照我寫的network,把network裡面的ssid和psk對應的值寫成你連線的wifi名字和wifi密碼即可。

到這裡的時候,wifi就配置好了。如果不更換wifi,或者wifi不重啟,看到這裡就可以結束了。
因為我沒有顯示器,我用的公司的顯示器。所以我不能每次都連上顯示器來看ip地址。所以有一個很麻煩的問題就出來了。我怎麼知道我的ip地址變成多少了?每次開機的時候,連上wifi通知我一下就行了,於是我想到了發郵件的方式。

最開始用的騰訊的郵箱,然後還沒怎麼操作就被封了。就換了163的郵箱。效果很好。這裡我貼一下程式碼,供大家參考

#!/usr/bin/python3

import smtplib
from email.mime.text import MIMEText
import socket
import
requests from email.header import Header def get_ip_address(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("1.1.1.1", 80)) ipaddr = s.getsockname()[0] print(ipaddr) s.close() return ipaddr # 第三方 SMTP 服務 mail_host = "smtp.163.com" # 設定伺服器, 這個如果是qq, 就把163改成qq即可。 mail_user = "[email protected]" # 使用者名稱, 這裡必須得是你的郵箱。 mail_pass = "XXXXXXXX" # 口令,這裡填的不是密碼,是你的客戶端授權碼。如果報錯,多半是這裡的 ipaddr = get_ip_address() sender = '[email protected]' # 傳送者 receivers = ['[email protected]'] # 接收郵件,可設定為你的QQ郵箱或者其他郵箱 message = MIMEText('本次連線之後的ip為{}'.format(ipaddr), 'plain', 'utf-8') message['From'] = Header("樹莓派ip更新", 'utf-8') message['To'] = Header("樹莓派ip更新完成", 'utf-8') subject = '樹莓派wifi密碼更新提示' message['Subject'] = Header(subject, 'utf-8') # 檢查當前是否連上wifi def check_network(): while True: if requests.get("http://www.baidu.com").status_code == 200: print('Network is ready!') break else: print("newwork is not ready. Sleep 3s...") time.sleep(3) return True try: check_network() smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 25 為 SMTP 埠號 smtpObj.login(mail_user, mail_pass) smtpObj.sendmail(sender, receivers, message.as_string()) print ("郵件傳送成功") except smtplib.SMTPException: print ("Error: 無法傳送郵件") except Exception as e: print(e)

參考:

http://shumeipai.nxez.com/download
https://www.cnblogs.com/shubin/p/7746399.html