Python实现树莓派WiFi断线自动重连

实现 WiFi 断线自动重连。原理是用 Python 监测网络是否断线,如果断线则重启网络服务。

1.Python 代码 autowifi.py,放在 /home/pi 目录下:

#!/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

2.Shell脚本autowifi.sh,也放在 /home/pi 目录下:

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

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 
sudo update-rc.d autowifi.sh defaults 

每5分钟检测一次,若 WiFi 断线,则自动重新连接。


8 评论

  1. 不知道为什么我的树莓派3通过命令 ‘sudo /etc/init.d/networking restart’ 无法重启wifi,尝试了许多别的语句发现只有 sudo ifup wlan0 才有效果。然后把wifi检测的命令换成’sudo wpa_cli status’把第一部分的代码改成这个样子,供大家参考一下。

    #!/usr/bin/python
    import os,time

    while True:
    return1=os.system(‘sudo wpa_cli status’)#check wifi connection
    if return1:
    print(‘\n******wifi is down, restrart…***\n’)
    os.system(‘sudo ifup wlan0’)

    time.sleep(5*60) #5 minutes

  2. 执行sudo update-rc.d autowifi.sh defaults的时候会提示错误Missing LBS Tags,核对了一下其他步骤并没有错,这条错误提示可以忽略吗?

  3. 可能是因为我太菜的原因,导入之后wifi模块和蓝牙模块变灰,请新手谨慎使用,解决办法删除导入的代码。

  4. 关于MAPLELAN这位朋友的问题:执行sudo update-rc.d autowifi.sh defaults的时候会提示错误Missing LBS Tags。这两天因为重刷了一遍系统,发现自己的也出现了这个提示,测试发现虽然有这条提示,但脚本依旧生效。
    然后查找了一下,好像是因为树莓派的系统升级,或者准确说是debian系统升级,update-rc.d命令出现被insserv取代之势引起的,新版本系统好像是建议用insserv来添加开机启动的命令,然后提示信息可以在#!/bin/sh 后面添加metadata信息就可以消除了(没测试)。

  5. 更正一下2333,上面说的,不是因为系统升级导致update-rc.d命令过时了,因为看了树莓派里insserv的man手册,里面有一句写到:insserv只是update-rc.d所用到的一个低层级的工具而已,不建议用户使用insserv的方式添加开机启动项,建议仍然使用update-rc.d。

  6. 这个断开大概是因为树莓派能耗机制的问题,总是重连终归不是办法,推荐如下解决方式:
    创建并编辑文件/etc/modprobe.d/8192cu.conf
    sudo nano /etc/modprobe.d/8192cu.conf
    并且粘贴下列内容
    # Disable power saving
    options 8192cu rtw_power_mgnt=0 rtw_enusbss=1 rtw_ips_mode=1
    然后使用sudo reboot进行重启。

发表评论

你的邮件地址不会公开


*