ESP32-S3如何用socket通信

实验目的:

        通过 Socket 编程实现 pyWiFi-ESP32-S3 与电脑服务器助手建立连接,相互收
发数据。

首先先来简单了解一下Socket

我们先来看看网络层级模型图,这是构成网络通信的基础:

        我们看看 TCP/IP 模型的传输层和应用层,传输层比较熟悉的概念是 TCP 和 UDP, UPD 协议基本就没有对 IP 层的数据进行任何的处理了。而 TCP 协议还加入 了更加复杂的传输控制,比如滑动的数据发送窗口(Slice Window ),以及接收确 认和重发机制,以达到数据的可靠传送。应用层中网页常用的则是 HTTP 。那么我们先来解析一下这 TCP HTTP 两者的关系。

        我们知道网络通信是最基础是依赖于 IP 端口的, HTTP 一般情况下默认使用端口 80。举个简单的例子:我们逛淘宝,浏览器会向淘宝网的网址(本质是IP)和端口发起请求,而淘宝网收到请求后响应,向我们手机返回相关网页数据信息,实现了网页交互的过程。而这里就会引出一个多人连接的问题,很多人访问淘宝网,实际上接收到网页信息后就断开连接,否则淘宝网的服务器是无法支撑这么多人长时间的连接的,哪怕能支持,也非常占资源。

        也就是应用层的 HTTP 通过传输层进行数据通信时, TCP 会遇到同时为多个应用程序进程提供并发服务的问题。多个 TCP 连接或多个应用程序进程可能需要通过同一个 TCP 协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与 TCP IP 协议交互提供了套接字 (Socket)接口。应用层可以和传输层通过 Socket 接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

        简单来说,Socket 抽象层介于传输层和应用层之间, TCP/IP 并没有必然的联系。Socket 编程接口在设计的时候,就希望也能适应其他的网络协议。

        套接字(socket)是通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:
        连接使用的协议(通常是 TCP UDP ),本地主机的 IP 地址,本地进程的协议端
口,远地主机的 IP 地址,远地进程的协议端口。

        所以,socket 的出现只是可以更方便的使用 TCP/IP 协议栈而已,简单理解就是其对 TCP/IP 进行了抽象,形成了几个最基本的函数接口。比如 create listen, accept, connect read write 等等。以下是通讯流程:

重点

从上图可以看到,建了 Socket 通信需要一个服务器端和一个客户端,以本实验为例,pyWiFi-ESP32-S3 作为客户端,电脑使用网络调试助手作为服务器端,双方使用 TCP 协议传输。

对于客户端,则需要知道电脑端的 IP 和端口即可建立连接。(端口可以自定义,范0~65535 ,注意不占用常用的 80 等端口即可。)

以上的内容,简单来说就是如果用户面向应用来说,那么 ESP32-S3 只需要知道通讯协议是 TCP UDP 服务器的 IP 端口号 3 个信息,即可向服务器发起连接和发送信息。就这么简单。

代码如下

'''
实验名称:Socket通讯
版本:v1.0
日期:2024.4
作者:冰美式
说明:通过Socket编程实现pyWiFi-ESP32-S3与电脑服务器助手建立TCP连接,相互收发数据
可以控制舵机。
'''#导入相关模块
import network,usocket,time
from machine import SoftI2C,Pin,Timer, PWM
from ssd1306 import SSD1306_I2C#初始化相关模块
i2c = SoftI2C(sda=Pin(42), scl=Pin(40))S1 = PWM(Pin(4), freq=50, duty=0) # Servo1的引脚是0def Servo(servo,angle):S1.duty(int(((angle+90)*2/180+0.5)/20*1023))#WIFI连接函数
def WIFI_Connect():WIFI_LED=Pin(46, Pin.OUT) #初始化WIFI指示灯wlan = network.WLAN(network.STA_IF) #STA模式wlan.active(True)                   #激活接口start_time=time.time()              #记录时间做超时判断if not wlan.isconnected():print('Connecting to network...')wlan.connect('FM-674614', '12345678') #输入WIFI账号密码while not wlan.isconnected():#LED闪烁提示WIFI_LED.value(1)time.sleep_ms(300)WIFI_LED.value(0)time.sleep_ms(300)#超时判断,15秒没连接成功判定为超时if time.time()-start_time > 15 :print('WIFI Connected Timeout!')breakif wlan.isconnected():#LED点亮WIFI_LED.value(1)#串口打印信息print('network information:', wlan.ifconfig())return Trueelse:return False#判断WIFI是否连接成功
if WIFI_Connect():#创建socket连接TCP类似,连接成功后发送“Hello 01Studio!”给服务器。s=usocket.socket()addr=('192.168.0.101',10000) #服务器IP和端口s.connect(addr)s.send('Hello 01Studio!')while True:data = s.recv(128)  # 单次最多接收 128 字节if data == b'':passelse:  # 打印接收到的信息为字节,可以通过 decode('utf-8')转成字符串print(data)number = int(data.decode('utf-8'))  # 将接收到的字节数据转换为整数s.send(b'I got: ' + data)  # 发送确认收到的信息给服务器Servo(S1, number)  # 调用 Servo() 函数并传递整数值time.sleep_ms(300)

