1 简介
CanMV K230有多种联网方式,无线和有线均支持。无线使用起来更加方便。有线以太网需要借助一个USB转以太网设备,型号为:USB2.0 RTL8152B。
笔者本文将基于无线连接网络。
2 WLAN API概述
API地址:https://docs.micropython.org/en/latest/library/network.WLAN.html
2.1 构造函数
network.WLAN(interface_id)
创建 WLAN 网络接口对象。支持的接口是 network.STA_IF(站又名客户端,连接到上游 WiFi 接入点)和network.AP_IF(接入点,允许其他 WiFi 客户端连接)。以下方法的可用性取决于接口类型。例如,只有 STA 接口可以通过WLAN.connect() 连接到接入点。
2.2 使用方法
1、WLAN.active([is_active])
如果传递布尔参数,则激活(“up”)或停用(“down”)网络接口。否则,如果没有提供参数,则查询当前状态。大多数其他方法需要活动接口。
__*2、WLAN.connect(ssid=None, password=None, bssid=None)*__
使用指定的密码连接到指定的无线网络。如果给出了bssid,则连接将被限制为具有该 MAC 地址的接入点(在这种情况下还必须指定ssid)。
3、WLAN.disconnect()
断开当前连接的无线网络。
4、WLAN.scan()
扫描可用的无线网络。扫描只能在 STA 接口上进行。返回包含 WiFi 接入点信息,内容类似如下。
#print(sta.scan())
bssid / frequency / signal level / flags / ssid
da:c5:47:12:80:ab 2462 -30 [WPA2-PSK-CCMP][ESS] Redmi Note 11 Pro
72:a8:d3:ab:c8:2c 2412 -42 [WPA2-PSK-CCMP][WPS][ESS] wifi_test
e4:4e:2d:42:ee:60 2412 -61 [WPA2-EAP-CCMP][ESS] CAN
e4:4e:2d:43:0a:a1 2437 -61 [WPA2-EAP-CCMP][ESS] Canaan
e4:4e:2d:43:0a:a4 2437 -61 [WPA2-PSK-CCMP][ESS]
5、WLAN.status([param])
返回无线连接的当前状态。当不带参数调用时,返回值描述网络链接状态,类似内容如下:
bssid=c6:b5:b6:86:64:d7
freq=2462
ssid=wjx_pc
id=2
mode=station
wifi_generation=4
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.137.221
p2p_device_address=0a:fb:ea:2b:7b:1a
address=08:fb:ea:2b:7b:1a
uuid=f483700c-e90e-58a6-90f5-8d8312ec7412
6、WLAN.isconnected()
在 STA 模式的情况下,True如果连接到 WiFi 接入点并具有有效的 IP 地址,则返回。在 AP 模式下,True 当站点连接时返回。False 否则返回。
7、WLAN.ifconfig([(ip, subnet, gateway, dns)])
获取/设置 IP 级网络接口参数:IP 地址、子网掩码、网关和 DNS 服务器。当不带参数调用时,此方法返回一个包含上述信息的 4 元组。要设置上述值,请传递带有所需信息的 4 元组。例如:nic.ifconfig(('192.168.0.4', '255.255.255.0', '192.168.0.1', '8.8.8.8'))
8、WLAN.config(param)
9、WLAN.config(param=value, …)
获取或设置一般网络接口参数。这些方法允许使用超出标准 IP 配置的附加参数(如 处理 WLAN.ifconfig())。这些包括特定于网络和特定于硬件的参数。设置参数时,应使用关键字参数语法,可以一次设置多个参数。查询时,参数名应以字符串的形式引用,一次只能查询一个参数:
# Set WiFi access point name (formally known as SSID) and WiFi channel
ap.config(ssid='k230_ap_wjx', channel=11, key='12345678')
# Query params one by one
print(ap.config('ssid'))
print(ap.config('channel'))
以下是支持的参数:
- mac:MAC地址(字节) (bytes)
- ssid:WiFi 接入点名称(字符串)
- channel:WiFi通道(整数)
- hidden:SSID 是否隐藏(布尔值)
- password:访问密码(字符串)
3 无线连接实现
核心代码如下:
import network,time
from machine import Pin
WIFI_SSID = 'Wifi_2G'
PASSWORK = '12345678'
class WIFI:
def __init__(self, state_pin=52, ssid='Wifi_2G', passwork='12345678'):
self.wifi_led = Pin(state_pin, Pin.OUT)
self.wlan = network.WLAN(network.STA_IF)
self.ssid = ssid
self.passwork = passwork
def wifi_status(self):
return self.wlan.isconnected()
def wifi_connect(self):
self.wlan.active(True)
if not self.wifi_status():
print('connecting to network...')
for i in range(3):
self.wlan.connect(self.ssid, self.passwork)
if self.wlan.isconnected():
break
if self.wifi_status():
print('connect success')
self.wifi_led.value(1)
while self.wlan.ifconfig()[0] == '0.0.0.0':
pass
print('network information:', self.wlan.ifconfig())
else:
for i in range(10):
self.wifi_led.value(1)
time.sleep_ms(300)
self.wifi_led.value(0)
time.sleep_ms(300)
if __name__ == '__main__':
wf = WIFI(52, WIFI_SSID, PASSWORK)
wf.wifi_connect()
4 实验现象
运行代码,打印信息如下:

可以ping下开发板的IP。

说明联网是OK的。