码迷,mamicode.com
首页 > 编程语言 > 详细

树莓派中用Python配置WIFI账号密码

时间:2020-04-23 13:46:24      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:ssi   art   20px   创建   png   psk   order   tco   ntc   

>> [目录] 数据远程采集 Step by Step


安装系统时,曾用手动的方式来配置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账号密码

标签:ssi   art   20px   创建   png   psk   order   tco   ntc   

原文地址:https://www.cnblogs.com/hotwater99/p/12760261.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!