|
1)实验平台:正点原子ESP32S3开发板
2)购买链接:https://detail.tmall.com/item.htm?id=768499342659
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-347618-1-1.html
4)正点原子官方B站:https://space.bilibili.com/394620890
5)正点原子手把手教你学ESP32S3快速入门视频教程:https://www.bilibili.com/video/BV1sH4y1W7Tc
6)正点原子FPGA交流群:132780729
第三十三 TCPClient实验
在本章中,作者将实现一个简单的TCPClient连接,通过网络调试助手发送数据,并将接收到的数据原原本本地返回。
33.1 network与socket库的简介
33.2 硬件设计
33.3 软件设计
33.4 下载验证
33.1 network与socket库的简介
在第三十二章中,作者简要介绍了network与socket第三方源代码库,并详细阐述了这两个源代码库在MicroPython环境中的调用方法和参数传递说明。
33.2 硬件设计
1. 例程功能
本章实验功能简介:当TCPClient连接成功后,网络调试助手作为服务器,开发板作为客户端,服务器发送数据至开发板时,开发板将数据原原本本的发送至网络调试助手。
2. 硬件资源
1)ESP32-S3内部WiFi
3. 原理图
本章实验使用的WiFi为ESP32-S3的片上资源,因此并没有相应的连接原理图。
33.3 软件设计
33.3.1 程序流程图
程序流程图能帮助我们更好的理解一个工程的功能和实现的过程,对学习和设计工程有很好的主导作用。下面看看本实验的程序流程图。
图33.3.1.1 程序流程图
33.3.2 程序解析
本书籍的代码都在main.py脚本下编写的,读者可在光盘资料下找到对应的源码。TCPClient实验main.py源码如下:
- import socket
- import network
- import time
- SSID = "xxx" # wifi名称
- PASSWORD = "xxx" # wifi密码
- Server_IP = '192.168.101.33' # 原程IP地址
- wlan = None
- pos = 0
- """
- * @brief 连接网络
- * @param 无
- * @retval 无
- """
- def connect():
-
- global wlan
- wlan = network.WLAN(network.STA_IF)
- wlan.active(False)
- wlan.active(True)
-
- if not wlan.isconnected():
- print('connecting to network...')
- wlan.connect(SSID, PASSWORD)
- while not wlan.isconnected():
- pass
- print('network config: ', wlan.ifconfig())
- """
- * @brief 模拟goto
- * @param label:标签
- * @retval 无
- """
- def goto(label):
- global pos
- pos = label
-
- """
- * @brief 程序入口
- * @param 无
- * @retval 无
- """
- if __name__ == '__main__':
-
- # 连接网络
- connect()
-
- while True:
-
- while pos == 0:
- # 获取本地IP
- ip = wlan.ifconfig()[0]
-
- """
- 创建socket 对象,socket.socket(ip 类型,协议):
- socket.AFINET是ipv4;socket.AFINET6是ipv6
- socket.SOCK_STREAM表示tcp;SOCK_DGRAM表示UDP
- """
- client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
- print('network config:', ip)
-
- """
- 和服务器建立连接
- socket对象connect((服务器ip地址,端口号)) 类型是元组
- """
- try:
- client_socket.connect((Server_IP,8080))
- except BaseExc1eption:
- client_socket.close()
- print('关闭字节套......')
- goto(0)
- break
-
- print('连接建立成功......')
- # 发送信息
- client_socket.send("**********************************\r\n")
- client_socket.send(f'正点原子 ESP32-S3 开发板 TCPClient\r\n'
- .encode('utf-8'))
- client_socket.send("**********************************\r\n")
-
- while True:
- try:
- # 每次接收4096字节
- data = client_socket.recv(4096)
- except BaseExc1eption:
- client_socket.close()
- break
- # 如果收到空消息关闭连接
- if (len(data) == 0):
-
- print("close socket")
- client_socket.close()
- break
-
- # 回显操作
- client_socket.send(data)
复制代码 在上述代码中,作者首先配置了WiFi的账号和密码,并构建了ESP32-S3与网络通道。接着,设置了服务器的远程IP地址,以便将数据发送到指定的地址。随后,作者定义了一个网络连接函数,该函数使用network第三方库的方法来实现网络连接。一旦连接建立,作者配置了连接协议,还定义了模拟C语言的goto语句,为了重新连接服务器做准备。在本实验中,使用的是TCP连接,因此配置了套接字为TCP连接。接着,作者调用client_socket.connect函数连接远程服务器,如果连接成功,则发送实验信息至服务器,反次,关闭套接字并重新创建TCP套接字。最后,不断接收服务器发送的数值,并将数据原原本本地发送回服务器。
温馨提示:当服务器关闭连接时,系统会接收到连接关闭的消息,即上述源码的len大小为0时,程序执行关闭套接字和跳出第二个while,最后系统不断尝试连接服务器,直到服务器重新连接。
33.4 下载验证
程序下载到开发板后,需要打开网络调试助手,并在网络调试助手中配置协议为TCPServer。在配置过程中,需要输入本机的IP地址,即当前电脑的IP地址,以及端口号8080。完成上述配置后,点击“连接”按钮以连接设备。一旦连接成功,可以在网络调试助手的发送框中填写需要发送的数据,并按下“发送按钮”以发送数据。此时,网络调试助手会接收到刚刚发送的数据。
图33.4.1 网络调试助手配置与收发 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|