注意,要改成相同的路由WIFI密码,服务器的IP是本机电脑的IP(用ipconfig可以查到)。然后端口写 100000-65535 都可以)。

WIFI 连接成功后返回 True ,否则返回 False 。程序在返回连接成功后建了 Socket 连接,连接成功发送‘ Hello 01Studio!’信息到服务器。另外 RTOS 定时器设定了了每 300ms 处理从服务器接
收到的数据。将接收到数据通过串口打印和发送给服务器。

中间的IP地址是电脑本机的IP地址,端口号注意与thonny里面绑定给ESP32的端口号要一致。

成功如下:

选中后我们在发送框输入信息“ Hi ”,点击发送,可以看到开发板的 REPL 235
印出来信息 Hi 。为字节数据。另外由于程序将收到的信息发回给服务器,所以在
网络调试助手中也接收到开发板返回的信息: I got:Hi

你发送数字,舵机可以转动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/4461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot + Vue实现Github第三方登录

前言:毕业设计终于好了,希望能有空多写几篇 1. 获取Github账号的Client ID和Client secrets 首先点击这个链接进入Github的OAuth Apps页面,页面展示如下: 之后我们可以创建一个新的apps: 填写资料: 创建之后就可以获…

WhatsApp解封方法和防封技巧分享,内附解封话术!

WhatsApp 已成为外贸人员不可或缺的沟通工具,它不仅加速了全球范围内的客户沟通,还提供了一个方便快捷的社交媒体营销平台。然而,面对WhatsApp账号被封的问题,许多外贸人常常感到束手无策。本文旨在分享有效的WhatsApp解封方法&am…

西湖大学赵世钰老师【强化学习的数学原理】学习笔记2节

强化学习的数学原理是由西湖大学赵世钰老师带来的关于RL理论方面的详细课程,本课程深入浅出地介绍了RL的基础原理,前置技能只需要基础的编程能力、概率论以及一部分的高等数学,你听完之后会在大脑里面清晰的勾勒出RL公式推导链条中的每一个部…

BKP备份寄存器RTC实时时钟

文章目录 BKP简介相关引脚BKP基本结构 RTC简介RTC框图三种时钟源RTC基本结构 硬件电路RTC操作注意事项 BKP简介 BKP(Backup Registers)备份寄存器BKP可用于存储用户应用程序数据。当VDD(2.0~ 3.6V)电源被切断,他们仍然…

【QT】ROS2 Humble联合使用QT教程

【QT】ROS2 Humble联合使用QT教程 文章目录 【QT】ROS2 Humble联合使用QT教程1. 安装ROSProjectManager插件2. 创建ROS项目3.一个快速体验的demoReference 环境的具体信息如下: ubunt 22.04ros2 humbleQt Creator 13.0.0ROS ProjectManager 13.0.0 本文建立在已经…

MT3030 天梯赛

跟MT3029战神小码哥类似,都是贪心堆。注意开long long 这里的堆顶为战斗力最小的,便于贪心的反悔操作。先按容忍度从大到小排序(q中总容忍度取决于最小的容忍度),再向q中存数,存到不能容忍之后再把堆顶踢出…

深度学习-线性回归+基础优化算法

目录 线性模型衡量预估质量训练数据参数学习训练损失最小化损失来学习参数显式解 总结基础优化梯度下降选择学习率 小批量随机梯度下降选择批量大小 总结线性回归的从零开始实现实现一个函数读取小批量效果展示这里可视化看一下 线性回归从零开始实现线性回归的简洁实现效果展示…

静态住宅IP代理VS动态住宅IP代理,该如何选择?

