MicroPython network扫描附近wifi和连接,扫描无结果和切换wifi连接

前因后果

  1. 之前使用network这个模块wifi连接成功,但是发现更换wifi账号和密码之后,没有重新发起连接?
  2. 使用scan扫描附近的wifi,扫描结果为空?

罪魁祸首

wlan.active(True)惹的祸,相信看到我这个文章都知道这是什么意思,激活无线接口,但如果要切换wifi和扫描附近wifi,需要关闭(wlan.active(False))或者断开(wlan.disconnect())wifi,否则对应的结果就是不会切换wifi和扫描的结果为空

下面是测试代码

import network
import time
ssid, pwd='PC_network', '12345678'

wlan = network.WLAN(network.STA_IF)  # 创建一个STA模式的无线接口
wlan.active(True)  # 激活无线接口
    
print('connect wifi')
wlan.connect(ssid, pwd)		# 发起连接
while not wlan.isconnected():
	print('wait')
	time.sleep(1)
print('is connect')

print('Scanning for networks...')
networks = wlan.scan()  # 扫描附近的无线网络
for net in networks:
    print(net)

执行结果:

>>> %Run -c $EDITOR_CONTENT
connect wifi
wait
wait
is connect
Scanning for networks…
(b’PC_network’, b’D\xdfe\xf1o\xfa’, 2, -36, 3, False)
… # 此处忽略其他扫描

问题来了,第一次连接是可以扫描到的,but…当你再次运行的时候,结果就是这样:

connect wifi
is connect
Scanning for networks…

当我们在连接后断开连接,再搜索,妥妥的:

import network
import time
ssid, pwd='PC_network', '12345678'

wlan = network.WLAN(network.STA_IF)  # 创建一个STA模式的无线接口
wlan.active(True)  # 激活无线接口
    
print('connect wifi')
wlan.connect(ssid, pwd)		# 发起连接
while not wlan.isconnected():
	print('wait')
	time.sleep(1)
print('is connect')

wlan.disconnect()	# 断开连接的wifi,加了这行代码
print('Scanning for networks...')
networks = wlan.scan()  # 扫描附近的无线网络
for net in networks:
    print(net)

执行结果:

>>> %Run -c $EDITOR_CONTENT
connect wifi
is connect
Scanning for networks…
(b’PC_network’, b’D\xdfe\xf1o\xfa’, 2, -36, 3, False)

wlan.disconnect()	# 断开连接的wifi,加了这行代码
# 把上面的wlan.disconnect()代码换成
wlan.active(False)
wlan.active(True)

执行结果:

>>> %Run -c $EDITOR_CONTENT
connect wifi
wait
wait
is connect
Scanning for networks…
(b’PC_network’, b’D\xdfe\xf1o\xfa’, 2, -40, 3, False)

可以写个函数,判断当前是否已经连上?连上之后再断开扫描~

def scan_wifi(wlan):
    if wlan.isconnected():
        wlan.disconnect()
    networks = wlan.scan()  # 扫描附近的无线网络
    return networks

连接用disconnect断开再连接没试过,还没有条件~

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是通过扫描附近 WiFi连接Python 代码: ```python import os import subprocess import time # 扫描附近 WiFi 热点 def scan_wifi(): cmd = "sudo iwlist wlan0 scan | grep ESSID" p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = p.communicate() networks = out.decode().split("\n") wifi_list = [] for network in networks: if 'ESSID' in network: wifi_list.append(network.split(':')[1].strip().replace('"', '')) return wifi_list # 连接 WiFi def connect_wifi(ssid, password): cmd = 'sudo wpa_passphrase {} {} | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null'.format(ssid, password) os.system(cmd) os.system('sudo wpa_cli -i wlan0 reconfigure') # 选择要连接WiFi def select_wifi(): wifi_list = scan_wifi() print("可用 WiFi 列表:") for i, wifi in enumerate(wifi_list): print("{}. {}".format(i+1, wifi)) wifi_index = int(input("请输入要连接WiFi 序号:")) wifi_ssid = wifi_list[wifi_index-1] wifi_password = input("请输入 WiFi 密码:") connect_wifi(wifi_ssid, wifi_password) print("连接成功!") if __name__ == '__main__': select_wifi() ``` 代码中使用了 Linux 命令 `iwlist` 和 `wpa_cli` 来扫描 WiFi连接 WiFi。其中,`scan_wifi()` 函数用于扫描附近WiFi,返回可用的 WiFi 列表;`connect_wifi()` 函数用于连接指定的 WiFi,需要传入 WiFi 的 SSID 和密码;`select_wifi()` 函数用于选择要连接WiFi。 使用时,运行该代码即可选择要连接WiFi,输入序号和密码后,即可连接成功。需要注意的是,该代码需要在具有 WiFi 功能的树莓派设备上运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值