树莓派Zero W脚本实现Wifi自动连接

Zero W依靠Wifi来实现联网,一旦Wifi断线了,默认是不会重新连接的。需要靠脚本来实现自动重连。

这里使用Python来实现,树莓派默认安装了Python,可以直接执行。创建一个autowifi.py文件,放在/home/pi目录下

1
2
3
4
5
6
7
8
#!/usr/bin/python
import os, time

while True:
if '192' not in os.popen('ifconfig | grep 192').read():
print '\n****** wifi is down, restart... ******\n'
os.system('sudo /etc/init.d/networking restart')
time.sleep(5*60) #5 minutes

这段python代码默认5分钟检查一次网络,一旦发现Wifi断线,则重新启动Wifi。

/home/pi目录下再创建一个autowifi.shshell脚本,内容如下

1
2
#!/bin/sh
python /home/pi/autowifi.py &

这段是后台执行上面python文件的脚本

最后设置开机自启autowifi.sh脚本,首先修改autowifi.sh的权限,将其放于/etc/init.d目录下

1
2
3
sudo cp -f /home/pi/autowifi.sh /etc/init.d/
sudo chmod +x /etc/init.d/autowifi.sh
sudo chown root:root /etc/init.d/autowifi.sh

以下这条命令将autowifi.sh设置为开机自启,但是我测试下来,并没有达到效果

1
sudo update-rc.d autowifi.sh defaults

于是我又找了别的方法,修改/etc/rc.local文件,同样可以实现开机自启,而且我实测有效果

1
sudo vi /etc/rc.local

/etc/rc.local文件中添加内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi

# 这段是我添加的
sudo service autowifi.sh start

exit 0

这样就能实现Zero W断网后,自动重新连接的效果了。检查autowifi.sh脚本是否启用可以使用命令

1
sudo service autowifi.sh status
avatar

chilihotpot

You Are The JavaScript In My HTML