network
该模块用于初始化各种网卡驱动,网卡具有连接路由,断开路由,查看网卡连接信息,检查是否连接等功能。
使用WiFi
请确保已经接上了天线
1.1. esp8285
在部分开发板上带了 一个 使用AT
方式交互的网卡模块,比如esp8285
,与k210
通过串口连接
引脚8
是使能脚,可以创建一个GPIO
对象来控制它的高低电平来实现使能和失能,也可以用它复位(先低后高),复位后需要等待一小段时间才能操作,
可以查看例程wifi_ap_scan.py
1.2. esp32
目前在MaixDuino
开发板中有一个 esp32
模块通过 spi
与k210
相连
同时也有单独的TF
插卡式模块
ESP8285_Module
1. network.ESP8285(uart)
构造一个ESP8285
网卡对象,使用该方法需要传入一个uart
对象,在MaixPy
目前支持的dock
和GO
上,是使用AT指令模块作为WiFi
。所以该uart
对象是与AT
模块通信的对象,可以查看uart
模块例程
调用此方法会初始化ESP8285
, 如果失败会抛出异常
1.1. 参数
uart
: 与AT模块通信的UART对象
1.2. 返回值
ESP8285
: 网卡对象
2. ESP8285
2.1. connect(ssid, key)
连接热点(AP/路由器)
参数
ssid
: 热点的SSID
key
: 热点的密码
返回值
无, 如果发生错误会抛出异常
2.2. 2.2. ifconfig
查看wifi连接信息,目前network不支持设置网卡配置
nic.ifconfig()
参数
无
返回值
tuple
类型, 元素都是字符串:(ip, netmask, gateway, dns_server, dhcp_server, mac, ssid)
, 如果没有查询到或者无效,值为"0"
2.3. isconnected
查看wifi是否连接
nic.isconnected()
参数
无
返回值
True
: 已经连接
False
: 断开连接
2.4. disconnect
断开wifi连接
参数
无
返回值
无
2.5. scan
扫描周围的热点信息
参数
无
返回值
一个 list
对象, 每个元素包含了一个字符串, 字符串来自AT
模块的响应,内容和esp8285
的AT指令文档
所描述的相同,如下:
'<ecn>,<ssid>,<rssi>,<mac>,<channel>,<freq offset>,<freq cali>,<pairwise_cipher>, <group_cipher>,<bgn>,<wps>'
<ecn>
:加密⽅式- 0:OPEN
- 1:WEP
- 2:WPA_PSK
- 3:WPA2_PSK
- 4:WPA_WPA2_PSK
- 5:WPA2_Enterprise(⽬前 AT 不⽀持连接这种加密 AP)
<ssid>
:字符串参数,AP 的 SSID<rssi>
:信号强度<mac>
:字符串参数,AP 的 MAC 地址<channel>
:信道号<freq offset>
:AP 频偏,单位:kHz。此数值除以 2.4,可得到 ppm 值<freq cali>
:频偏校准值<pairwise_cipher>
:- 0:CIPHER_NONE
- 1:CIPHER_WEP40
- 2:CIPHER_WEP104
- 3:CIPHER_TKIP
- 4:CIPHER_CCMP
- 5:CIPHER_TKIP_CCMP
- 6:CIPHER_UNKNOWN
<group_cipher>
: 定义与<pairwise_cipher>
相同<bgn>
: bit0 代表 b 模式; bit1 代表 g 模式; bit2 代表 n 模式若对应 bit 为 1,表示该模式使能;若对应 bit 为 0,则该模式未使能。
<wps>
:0,WPS 未使能;1,WPS 使能
比如:
info_strs = ['4,"ChinaNet-lot0",-79,"c8:50:e9:e8:21:3e",1,-42,0,4,3,7,1', '4,"TOPSTEP2G4",-7
0,"f8:e7:1e:0d:0d:f8",1,-57,0,4,4,7,0']
这看起来可能会比较奇怪,因为每个AP的信息都是一串字符,信息里面还有整型和字符串,字符串用双引号括起来的,所以拿到这个字符串后需要再次处理后再使用,比如:
def wifi_deal_ap_info(info):
res = []
for ap_str in info:
ap_str = ap_str.split(",")
info_one = []
for node in ap_str:
if node.startswith('"'):
info_one.append(node[1:-1])
else:
info_one.append(int(node))
res.append(info_one)
return res
info_strs = ['4,"ChinaNet-lot0",-79,"c8:50:e9:e8:21:3e",1,-42,0,4,3,7,1', '4,"TOPSTEP2G4",-70,"f8:e7:1e:0d:0d:f8",1,-57,0,4,4,7,0']
info = wifi_deal_ap_info(info_strs)
print(info)
输出是:
[[4, 'ChinaNet-lot0', -79, 'c8:50:e9:e8:21:3e', 1, -42, 0, 4, 3, 7, 1], [4, 'TOPSTEP2G4', -70, 'f8:e7:1e:0d:0d:f8', 1, -57, 0, 4, 4, 7, 0]]
然后比如我们需要获得所有AP
的SSID
只需要使用
for ap_info in info:
print(ap_info[1])
2.6. enable_ap(ssid, key, chl=5, ecn=3)
打开热点
参数
ssid
: SSIDkey
: 密码chl
: WiFi信号的通道号ecn
: 加密方法, 有OPEN``WPA2_PSK
等,参考本页ESP8285
的常量部分, 默认值是3
, 也就是ESP8285.WPA2_PSK
,比如
或者nic = network.ESP8285(uart) nic.enable_ap("maixpy", "12345678", 5, nic.OPEN)
nic.enable_ap("maixpy", "12345678", 5, network.ESP8285.OPEN)
2.7. disable_ap()
关闭热点
2.8. 常量
OPEN
热点的加密方式为不需要密码
WPA_PSK
热点的加密方式为 WPA_PSK
WPA2_PSK
热点的加密方式为 WPA2_PSK
WPA_WPA2_PSK
热点的加密方式为 WPA_WPA2_PSK
3. 例程
ESP32_Module
1. network.ESP32_SPI(cs,rst,rdy,mosi,miso,sclk)
构造一个ESP32_SPI
网卡对象,需要传入对应的GPIOHS FUNC
如果传入参数数量不对,会返回错误
1.1. 参数
- 对应引脚功能的
fpioa_func
1.2. 返回值
ESP32_SPI
网卡对象
2. ESP32_SPI
2.1. adc
读取esp32
模块的adc
值
参数
无
返回值
tunple
,5个通道的adc
值
顺序是"PIN36", "PIN39", "PIN34", "PIN35", "PIN32"