1. 程式人生 > >樹莓派連線多個wifi並上報IP地址

樹莓派連線多個wifi並上報IP地址

在進到terminal後,你就可以開始安裝軟體,修改配置了 可能需要安裝的軟體(因為我拿到手的時候,發現系統裡已經有了,不知道是某寶的親幫我裝的,還是raspbian已經預裝了)  sudo apt-get install wireless-tools 然後可以開始配置網路了,修改/etc/network/interfaces檔案,把它修改成這個樣子  auto lo  iface lo inet loopback  auto eth0  iface eth0 inet dhcp  allow-hotplug wlan0  auto wlan0  iface wlan0 inet dhcp      wpa-ssid YOUR-SSID-HERE      wpa-psk YOUR-PASSWORD-HERE 主要是新增wpa-ssid和wpa-psk,直接把你要連線的wifi的ssid和對應密碼寫上就行了。 重啟網路  /etc/init.d/networking restart  # or: service networking restart 然後你應該就已經連上wifi了,如果沒有連上: 檢查時候你要連線的wifi是不是隱藏的WiFi(不廣播自己的ssid的WiFi網路),這種配置方法沒辦法連線隱藏的WiFi。通過下面的命令檢查你要連的WiFi是不是在列表裡: iwlist wlan0 scan 檢查你的ssid和密碼是否正確!!! 檢查你要連的wifi網路是否正常,檢查你的USB無線網絡卡是不是正常 如果還連不上就google吧,我也無能為力了 這樣的配置在你重新啟動樹莓派後也能自動連線這個WiFi,這裡連線WiFi使用的是wpa_supplicant 自動連線多個WiFi網路 當你經常切換到不同WiFi網路中時,你可以配置多個WiFi網路,讓樹莓派能自動連線到可用WiFi網路中。這裡就要用到高大上的wpa_supplicant.conf了 修改/etc/wpa_supplicant/wpa_supplicant.conf,下面是我使用的配置檔案:  ctrl_interface=/var/run/wpa_supplicant  #ap_scan=1  network={         ssid="wo_shi_yige_wifi_ssid"         scan_ssid=1         psk="wo_shi_mi_ma"         priority=5  }  network={         ssid="pi"         psk="onlyforpi"         priority=1  } ap_scan:1是預設值,因此我注掉了 1:這個模式下總是先連線可見的WiFi,如果掃描完所有可見的網路之後都沒有連線上,則開始連線隱藏WiFi。 2:會按照network定義的順序連線WiFi網路,遇到隱藏的將立刻開始連線,因此在這個模式下連線順序不受priority影響 ctrl_interface:這個資料夾裡面存的是一個當前使用的interface的socket檔案,可以供其他程式使用讀取WiFi狀態資訊 network:是一個連線一個WiFi網路的配置,可以有多個,wpa_supplicant會按照priority指定的優先順序(數字越大越先連線)來連線,當然,在這個列表裡面隱藏WiFi不受priority的影響,隱藏WiFi總是在可見WiFi不能連線時才開始連線。 ssid:網路的ssid psk:密碼 priority:連線優先順序,越大越優先 scan_ssid:連線隱藏WiFi時需要指定該值為1 修改/etc/network/interfaces使用wpa_supplicant.conf來配置無線網路  auto lo  iface lo inet loopback  auto eth0  iface eth0 inet dhcp  allow-hotplug wlan0  auto wlan0  iface wlan0 inet dhcp      pre-up wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B  以後每次啟動時,樹莓派都會主動去連線配置檔案中預定義的這些wifi網路。 在這個配置裡面有一個ssid=‘pi’網路,這是一個最低優先順序網路,是用來在陌生網路中配置樹莓派的。當處在一個樹莓派配置裡面的沒有的WiFi網路中時,我會自己建立一個叫pi的WiFi,當其他網路都不可用時,樹莓派連到這個網路裡,然後我便可以ssh進樹莓派,新增網路配置,然後重啟,就可以讓樹莓派加入到新的網路中。

上報IP地址 ,使用的是python語言,

#!/usr/bin/env python
import os
from email.mime.text import MIMEText
import smtplib
from email.header import Header
cmd='ifconfig'
m=os.popen(cmd)
t=m.read()
m.close()
msg=MIMEText(t,'plain','utf-8')
msg['From']='Raspberry'
msg['To']='****@qq.com'
msg['Subject']=Header('Ip Address Report','utf-8').encode()
from_add='****@163.com'
to_add='*****@qq.com'
password='******'
smtp_sever='smtp.163.com'
sever=smtplib.SMTP(smtp_sever,25)
sever.set_debuglevel(1)
sever.login(from_add,password)
sever.sendmail("from_add",[to_add],msg.as_string())
sever.quit()

程式碼

使用時出現兩個問題,

第一:登入失敗。原因是因為在登入的時候需要使用的是第三方客戶端,因此,在郵箱官網上設定第三方客戶端登入密碼即可,password一行也是第三方客戶端密碼。

第二,出現了554 DT:SUM 信封發件人和信頭髮件人不匹配;修改了msg[to]一行改為我的郵件地址之後,傳送成功了。

設定開機啟動。

sudo nano /etc/rc.local

開啟後在exit 0前面兩行加入程式碼 

sleep 10

sudo python /home/pi/IPsent.py &

第一行意思是休息十秒。系統啟動後wifi還沒有連線上去,如果執行指令碼是傳送不出去的,因此休眠十秒等待wifi連線。

第二行則是執行該指令碼。 sudo 許可權,絕對路徑,絕對路徑後面是“空格&”

如果你的命令需要長時間執行(例如死迴圈)或者執行後不能退出,那麼你必須確保在命令的最後新增“&”符號讓命令執行在其後臺。這個“&”符號允許命令執行在一個指定的程序中,然後繼續執行啟動程序。另外,確保檔名使用絕對路徑,而不是相對於你的home目錄的相對路徑。例如:使用/home/pi/myscript.py而不是用myscript.py。