友情提示点击顶部放大镜 可以使用站内搜索 记住我们的地址 www.hainabaike.com
树莓派 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() 关闭连接。
你还可以:
查看系列教程中的其他文章
购买本教程所用到的 Pico 套件
标签: 编程树莓派 PicoPico WMicroPython网络wifiRaspberry Pi
评论列表