在网络安全和数据采集领域,代理服务已经成为一个必不可少的工具。在IP代理服务中,静态住宅代理和动态住宅代理是两种常见的代理类型。今天就为大家详细介绍静态住宅代理与动态住宅代理的差异。 首先我们来看什么是静态住宅IP,这种IP地址可以被…

硅酸盐玻璃反应离子刻蚀在光学微系统的应用前景

引言 微光学元件和复杂光学微系统需要超精密制造工艺。最大容许粗糙度由所用波长λ的分数定义,例如λ或更好,而元件的整体尺寸和形状可以容易地达到毫米或厘米范围。在RIE过程中,材料传输是通过离子和反应气体与等离子体反应器表面的物理和化…

Spring Boot项目中的ASCII艺术字

佛祖保佑: ${spring-boot.formatted-version} ———————————————————————————————————————————————————————————————————— // _ooOoo_ …

分享爱,分享精彩瞬间,分享5款实用软件

分享爱,分享时光,分享精彩瞬间,大家好,我是互联网的搬运工,今天继续给大家带来几款好用的软件。 1. 数据分析——Chartistic ​ Chartistic是一款功能强大的数据分析可视化工具,它提供了丰富的图表类型和…

C语言操作符和关键字

文章目录 操作符单目操作符sizeof(类型)强制类型转换 关系操作符、逻辑操作符、条件操作符逗号表达式 常见关键字typedefstaticstatic修饰局部变量static修饰全局变量static修饰函数 register寄存器关键词define定义常量和宏 操作符 单目操作符 C语言中…

R-Tree原理及实现代码

目录 一.引言 二.R-Tree的基本原理 插入操作 查询操作 删除操作 平衡操作 三. 节点分裂 线性分裂 二次分裂 增量分裂 四.查询 范围查询 最近邻查询 五.最新研究进展 六.C语言实现示例 七. 实际案例分析 八.总结 一.引言 在计算机科学领域,R-Tree是…

基于 Spring Boot 博客系统开发(一)

基于 Spring Boot 博客系统开发(一) 本系统是简易的个人博客系统开发,为了更加熟练地掌握SprIng Boot 框架及相关技术的使用。🤓🤓🤓 基于 Spring Boot 博客系统开发(二)&#x1f4…

聊聊.NET Core处理全局异常有那些方法

简述 处理全局异常的方法有IExceptionFilter(异常处理),使用中间件异常处理,使用框架自带异常中间件等。考点 考察对异常处理方式的熟悉程度和广度,以及对中间件、过滤器熟练程度。 下面分别具体介绍三种处理异常的…

Spring Cloud学习笔记(Feigh):简介,实战简单样例

这是本人学习的总结,主要学习资料如下 - 马士兵教育 1、Netflix Feign简介2、Open Feign的简单样例2.1、dependency2.2、代码样例 1、Netflix Feign简介 Netfilx Feign是用来帮助发送远程服务的,它让开发者觉得调用远程服务就像是调用本地方法一样&…

计算机系列之进程调度、死锁、存储管理、设备管理、文件管理

11、进程调度-死锁-存储管理-固定分页分段 1、进程调度 进程调度方式是指当有更高优先级的进程到来时如何分配CPU。分为可剥夺和不可剥夺两种,可剥夺指当有更高优先级进程到来时,强行将正在运行进程的CPU分配给高优先级进程;不可剥夺是指高…

分享一些常用的内外网文件传输工具

内外网隔离后的文件传输是网络安全领域中一个常见而又重要的问题。随着信息技术的快速发展,网络安全问题日益凸显,内外网隔离成为了许多企业和组织保护内部信息安全的重要手段。然而,内外网隔离后如何有效地进行文件传输,成为了摆…

专利视角下的量子竞赛:《2024全球专利格局白皮书》

2024年1月,欧洲量子产业联盟(QuIC)发布了题为《全球量子技术专利格局描述》的综合白皮书。 该文件以透明的视角展示了当今的知识产权格局,包括知识产权持有人的地理分布。该文件由 QuIC 知识产权(IP)与贸易…

3DTiles特性与内容解析

一篇19年整理的比较老的笔记了。更多精彩内容尽在数字孪生平台。 瓦片种类 3DTiles瓦片有多种类型: b3dm(Batched 3D Model,批量3D模型) b3dm瓦片存储了多个个体,b3dm中的glb代表的实际对象应该具有相同的种类但是可能数据内容不同。b3dm…