城市门户网站建设,wordpress好用主题,网站建设的书 豆瓣,tp5手机网站开发在上一章节中#xff0c;我们学习了TCPClient通信测试的相关知识。接下来#xff0c;本章节将以此为基础#xff0c;构建一个基础性的TCPServer连接机制#xff0c;该机制将利用之前所建立的WIFI网络连接。为方便演示#xff0c;我们将借助网络调试助手工具进行数据的发送… 在上一章节中我们学习了TCPClient通信测试的相关知识。接下来本章节将以此为基础构建一个基础性的TCPServer连接机制该机制将利用之前所建立的WIFI网络连接。为方便演示我们将借助网络调试助手工具进行数据的发送进而对网络通信中接收到的数据进行测试确保这些数据能够准确无误地回传以验证通信机制的有效性和稳定性。 本节课目标
基于ESP32开发板的WiFi网络实现一个简单的TCPServer连接通过网络调试助手发送数据并将接收到的数据原原本本地返回。
本节课内容
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 支持接口 network.STA_IF作为客户端连接其他的服务器network.AP_IF作为服务器其他WiFi客户端连接
返回值WLAN网络接口对象
2. network.WLAN类的方法
1激活或停用网络接口
其方法原型如下
WLAN.active(is_active[ ])
参数描述如下 参数 描述 is_active True激活False作为服务器其他WiFi客户端连接
返回值无
2连接网络
其方法原型如下
WLAN.connect(ssidNone, passwordNone)
参数描述如下 参数 描述 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(afAF_INET, typeSOCK_STREAM, protoIPPROTO_TCP, /)
使用示例socket socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
参数描述如下 参数 描述 af 地址族 socket_AF_INETIPV4socket_AF_INET6IPV6 type socket类型 socket.SOCK_STREAMTCP类型socket.SOCK_DGRAMUDP类型 proto 网络协议 socket.IPPROTO_TCPTCP协议socket.IPPROTO_UDPUDP协议
返回值socket对象
2. socket类的方法
1关闭socket接口
其方法原型如下
socket.close()
返回值无
2设置socket 选项的值
其方法原型如下
socket.setsockopt(level, optname, value)
参数描述如下 参数 描述 level 是被设置的选项的级别如果想要在套接字级别上设置选项就必须把level设置为SOL_SOCKET optname 在套接字级别上(SOL_SOCKET)option_name可以有以下取值 SO_DEBUG打开或关闭调试信息SO_REUSEADDR打开或关闭地址复用功能SO_DONTROUTE打开或关闭路由查找功能SO_BROADCAST允许或禁止发送广播数据SO_SNDBUF设置发送缓冲区的大小SO_RCVBUF设置接收缓冲区的大小SO_KEEPALIVE套接字保活SO_OOBINLINE紧急数据放入普通数据流SO_NO_CHECK打开或关闭校验和SO_PRIORITY设置在套接字发送的所有包的协议定义优先权SO_LINGER如果选择此选项, close或 shutdown将等到所有套接字里排队的消息成功发送或到达延迟时间后才会返回. 否则, 调用将立即返回SO_PASSCRED允许或禁止SCM_CREDENTIALS 控制消息的接收SO_TIMESTAMP打开或关闭数据报中的时间戳接收SO_RCVLOWAT设置接收数据前的缓冲区内的最小字节数SO_RCVTIMEO设置接收超时时间SO_SNDTIMEO设置发送超时时间SO_BINDTODEVICE将套接字绑定到一个特定的设备上 value True开启False关闭
返回值无
3socket绑定到地址
其方法原型如下
socket.bind(address)
参数描述如下 参数 描述 address IP地址字符串形式输入如‘192.168.1.100’
返回值无
4监听连接
用作于 TCPServer 连接。
其方法原型如下
socket.listen(backlog[])
参数描述如下 参数 描述 backlog 监听连接数量
返回值无
5接受连接
用作于 TCPServer 连接。注在此之前需监听连接
其方法原型如下
socket.accept()
返回值conn新的套接字对象用来收发消息address连接到服务器的客户端地址。
6连接远程IP地址
其方法原型如下
socket.connect(address)
参数描述如下 参数 描述 address IP地址字符串形式输入如‘192.168.1.100’
返回值无
7发送数据返回发送的字节数
其方法原型如下
socket.send(bytes)
参数描述如下 参数 描述 bytes 需发送的字节数据
返回值发送的数据字节数。
8接收数据返回值是一个字节对象
其方法原型如下
socket.recv(bufsize)
参数描述如下 参数 描述 bufsize 接收数据的存储区
返回值接收数据字节对象。
9接收数据返回值是一个字节对象
其方法原型如下
socket.recvfrom(bufsize)
参数描述如下 参数 描述 bufsize 接收数据的存储区
返回值bytes接收数据字节对象addressa套接字发送的地址数据。
10UDP发送数据一般用于UDP连接
其方法原型如下
socket.sendto(bytes, address)
参数描述如下 参数 描述 bytes 发送的数据 address 发送至哪个远程IP地址
返回值发送的数据字节数。
以上方法列出了本书中常用的套接字方法对于剩余的套接字方法请参考MicroPython最新的在线文档。
四、硬件设计
1. 例程功能
在本次实验中我们将ESP32开发板与WiFi网络进行了连接并完成了TCPServer的连接配置。当TCPServer成功建立连接后我们采用了网络调试助手作为客户端设备而开发板则作为服务器端设备。在此环境下当客户端设备即网络调试助手向服务器端设备即开发板发送数据时服务器端设备将接收到的数据完整地回传至客户端设备从而实现了数据的双向交互。
2. 硬件资源
WIFI ESP32内部自带WIFI模块
四、软件设计
1. 程序流程图 2. 程序
import network
import socket# 网络信息
SSID OrayBox-zsf # WIFI名称
PASSWORD 123456789 # WIFI密码
Server_IP 10.168.1.164 # 服务器IP地址wlan None # 定义一个无线网络
pos 0 # 状态机用于状态切换def connect():连接 WIFI 路由器global wlanwlan network.WLAN(network.STA_IF)wlan.active(True)if not wlan.isconnected():print(connecting to network...)wlan.connect(SSID, PASSWORD)while not wlan.isconnected():passprint(network config:, wlan.ifconfig()) # 打印网络参数def goto(label):切换状态:param label: 状态号global pospos label
------------------------------------------------------------------------------------下面为主函数
------------------------------------------------------------------------------------# 1、连接 WIFI 路由器
connect()while True:# 循环while pos 0: # 状态 0 用于建立socket连接服务器# 2、获取本地 IP 地址并打印ip wlan.ifconfig()[0]print(network config:, ip)# 3、创建 TCP 套接字TCPServer socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建 TCPServer 对象IPV4 \ TCP 类型# 4、绑定 本地IP 和 端口号# 设置端口复用是用来设置套接字选项的函数调用。这个选项用于指定套接字的行为打开地址复用功能以便在绑定到一个端口时能够重新使用这个端口。否则会出错TCPServer.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)TCPServer.bind((, 8080))# 5、监听参数是同时连接的客户端数量TCPServer.listen(10)# 6、阻塞等待客户端连接# 返回一个元组 新 socket, (客户端 IP,端口) try:new_socket, client_ip_port TCPServer.accept() # 连接服务器except BaseException:# 故障处理程序new_socket.close() # 关闭新套接字TCPServer.close() # 关闭套接字print( 关闭套接字.... )goto(0) # 重新返回状态 0breakelse:print(连接建立成功......)new_socket.send(************** ESP32 服务器 .encode() str(ip).encode() 欢迎你 ****************\r\n.encode())goto(1) # 进入状态 1网络连接成功处理通信while pos 1:# 状态 1 用于连接服务器后发送接收到的服务器数据try:# 接收到客户端的数据data new_socket.recv(1024)print(data.decode())except BaseException:# 故障时关闭连接重新建立连接new_socket.close()TCPServer.close() # 关闭套接字goto(0)breakelse:# 空数据时不回显if (len(data) 0):print(接收到空的数据)new_socket.close()TCPServer.close() # 关闭套接字goto(0)breakelse:# 非空数据回显new_socket.send(data)
五、下载验证
将ESP32开发板与电脑通过WIFI路由器连接在同一WiFi网络中配置电脑上的网络调试助手TCP Client参数如下图所示并连接服务器网络将接收到ESP32开发板服务器发送过来的数据。 与ESP32通过TCP协议相互通信。