4. 网络基础

网络模块用于配置WiFi连接。有两处WiFi接口,一个用于 station (当ESP32连接到路由器时),一个用于热点(access point)(用于其他设备与ESP32连接)。 使用以下指令创建这些对象的实例:

>>> import network
>>> sta_if = network.WLAN(network.STA_IF)
>>> ap_if = network.WLAN(network.AP_IF)

您可使用以下指令检查接口是否有效:

>>> sta_if.active()
False
>>> ap_if.active()
True

您可使用以下指令检查接口的网络设置:

>>> ap_if.ifconfig()
('192.168.4.1', '255.255.255.0', '192.168.4.1', '8.8.8.8')

返回值为:IP地址、网络掩码、网关、DNS。

4.1. WiFi的配置

全新安装时,ESP32配置为热点模式,因此AP_IF接口有效,STA_IF接口无效。您可使用STA_IF接口将此模块配置为与您自己的网络连接。 Upon a fresh install the ESP32 is configured in access point mode, so the AP_IF interface is active and the STA_IF interface is inactive. You can configure the module to connect to your own network using the STA_IF interface.

首先激活station接口:

>>> sta_if.active(True)

然后连接到您的WiFi网络:

>>> sta_if.connect('<your ESSID>', '<your password>')

使用以下指令检查连接是否建立:

>>> sta_if.isconnected()

建立后,您可检查IP地址:

>>> sta_if.ifconfig()
('192.168.0.2', '255.255.255.0', '192.168.0.1', '8.8.8.8')

若您不再需要热点接口,可禁用该接口:

>>> ap_if.active(False)

下面的函数可以自动运行来自动连接到WiFi网络,放入boot.py可以自启动:: 您可运行此函数,便可自动连接到您的WiFi网络:

def do_connect():
    import network
    sta_if = network.WLAN(network.STA_IF)
    if not sta_if.isconnected():
        print('connecting to network...')
        sta_if.active(True)
        sta_if.connect('<essid>', '<password>')
        while not sta_if.isconnected():
            pass
    print('network config:', sta_if.ifconfig())

4.2. Sockets

WiFi建立后,访问网络的方式即使用sockets。一个Socket代表网络设备上的端点,两个socket连接在一起时,即可进行通信。 网络协议建立在socket的上层,例如电子邮件(SMTP)、网络(HTTP)、远程登录协议、安全外壳协议等。 每个协议都被分配了一个特定端口,此端口即一个数字。给定一个IP地址和一个端口数字,您即可连接到一个远程设备并开始与之通信。 本教程的下一章节讨论如何使用socket来执行一些常见的网络任务