
树莓派 Pico W 内置了英飞凌的 CYW43439 无线芯片,支持 WiFi 功能,甚至蓝牙功能。下面介绍 Pico W 和 WiFi、网络相关的用法。
扫描附近的 WiFi 热点
import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
access_points = wlan.scan()
for ap in access_points:
print(ap)
设备输出的信息如下:

访问点的信息由 6 段信息的格式构成,可以参考 MicroPython 的文档。
具体信息为:(ssid, bssid, channel, RSSI, security, hidden)
– ssid:服务集标识,Service Set Identifier 的缩写,通俗地说,是无线网热点的名称
– bssid:48 个二进制位,6 个字节,可以理解为访问点的 MAC 地址
– channel:通道号
– RSSI:信号强度(Received signal strength indicator),正常信号强度应为 -40dbm ~ -85dbm之间,小于 -90dbm 的信号则很糟糕,几乎无法连接
– security:安全连接方式,包含以下几种:
0 – open
1 – WEP
2 – WPA-PSK
3 – WPA2-PSK
4 – WPA/WPA2-PSK
– 可见还是隐藏:
0 – visible
1 – hidden
下面的代码按信号强弱将连接点排序输出:
import network
import binascii
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
access_points = wlan.scan()
# 按信号强弱排序
access_points.sort(key=lambda x:x[3], reverse=True)
for ssid, bssid, channel, RSSI, security, hidden in access_points:
print(ssid, binascii.hexlify(bssid), channel, RSSI, security, hidden)
连接到 WiFi
import network
import time
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('你的WIFI名称', '你的WIFI密码')
while not wlan.isconnected() and wlan.status() >= 0:
print("Waiting to connect:")
time.sleep(1)
print(wlan.ifconfig())
官方给出的更可靠的、考虑了一些异常情况的代码是:
import network
import time
import rp2
# 设置 WiFi 的国家代码,中国的代码是 CN
rp2.country('CN')
ssid = 'SSID'
password = 'PASSWORD'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# Wait for connect or fail
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
time.sleep(1)
# Handle connection error
if wlan.status() != 3:
raise RuntimeError('network connection failed')
else:
print('connected')
status = wlan.ifconfig()
print( 'ip = ' + status[0] )
其中,ssid 和 password 需要替换成你要连接到 WiFi 信息。

wlan.status() 返回的是连接状态,其值对应如下常量:
#define CYW43_LINK_DOWN (0) #define CYW43_LINK_JOIN (1) #define CYW43_LINK_NOIP (2) #define CYW43_LINK_UP (3) #define CYW43_LINK_FAIL (-1) #define CYW43_LINK_NONET (-2) #define CYW43_LINK_BADAUTH (-3)
查询网卡的 MAC 地址
import network
import ubinascii
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print(mac)
# Other things you can query
print(wlan.config('channel'))
print(wlan.config('essid'))
print(wlan.config('txpower'))
获取网页内容
获取网页内容也变得非常简单,下面的代码获取百度首页的 html 代码内容:
import urequests
r = urequests.get('http://www.baidu.com/')
print(r.content)
r.close()
注意连接使用完毕后要调用 r.close() 关闭连接。



好奇,如果把这项代码写到main.py使得开机自动连接到wifi,那能不能做到远程连接树莓派pico而不用依赖pico一直连接电脑才能用
当然可以的
扫描wifi示例报错了。提示wlan.scan()有问题,错误信息如下:
OSError: [Errno 1] EPERM