network

该模块用于初始化各种网卡驱动,网卡具有连接路由,断开路由,查看网卡连接信息,检查是否连接等功能。

在部分开发板上带了 一个 使用AT方式交互的网卡模块,比如esp8285,与k210通过串口连接

引脚8是使能脚,可以创建一个GPIO对象来控制它的高低电平来实现使能和失能,也可以用它复位(先低后高),复位后需要等待一小段时间才能操作, 可以查看例程wifi_ap_scan.py

使用WiFi请确保已经接上了天线

1. network.ESP8285(uart)

构造一个ESP8285网卡对象,使用该方法需要传入一个uart对象,在MaixPy目前支持的dockGO上,是使用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模块的响应,内容和esp8285AT指令文档所描述的相同,如下: '<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]]

然后比如我们需要获得所有APSSID只需要使用

for ap_info in info:
    print(ap_info[1])

2.6. enable_ap(ssid, key, chl=5, ecn=3)

打开热点

参数

  • ssid: SSID
  • key: 密码
  • 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. 例程

参考network目录下的例程

results matching ""

    No results matching ""