network扫描和连接的坑
前因后果
- 之前使用network这个模块wifi连接成功,但是发现更换wifi账号和密码之后,没有重新发起连接?
- 使用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