樹莓派從裝系統,連線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密碼和使用者名稱加入即可。類似下圖這樣的。
最上面這行你預設就有,你只需要仿照我寫的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