参考文献: 树莓派开机自动连接wifi设置,并修改静态IP 树莓派为连接不同Wifi分配固定IP的方法 树莓派根据不同WIFI的SSID自动更换固定IP地址 为了在不同的地方(实验室and寝室,and others)使用树莓派,但不同地方的wifi网段不同,所以每次换地方,树莓派都要接显示器去换地址,非常麻烦,特别是遇到没有台式的时候则直接变成麻瓜,根据上述参考文献,找到了可以使树莓派开机根据连接的wifi自动更换所需固定地址的方法。为了防止遗忘,特此记录。
1 设置可接入的wifi
方法一
通过右上角图标处修改,略
方法二
修改配置文件/etc/wpa_supplicant/wpa_supplicant.conf
其中最上面:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US
为原有字段,country
可修改为对应国家,可参考:Country Code List 在文件中加入如下字段:
network={
ssid="TP-LINK_292D"
psk="tttttttt"
key_mgmt=WPA-PSK
priority=1
}
network={
ssid="CMCC-6HH6"
psk="tttttttt"
key_mgmt=WPA-PSK
priority=0
}
ssid
是WiFi名,psk
是密码,priority
是优先级,数字越大优先级越高,key_mgmt
可以不用管,在文件中可以添加多个网络的信息。 tips:远程可以直接打开文件另存为,然后在终端复制过去
sudo cp wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf
2 设置静态IP(单个wifi)
2.1 example
参考文件/home/pi/dhcpcd/dhcpcd.conf
,其中有配置静态IP例子:
# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
2.2 通过ifconfig
查看网卡名称(wlan0
):
2.3 通过route
查看路由(192.168.0.1
)
2.4 配置文件
参考dhcpcd.conf
的例子配置静态IP,在文件最后加上:
interface wlan0
static ip_address=192.168.0.251/24
static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 119.29.29.29 fd51:42f8:caae:d92e::1
其中:DNS选择可参考:有哪些好用的DNS?
3 根据不同WIFI的SSID自动更换固定IP地址
3.1 创建dhcpcd配置文件
将 /etc/dhcpcd.conf 复制多份到自定义文件夹中(home/pi/dhcpcd
),我这里根据路由重命名
sudo cp /etc/dhcpcd.conf /home/pi/dhcpcd/dhcpcd.conf.default
sudo cp /etc/dhcpcd.conf /home/pi/dhcpcd/dhcpcd.conf.192_168_0_1
sudo cp /etc/dhcpcd.conf /home/pi/dhcpcd/dhcpcd.conf.192_168_1_1
对非default文件按上述方法设置静态IP,如在dhcpcd.conf.192_168_0_1
文件最后加上:
interface wlan0
static ip_address=192.168.0.251/24
static ip6_address=fd51:42f8:caae:d92e::ff/64
static routers=192.168.0.1
static domain_name_servers=192.168.0.1 119.29.29.29 fd51:42f8:caae:d92e::1
3.2 基于python根据不同WIFI的SSID自动更换固定IP地址
任意位置(/home/pi/dhcpcd
)新建python
文件(dhcpcd_config.py
),添加如下内容:
# -*- coding:utf-8 -*
import os,time
def get_ssid():
result = os.popen('sudo iwconfig wlan0').read()
result = result.replace(' ','\n')
for i in result.split('\n'):
if 'ESSID' in i:
ssid = i.split(':')[1].replace('"','')
return ssid
def check_ssid():
ssid = get_ssid()
while ssid == 'off/any':
time.sleep(1)
ssid = get_ssid()
return ssid
if __name__ == '__main__':
ssid = check_ssid()
if ssid == 'TP-LINK_292D':
os.system('sudo cp /home/pi/dhcpcd/dhcpcd.conf.192_168_0_1 /etc/dhcpcd.conf')
elif ssid == 'CMCC-6HH6':
os.system('sudo cp /home/pi/dhcpcd/dhcpcd.conf.192_168_1_1 /etc/dhcpcd.conf')
else:
os.system('sudo cp /home/pi/dhcpcd/dhcpcd.conf.default /etc/dhcpcd.conf')
os.system('sudo wpa_cli -i wlan0 reconfigure')
3.3 设置开机启动
方法一(无需启动桌面):
编辑文件:/etc/rc.local
,在exit 0
前添加如下内容即可:
sudo python /home/pi/dhcpcd/dhcpcd_config.py
方法二(启动桌面后运行,未验证):
新建文件夹与文件:
sudo mkdir /home/pi/.config/autostart
cd /home/pi/.config/autostart
sudo nano change_address.desktop
输入以下内容:
[Desktop Entry]
Name=change_wlan_add
Comment=My Python Program
Exec=sudo python /home/pi/Documents/change_wlan_address.py
Terminal=false
Type=Application
Categories=Application;Development;
StartupNotify=true
Ctrl + o保存,Enter确认,Ctrl + x退出
4 重启树莓派完成配置
sudo reboot
如果是远程,重启后通过配置的静态IP重新登录。