树莓派中用Python配置WIFI账号密码
Posted hotwater99
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树莓派中用Python配置WIFI账号密码相关的知识,希望对你有一定的参考价值。
在安装系统时,曾用手动的方式来配置WIFI网络和密码,但是在部署数据采集装置时,需要现场配置,为了方便操作可以用串口来传入数据,然后由Ptyhon程序去修改WIFI配置。
wpa_cli工具
wpa_supplicant是一个连接和配置WIFI的工具,主要包含wpa_supplicant与wpa_cli两个程序。wpa_supplicant启动后可以用wpa_cli来连接和配置WIFI。
wpa_cli的常用操作参考这篇文章:https://blog.csdn.net/z2066411585/article/details/78761753
- 扫描wlan
//搜索附近的wifi热点 wpa_cli -i wlan0 scan //显示搜索wifi热点的结果 wpa_cli -i wlan0 scan_result
- 管理已有连接(/etc/network/interfaces 中保存的连接)
// 列举已有的连接 wpa_cli -i wlan0 list_network // 连接指定的ssid wpa_cli -i wlan0 select_network <network id> // 使能指定的ssid wpa_cli -i wlan0 enable_network <network id>
- 添加新的网络连接
返回新增网络连接的id(例子:已有0、1,新增2)
wpa_cli -i wlan0 add_network
- 修改网络连接的ssid(网络名)、psk(密码)
// 设置网络<network id>的ssid/网络名 wpa_cli -i wlan0 set_network 0 ssid \'"ssid_set_by_wpa_cli"\' // 设置网络<network id>的psk/密码 wpa_cli -i wlan0 set_network 0 psk \'"psk_set_by_wpa_cli"\' // 设置网络<network id>的扫描方式 wpa_cli -i wlan0 set_network 0 scan_ssid 1 // 设置网络<network id>的优先级 wpa_cli -i wlan0 set_network 0 priority 1 // 保存配置到wpa_supplicant.conf wpa_cli -i wlan0 save_config
以设置网络0为例:
打开/etc/wpa_supplicant/wpa_supplicant.conf 查看结果。
pi@raspberrypi:~ $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
在Python中调用wpa_cli
上面是在命令行中使用wpa_cli,在Python中可以通过os.system()函数来执行命令行指令。
以这条指令为例:
wpa_cli -i wlan0 set_network 0 ssid \'"ssid_set_by_wpa_cli"\'
在Python中调用,就是把这条指令用字符串的形式传递给os.system()函数:
os.system(\'sudo wpa_cli -i wlan0 set_network 0 ssid \'"ssid_set_by_wpa_cli"\'\')
各种引号比较绕,首先是最外层的单引号,然后"ssid_set_by_wpa_cli"外也有一层单引号。
实际使用时,用户ssid是个字符串变量:
os.system(\'sudo wpa_cli -i wlan0 set_network 0 ssid \' + \'\\\'"\' + ssid + \'"\\\'\')
函数的括号内是个字符串,拆成了下面的这几段:
sudo wpa_cli -i wlan0 set_network 0 ssid | 字符串 |
\\\'" | \\\'--转义,代表单引号,这段相当于\'" |
ssid | 用户ssid字符串 |
"\\\' | \\\'--转义,代表单引号,这段相当于"\' |
创建test_wpa.py
pi@raspberrypi:~ $ sudo nano test_wpa.py
1 # -*- coding:utf-8 -*- 2 import os 3 4 def set_wifi_ssid_psk(ssid, psk): 5 os.system(\'sudo wpa_cli -i wlan0 set_network 0 ssid \' + \'\\\'"\' + ssid + \'"\\\'\') 6 os.system(\'sudo wpa_cli -i wlan0 set_network 0 psk \' + \'\\\'"\' + psk + \'"\\\'\') 7 os.system(\'sudo wpa_cli -i wlan0 enable_network 0\') 8 os.system(\'sudo wpa_cli -i wlan0 save_config\') 9 10 def main(): 11 set_wifi_ssid_psk(\'ssid_set_by_python\', \'psk_set_by_python\') 12 13 if __name__ == \'__main__\': 14 main()
运行test_wpa.py
pi@raspberrypi:~ $ python test_wpa.py
查看结果,第0个网络连接修改成功,到这里就实现在Python中配置网络连接的功能。
pi@raspberrypi:~ $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
以上是关于树莓派中用Python配置WIFI账号密码的主要内容,如果未能解决你的问题,请参考以下文章