Wi-Fi 网卡
本章节主要介绍 QuecPython 下 Wi-Fi 网卡适配情况,并详细介绍其在软件及硬件方面对接方法,方便用户对网卡进行开发及自定义适配。
Wi-Fi 无线网卡介绍
Wi-Fi 无线网卡是一种用于连接终端设备到无线局域网(Wireless Local Area Network,WLAN)的设备,允许设备通过无线信号进行数据通信,使设备能够无线访问互联网、共享文件和打印机等。Wi-Fi 无线网卡的工作原理是以无线电波为传输媒介,通过接收和发送无线信号来实现无线数据传输。它主要使用2.4 GHz或5 GHz频段,并基于IEEE 802.11b/g/n/ac/ax协议。
QuecPython 上是如何支持 Wi-Fi 的?
正常网络通信是基于 TCP/IP 模型工作的,QuecPython 支持 LwIP 协议栈(轻量开源的 TCP/IP 协议栈),因此挂载 Wi-Fi 可以选择 QuecPython + MAC + PHY 的方式(通过串口/SDIO硬件接口外挂集成MAC和PHY的芯片,如 ESP8266/ASR5803),或者直接根据 Wi-Fi 平台资源大小,移植 QuecPython 到对应芯片平台上,如 FCM360W。
QuecPython 支持的 Wi-Fi 网卡硬件接口
QuecPython 支持的 Wi-Fi 网卡有多种硬件连接方式:蜂窝无线通信模组通过 UART 或 SDIO 接口外接 Wi-Fi 网卡,或者在移远的 Wi-Fi 芯片中移植 QuecPython。
UART 接口
UART是一种异步的串行通信接口协议,用于在设备之间传输数据,通过发送和接收线路实现设备之间的双向异步传输。UART接口的传输速度相对较慢,通常在几千字节每秒(B/s)到几十千字节每秒(KB/s)之间。
通过 UART 接口与蜂窝通信模组连接的 Wi-Fi 网卡,其与蜂窝通信模组之间使用 SLIP 协议进行链路通信。
SLIP 协议是指串行线路网际协议(Serial Line Internet Protocol),是在串行通信线路上支持 TCP/IP 协议的一种点对点式的链路层通信协议。
QuecPython 通过 UART 接口外接的 Wi-Fi 网卡,目前支持乐鑫的 ESP8266 与 ESP8285。
- 乐鑫 Wi-Fi 模组不支持 SLIP 协议,QuecPython 团队基于 ESP8266_RTOS_SDK 开发集成了 SLIP 协议,用户需要烧录 QuecPython 团队定制后的固件。
- 受限于串口波特率,该种连接方式仅适用于低速率场景。
硬件连接
串口有较简单的硬件连接,方便设备集成。
UART 硬件连接如下所示:
引脚 | 说明 |
---|---|
TX | 串口数据发送引脚 |
RX | 串口数据接收引脚 |
GND | 接地引脚 |
初始化流程
串口连接具有较简单的初始化使用流程,只需要保证串口可用即可。QuecPython 初始化串口及 SLIP 不会对外部设备进行校验,只要对端设备集成 SLIP 协议即可使用,不限制设备类型。你也可以根据需要尝试其他设备集成 SLIP 进行对接。
SDIO 接口
SDIO 是一种用于存储卡和其他外部设备的串行通信接口协议。它是SD卡协会制定的标准,允许设备通过 SDIO 接口与主机进行双向数据传输。SDIO 协议定义了物理接口、电气特性和通信协议,支持高速数据传输和多功能设备的连接,如无线网卡、摄像头等。SDIO 接口可以支持高速传输,速度可达到几十兆字节每秒(MB/s)。
硬件连接
SDIO 硬件连接如下所示:
引脚 | 说明 |
---|---|
WLAN_SLP_CLK | WLAN 睡眠时钟 |
WLAN_PWR_EN | WLAN 电源使能控制 |
WLAN_SDIO_DATA3 | WLAN SDIO数据位3 |
WLAN_SDIO_DATA2 | WLAN SDIO数据位2 |
WLAN_SDIO_DATA1 | WLAN SDIO数据位1 |
WLAN_SDIO_DATA0 | WLAN SDIO数据位0 |
WLAN_SDIO_CLK | WLAN SDIO 时钟 |
WLAN_SDIO_CMD | WLAN SDIO 命令 |
WLAN_WAKE | WLAN 唤醒模块 |
WLAN_EN | WLAN 使能控制 |
WLAN_RST | WLAN 重启控制 |
初始化流程
内置 Wi-Fi
QuecPython 内置 Wi-Fi,是指直接将 QuecPython 移植到 Wi-Fi 芯片上,适配 Wi-Fi 的接口,直接对 Wi-Fi 芯片进行控制。
硬件结构
如下图所示,QuecPython 移植到 Wi-Fi 芯片,同时会适配 Wi-Fi 平台的硬件接口,对 Wi-Fi 硬件资源充分利用。
工作模式介绍
Wi-Fi 支持多种工作模式,当前 QuecPython 主要支持基础功能 AP 和 Station 模式,即 Wi-Fi 作为终端连接到其他接入点入网(如路由器),或者 Wi-Fi 本身作为接入点给其他设备入网。
AP 模式(Access Point Mode):
- AP 模式也被称为热点模式或基础设施模式。
- 在 AP 模式下,Wi-Fi 设备充当访问点,负责创建和管理无线网络。
- AP模式的设备通常连接到有线网络,并通过无线信号将网络连接提供给其他设备,这些设备可以是 STA 模式下的客户端设备或其他 Wi-Fi 设备。
- AP 模式允许多个客户端设备同时连接到它,提供网络连接和资源共享的能力。
- 在 AP 模式下,设备通常具有固定的IP地址,可以设置网络的安全性参数,如密码和加密方式。
STA模式(Station Mode):
- STA 模式也被称为客户端模式或无线工作站模式。
- 在 STA 模式下,Wi-Fi 设备充当客户端,用于连接到无线网络的访问点(AP)。
- STA 模式的设备可以通过扫描可用的无线网络并选择一个AP进行连接。
- 一旦连接建立,STA 模式的设备可以与 AP 进行通信,通过无线网络访问 Internet 或其他网络资源。
- STA 模式的设备通常获取动态分配的 IP 地址,可以使用 DHCP 协议自动获取网络配置。
频段介绍
Wi-Fi 技术在无线通信中使用的频段主要包括 2.4 GHz 和 5 GHz 两个频段。不同的频段无法兼容,比如使用只支持 2.4G 的网卡去连接5G的热点网络,下面对这两个频段进行详细介绍:
2.4 GHz频段:
- 2.4 GHz频段是最常用的Wi-Fi频段之一。
- 在 2.4 GHz频段,可用的无线信道有 13 个,从频率 2412 MHz 到 2484 MHz,每个信道之间相隔 5 MHz。
- 2.4 GHz 频段的优点是信号传播距离较远,穿透能力较强,可以在较长的距离内提供较好的覆盖范围。
- 2.4 GHz 频段的缺点是由于被许多其他设备(如蓝牙设备、微波炉等)使用,可能存在较多的干扰和拥塞问题。
- 在 2.4 GHz 频段中,常用的 Wi-Fi 标准包括 802.11b、802.11g 和 802.11n。
5 GHz频段:
- 5 GHz 频段是较新的 Wi-Fi 频段,也被称为高速频段。
- 在 5 GHz 频段,可用的无线信道较多,具体可用信道数量因地区而异,通常有 24 个或更多。
- 5 GHz 频段的优点是拥有更大的频谱带宽,可以提供更高的数据传输速率和更低的延迟。
- 5 GHz 频段通常较少受到干扰,因为许多其他设备更倾向于在 2.4 GHz 频段中工作。
- 5 GHz 频段中,常用的 Wi-Fi 标准包括 802.11a、802.11n、802.11ac 和802.11ax(Wi-Fi 6)。
数据流
QuecPython 下 Wi-Fi 配置不同的工作方式,具有不同的工作流程,Station 模式主要是将模块连接外部设备接入外网,AP 模式主要为局域网设备提供 4G 网络。
对于内置 Wi-Fi 网卡设备,模块只存在 Wi-Fi 网卡,无法进行 4G 网络转发。
- STATION
将 Wi-Fi 网卡配置成 Station模式,此时通过 Wi-Fi 网卡连接外部热点,为模块提供网络,模块可以通过外部热点(如路由器)对外网进行访问。
- AP
将 Wi-Fi 网卡配置成 AP 模式,此时 Wi-Fi 作为接入点,模块为其他接入该接入点设备提供网络,通过网络转发,其他模块可以通过模块 4G 网络对外进行网络访问。
各平台接口支持情况
下表是各平台型号对于 UART 接口 Wi-Fi 及 SDIO 接口 Wi-Fi 适配支持情况。
型号\接口类型 | UART Wi-Fi | SDIO Wi-Fi | 内置 Wi-Fi |
---|---|---|---|
EC200A |
✕ | ✓ | ✕ |
EC600N |
✓ | ✕ | ✕ |
EC600U |
✓ | ✕ | ✕ |
EC600M/EC800M |
✓ | ✕ | ✕ |
EC600E/EC800E |
✓ | ✕ | ✕ |
FCM360W |
✕ | ✕ | ✓ |
- ✓: 支持
- ✕: 不支持
Wi-Fi API 说明
QuecPython 支持多种型号 Wi-Fi,其中包括外挂或者内置 Wi-Fi,由于历史原因,当前 ESP8266/ESP8285 尚未支持mpy接口,我们后续将对所有 Wi-Fi 设备接口进行统一。详细各型号接口说明请参考 Wiki下 WLAN 章节。
外置 ESP8266 Wi-Fi 网卡 API 说明
由于 ESP8266 是在串口 SLIP 协议上进行支持的,为了方便对接使用拓展,我们只是提供了 WLAN.py 脚本,内置 ESP8266 控制类,方便用户根据自己需求进行接口定义并开发。
详细接口信息请参考 WIKI 下ESP8266章节介绍。
接口调用关系如下图所示:
初始化 Wi-Fi 网卡工作模式
此处初始化 Wi-Fi 网卡,确认外挂 Wi-Fi 网卡连接的串口通道,以及 Wi-Fi 网卡的工作模式。
# 初始化 Wi-Fi 网卡 STA 工作模式配置
esp8266=ESP8266(UART.UART2,ESP8266.STA)
使能AP模式
开启AP模式,用户可以配置用户名/密码建立相应的热点。需要注意,此处配置需要跟网卡初始化接口模式保持一致。
# 初始化 Wi-Fi 网卡 AP 工作模式配置
esp8266=ESP8266(UART.UART2,ESP8266.AP)
# 配置建立热点的用户名/密码
esp8266.ap('user', 'password')
STATION模式
连接热点,根据热点的用户名/密码,连接对应的 Wi-Fi 接入点。
# 初始化 Wi-Fi 网卡 STA 工作模式配置
esp8266=ESP8266(UART.UART2,ESP8266.STA)
# 根据热点的用户名/密码,连接对应的 Wi-Fi 接入点
esp8266.station('user', 'password')
WEB 配网
开启 WEB 配网,主要在 STATION 模式下,通过 WEB 配置连接 Wi-Fi 热点。
# 初始化 Wi-Fi 网卡 STA 工作模式配置
esp8266=ESP8266(UART.UART2,ESP8266.STA)
# 配置用于开启WEB配网热点的用户名/密码
esp8266.web_config('user', 'password')
SMARTCONFIG配网
根据乐鑫官方提供的智能配网方案。主要应用在 STATION 模式下,通过 SMARTCONFIG 配置连接到 Wi-Fi 热点。
# 以使用AIRKISS & ESPTOUCH协议为例,请根据实际情况更改
protocol = 3
# 初始化 Wi-Fi 网卡 STA 工作模式配置
esp8266=ESP8266(UART.UART2,ESP8266.STA)
# 开启smartconfig,protocol可选择ESPTOUCH协议、AIRKISS协议、AIRKISS & ESPTOUCH协议和ESPTOUCH-V2协议中的一种进行配置
esp8266.smartconfig(protocol)
路由配置
提供了 Wi-Fi 网卡数据通过 4G 网卡转发的方法,需要进行两步,通过配置默认网卡接口确认由哪个网卡转发,另外需要配置路由转发设置,通过指定转发 IP 规则,只有热点的网段内数据才进行转发。一般当 Wi-Fi 网卡工作在 AP 模式下时,由 4G 网络为 Wi-Fi 终端提供网络服务。
- 对于模块进行 socket 通信,模块会进行路由查找,匹配对应的网卡进行发送,如果不进行 bind 网卡发送,此时网络会通过默认网卡进行发送,如果默认网卡不存在则会报错退出。
- 对于多网卡下,网络转发进行路由查找由哪个网卡发出时,对于非本机数据,如果没有默认网卡,将直接丢弃,如果配置默认网卡将通过默认网卡进行转发。对于ESP8266需要判断转发规则。
# 以子网掩码为255.255.255.0,ap模式网段为192.168.4.0 ~ 192.168.4.255为例
default_NIC_ip = '10.10.1.1' # 假设默认网卡ip地址为10.10.1.1,请根据实际情况更改
segment_ip = '192.168.4.0' # 假设ap模式网段范围是[192.168.4.0 ~ 192.168.4.255],请根据实际情况更改
mask = '255.255.255.0' # 假设子网掩码为255.255.255.0,请根据实际情况更改
# 配置默认网卡,通过默认网卡进行网络转发
esp8266.set_default_NIC(default_NIC_ip)
#添加路由规则,只有该网段IP才进行转发
esp8266.router_add(segment_ip, mask)
网络配置
此处网络配置信息,并非是对 ESP8266 侧网络进行配置,此处只是针对串口 SLIP 网卡进行配置,需要保证通信可靠性,不提供 IP 配置,只提供了 DNS 配置方法。
pri_dns = '8.8.8.8' # 假设DNS首选地址为8.8.8.8,请根据实际情况更改
pri_dns = '114.114.114.114' # 假设DNS备选地址为114.114.114.114,请根据实际情况更改
# 配置网卡DNS服务器
esp8266.set_dns(pri_dns, sec_dns)
# 网卡IP信息查询
esp8266.ipconfig()
状态查询
通过该接口获取网卡的当前状态,正常使用中,需要对网卡的状态进行对应的判断,然后进行操作。
# 获取网卡当前工作状态
esp8266.status()
OTA 升级
此处 OTA 升级只是针对 Wi-Fi 网卡,触发网卡进行 OTA 升级。
升级过程中只可查询当前状态,其他操作均不可执行。升级过程中根据回调进行通知。
# 以固件下载地址为http://www.example.com/fota.bin为例,请根据实际情况更改
url='http://www.example.com/fota.bin'
# esp8266 OTA升级接口,通过传入固件下载地址,实现 Wi-Fi 网卡固件升级,此功能需要 Wi-Fi 网卡配置成STATION模式使用
esp8266.ota(url)
通用 Wi-Fi 网卡 API 说明
此套接口是完全按照 MicroPython 官方接口进行开发适配。适用于 SDIO 外挂 Wi-Fi 网卡以及内置 Wi-Fi 网卡。
当前信息只是对于通用 Wi-Fi 接口使用说明,部分型号适配根据实际情况实现有所差异,详细接口信息请参考 Wiki 下 Wi-Fi通信 章节介绍。
初始化 Wi-Fi 网卡工作模式
初始化 Wi-Fi 网卡,确认 Wi-Fi 网卡工作模式。
加载 FCM360W/FC41D
nic = network.WLAN(network.STA_IF)
加载ASR5803
nic = network.ASR5803W(network.STA_IF)
使能 AP 模式
开启AP模式,用户可以配置用户名/密码建立相应的热点。需要注意,此处配置需要跟网卡初始化接口模式保持一致。
# 初始化 Wi-Fi 网卡 AP 工作模式
nic = network.WLAN(network.AP_IF)
# 配置建立热点的用户名/密码
nic.config('ssid'='user', 'key'='password')
# 激活 Wi-Fi 网卡
nic.active(True)
STATION 模式
连接热点,根据热点的用户名密码,连接对应的 Wi-Fi 接入点。
方式1:
# 初始化 Wi-Fi 网卡 STATION 工作模式
nic = network.WLAN(network.STA_IF)
# 连接热点的用户名/密码。
nic.connect('user', 'password')
方式2:
# 初始化 Wi-Fi 网卡 STATION 工作模式
nic = network.WLAN(network.STA_IF)
# 配置连接热点的用户名/密码
nic.config('ssid'='user', 'key'='password')
# 激活 Wi-Fi 网卡
nic.active(True)
配网
当前只能通过 Python 接口配置网路,其他方式正在完善中。
网卡配置
提供了网络配置方法,方便用户根据需要进行网络配置。比如需要网卡在组网环境中使用静态IP,可以通过该接口进行配置,或者AP模式下,默认网段与其他网段有冲突,可以修改到其他网段进行使用。
ip = '192.168.0.4' # 假设ip地址为192.168.0.4,请根据实际情况更改
subnet = '255.255.255.0' # 假设子网掩码为255.255.255.0,请根据实际情况更改
gateway = '192.168.0.1' # 假设网关地址为192.168.0.1,请根据实际情况更改
primary_dns = '8.8.8.8' # 假设DNS首选地址为8.8.8.8,请根据实际情况更改
secondary_dns = '114.114.114.114' # 假设DNS备选地址为114.114.114.114,请根据实际情况更改
# 网卡静态IP配置
nic.ifconfig((ip, subnet, gateway, primary_dns, secondary_dns))
# 网卡IP信息获取
nic.ifconfig()
参数配置及查询
网卡提供了一系列配置及查询方法,方便用户调试或者应用 Wi-Fi 网卡。
# 网卡配置与查询,可以配置ssid、bssid、channel、RSSI、security和hidden等信息。具体支持情况请查看Wiki下对应型号进行确认
nic.config('param')
nic.config(param=value)
# 网卡激活与去激活查询与配置接口
nic.active([param])
# 网卡STA模式下,与路由器断开连接
nic.disconnect()
# 网卡STA模式下,表示是否连接到路由器,网卡 AP 模式下,表示是否有客户端连接
nic.isconnected()
状态查询
通过该接口获取网卡的当前状态及一些属性值,正常使用中,需要对网卡的状态进行对应的判断。
#网卡状态查询,当不进行传参时只是查询网卡当前状态,对于传参时查询具体的参数信息。
nic.status([param])
应用示例
下面以 QuecPython EC600NCN_LE 开发板(下称开发板)通过 UART2 连接 ESP8266 使用 Wi-Fi 功能为例进行演示:
常见问题
1. 为什么 ASR5803 启动后搜索不到 Wi-Fi 信号?
a. 硬件 GPIO 设置是否正确。
b.MAC地址是否合法(符合 IEEE 中对于 Wi-Fi AP模式MAC 设置的规定)。
c. Wi-Fi 距离过远或信号质量差。
d. 其他因素:如无线干扰、安全设置、网络配置等。
2. Wi-Fi 连接不上。
a. 热点频段与 Wi-Fi 网卡是否在一个频段,比如2.4G/5G。
b. 热点信息是否存在乱码,Wi-Fi 不支持特殊字符。
3. 支持哪些 Wi-Fi 芯片?
当前通过串口外挂 Wi-Fi 芯片支持 ESP8266/ESP8285/FC41D,SDIO 外挂 Wi-Fi 芯片支持 ASR5803,内置 Wi-Fi 芯片支持 FCM360W。