树莓派中用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 查看结果。
[email protected]:~ $ 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
[email protected]:~ $ sudo nano test_wpa.py
# -*- coding:utf-8 -*- import os def set_wifi_ssid_psk(ssid, psk): os.system(‘sudo wpa_cli -i wlan0 set_network 0 ssid ‘ + ‘\‘"‘ + ssid + ‘"\‘‘) os.system(‘sudo wpa_cli -i wlan0 set_network 0 psk ‘ + ‘\‘"‘ + psk + ‘"\‘‘) os.system(‘sudo wpa_cli -i wlan0 enable_network 0‘) os.system(‘sudo wpa_cli -i wlan0 save_config‘) def main(): set_wifi_ssid_psk(‘ssid_set_by_python‘, ‘psk_set_by_python‘) if __name__ == ‘__main__‘: main()
运行test_wpa.py
[email protected]:~ $ python test_wpa.py
查看结果,第0个网络连接修改成功,到这里就实现在Python中配置网络连接的功能。
[email protected]:~ $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf