樹莓派中用Python配置WIFI網絡和密碼


>> [目錄] 數據遠程采集 Step by Step


安裝系統時,曾用手動的方式來配置WIFI網絡和密碼,但是在部署數據采集裝置時,需要現場配置,為了方便操作可以用串口來傳入數據,然后由Ptyhon程序去修改WIFI配置。

image


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

image

  • 管理已有連接(/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>

image

  • 添加新的網絡連接

返回新增網絡連接的id(例子:已有0、1,新增2)

wpa_cli -i wlan0 add_network

image

  • 修改網絡連接的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為例:

image

打開/etc/wpa_supplicant/wpa_supplicant.conf 查看結果。

pi@raspberrypi:~ $ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

image


在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

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM