在本章节中,我们将采用 network 与 socket 这两个第三方库来构建UDP网络连接的功能。具体而言,network 库将被应用于WiFi连接的建立,而 socket 库则基于 lwIP 协议栈来实现网络协议的连接。在实验环节,我们将利用 ESP32 开发板与远程网络进行连接,并在此基础上进一步实施 UDP 连接的实现。本次实验的核心目标,在于构建一个基础的 UDP 连接机制,使其能够通过网络调试助手发送数据,并准确无误地将接收到的数据回传至发送端。
本节课目标:
在本次实验中,我们将ESP32开发板与WiFi网络连接,并配置实现UDP连接。核心任务是构建稳固的UDP连接机制,确保通过网络调试助手发送数据,并能准确回传接收数据,验证UDP连接的可靠性和有效性。
本节课内容:
- network 与 socket 库的简介
- network库的构造与方法
- socket 库的构造与方法
- 硬件设计
- 软件设计
- 下载验证
一、network 与 socket 库的简介
MicroPython 的 network 库与 socket 库皆为实现网络连接的重要工具,它们各自拥有独特的功能性并共享某些共通特点。
作为 MicroPython 的一个关键第三方库,network 库专门负责处理 WiFi 和网络连接的各项任务。通过此库,用户能够成功接入无线网络,查询当前网络状态,以及实现数据的收发等功能。在 MicroPython 的架构下,network 库扮演着促进设备间网络连接与通信的核心角色。
至于 network 库与 socket 库之间的主要差异,则体现在它们的应用场景与功能侧重上。具体而言,network 库侧重于设备的 WiFi 和基础网络连接功能的实现,而 socket 库则聚焦于高级网络协议的连接建立与数据传输过程。因此,在实际进行网络连接功能的设计与实施时,需根据具体需求及所依赖的硬件平台,谨慎选择并合理运用相应的库资源。
下面是MicroPython库的network 与 socket 库的链接。
network — 网络配置 — MicroPython latest documentation
socket – 套接字模块 — MicroPython latest documentation
类 WLAN – 控制内置 WiFi 接口 — MicroPython 最新文档
二、network.WLAN类的构造与方法
1. network.WLAN类的构造
构造对象方法如下:
class network.WLAN(interface_id)
使用示例:wlan = network.WLAN(network.STA_IF)
参数描述如下:
参数 | 描述 |
interface_id | 支持接口
|
返回值:WLAN网络接口对象
2. network.WLAN类的方法
(1)激活或停用网络接口
其方法原型如下:
WLAN.active(is_active[ ])
参数描述如下:
参数 | 描述 |
is_active |
|
返回值:无
(2)连接网络
其方法原型如下:
WLAN.connect(ssid=None, password=None)
参数描述如下:
参数 | 描述 |
ssid | WiFi账号 |
password | WiFi密码 |
返回值:Ture:连接成功;Fail:连接失败。
(3)关闭网络
其方法原型如下:
WLAN.disconnet()
返回值:无
(4)获取或者设置网络参数
其方法原型如下:
WLAN.ifconfig((ip, subnet, gateway, dns)[])
参数描述如下:
参数 | 描述 |
ip | IP地址 |
subnet | 子网掩码 |
gateway | 网关 |
dns | DNS服务器 |
返回值:若此函数为无参数传入,则返回连接网络的信息,反次,为设置网络参数。
以上是 network.WLAN 类常用的方法,还有其他方法可参考 MicroPython 的在线文档。
三、socket 库的构造与方法
1. socket类的构造
构造对象方法如下:
class socket.socket(af=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP, /)
使用示例:socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
参数描述如下:
参数 | 描述 |
af | 地址族
|
type | socket类型
|
proto | 网络协议
|
返回值:socket对象
2. socket类的方法
(1)关闭socket接口
其方法原型如下:
socket.close()
返回值:无
(2)socket绑定到地址
其方法原型如下:
socket.bind(address)
参数描述如下:
参数 | 描述 |
address | IP地址(字符串形式输入,如‘192.168.1.100’) |
返回值:无
(3)监听连接
用作于 TCPServer 连接。
其方法原型如下:
socket.listen(backlog[])
参数描述如下:
参数 | 描述 |
backlog | 监听连接数量 |
返回值:无
(4)接受连接
用作于 TCPServer 连接。注:在此之前,需监听连接
其方法原型如下:
socket.accept()
返回值:conn:新的套接字对象,用来收发消息;address:连接到服务器的客户端地址。
(5)连接远程IP地址
其方法原型如下:
socket.connect(address)
参数描述如下:
参数 | 描述 |
address | IP地址(字符串形式输入,如‘192.168.1.100’) |
返回值:无
(6)发送数据,返回发送的字节数
其方法原型如下:
socket.send(bytes)
参数描述如下:
参数 | 描述 |
bytes | 需发送的字节数据 |
返回值:发送的数据字节数。
(7)接收数据,返回值是一个字节对象
其方法原型如下:
socket.recv(bufsize)
参数描述如下:
参数 | 描述 |
bufsize | 接收数据的存储区 |
返回值:接收数据字节对象。
(8)接收数据,返回值是一个字节对象
其方法原型如下:
socket.recvfrom(bufsize)
参数描述如下:
参数 | 描述 |
bufsize | 接收数据的存储区 |
返回值:bytes:接收数据字节对象;addressa:套接字发送的地址数据。
(9)UDP发送数据,一般用于UDP连接
其方法原型如下:
socket.sendto(bytes, address)
参数描述如下:
参数 | 描述 |
bytes | 发送的数据 |
address | 发送至哪个远程IP地址 |
返回值:发送的数据字节数。
以上方法列出了本书中常用的套接字方法,对于剩余的套接字方法,请参考MicroPython最新的在线文档。
四、硬件设计
例程功能
在本次实验中,我们将ESP32开发板与WiFi网络连接,并配置实现UDP连接。核心任务是构建稳固的UDP连接机制,确保通过网络调试助手发送数据,并能准确回传接收数据,验证UDP连接的可靠性和有效性。
硬件资源
- WIFI :ESP32内部自带WIFI模块
四、软件设计
程序流程图
程序
import network
import socket
def do_connect():
"""
WIFI 连接函数
"""
wlan = network.WLAN(network.STA_IF) # 构建 wlan 对象
wlan.active(True) # 开启WIFI
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('OrayBox-zsf', '123456789') # 连接到WIFI路由器上
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig()) # 打印网络参数
# 1、WIFI 网络连接
do_connect()
# 2、创建 UDP 套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 3、UDP【查看自己测试电脑在同一 WIFI 下的地址,本测试电脑 IP 为'10.168.1.164'】
# 10.168.1.164
# 4、发送实验信息,通过UDP协议,与电脑的网络助手通信, 网络助手UDP配置参数为:IP:'10.168.1.164' 端口:8080
udp_socket.sendto('**************** UDP CONNECT TEST******************\r\n'.encode("utf-8"), ('10.168.1.164', 8080))
# 5、循环发送接收到的服务器数据
while True:
# UDP 接收到的数据,及服务器 IP 和 端口号
data, addr = udp_socket.recvfrom(4096)
print(data, addr)
udp_socket.sendto(data, (addr[0], addr[1]))
五、下载验证
将ESP32开发板与电脑通过WIFI路由器,连接在同一WiFi网络中,配置电脑上的网络调试助手UDP参数,如下图所示,并打开网络。
注意:ESP32程序中UDP发送目标IP和端口信息,按网络调试助手输入,如下图所示。
运行ESP32程序,网络调试助手会接收到ESP32的网络信息【10.168.1.139:50367】,设备网络调试助手远程主机地址信息,如下图所示。
与ESP32通过UDP协议相互通信。【UDP 通信有丢包的现象】
标签:10,UDP,socket,如下,实验,参数,连接,network From: https://blog.csdn.net/johnny235241/article/details/142320361