树莓派连接多个wifi并上报IP地址

来源:互联网 发布:2144剑雨江湖进阶数据 编辑:程序博客网 时间:2024/05/16 00:54
在进到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。




1 0
原创粉丝点击