三十一、W5100S/W5500+RP2040树莓派Pico<TCP_Server多路socket>

news2024/11/16 19:53:35

文章目录

  • 1 前言
  • 2 简介
    • 2. 1 使用多路socket的优点
    • 2.2 多路socket数据交互原理
    • 2.3 多路socket应用场景
  • 3 WIZnet以太网芯片
  • 4 多路socket设置示例概述以及使用
    • 4.1 流程图
    • 4.2 准备工作核心
    • 4.3 连接方式
    • 4.4 主要代码概述
    • 4.5 结果演示
  • 5 注意事项
  • 6 相关链接

1 前言

  W5100S/W5500是一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,同时也是一颗工业级以太网控制芯片。支持多路socket独立通信,通信效率互不影响。本教程将介绍W5100S/W5500以太网多路socket应用的基本原理、使用步骤、应用实例以及注意事项,帮助读者更好地掌握这一技术。

2 简介

2. 1 使用多路socket的优点

  多路socket的优点主要体现在以下几个方面:

  1. 提高并发处理能力:多路socket可以同时处理多个网络连接请求,显著提高服务器的性能和并发处理能力。这意味着服务器可以同时处理多个客户端的请求,而不需要为每个客户端连接创建一个线程。
  2. 增强可靠性:多路socket可以为对可靠性要求比较高的场景提供主服务器和备服务器连接。在实际使用中,当主服务器出现异常时,可以通过备用服务器提供服务。
  3. 优化数据处理:多路socket可以根据不同的网络连接请求进行优化处理,比如对数据传输间隔较长的连接使用网络心跳包定期上传一组固定的数据,让服务器知道设备处于正常工作状态;对于触发式上传数据的场景,则可以减少不必要的处理过程。
  4. 方便设备识别:在设备启动时,多路socket可以上传一组带有唯一编号的信息到服务器,用于服务器辨别是那一台设备,方便后续进行数据交互。

2.2 多路socket数据交互原理

在这里插入图片描述

服务器建立多路socket的流程可以按照以下步骤进行:

  1. 服务器端创建socket,并绑定到一个IP地址和一个端口上,然后开启侦听,等待客户端连接请求。
  2. 当服务器端接到客户端的连接请求后,会为这个连接创建一个新的socket,并与客户端建立连接。
  3. 服务器端和客户端可以通过各自的socket进行数据交互。
  4. 当数据交互完成后,可以关闭连接(可能主动,也可能被动)。
  5. 服务器继续侦听,等待下一个客户端连接请求。

2.3 多路socket应用场景

多路socket应用是指使用socket接口进行网络通信,并允许多个客户端或服务器同时建立连接的应用程序。以下是一些常见的多路socket应用:

  1. 聊天服务器:聊天服务器可以同时与多个客户端建立连接,接收和发送消息。多路socket可以让服务器同时处理多个客户端的连接请求,实现高效的并发处理。
  2. 游戏服务器:游戏服务器需要同时与多个客户端建立连接,处理游戏逻辑和数据交换。多路socket可以让服务器同时处理多个客户端的连接请求,提高游戏的流畅度和稳定性。
  3. 视频直播服务器:视频直播服务器需要同时与多个客户端建立连接,传输视频数据。多路socket可以让服务器同时处理多个客户端的连接请求,提高直播的流畅度和稳定性。
  4. 分布式系统:分布式系统需要多个服务器协同工作,处理客户端的请求。多路socket可以让每个服务器同时处理多个客户端的连接请求,提高系统的可扩展性和稳定性。

3 WIZnet以太网芯片

WIZnet 主流硬件协议栈以太网芯片参数对比

ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork Performance
W5100STCP/IPv4, MAC & PHY8bit BUS, SPI16KB4Max.25Mbps
W6100TCP/IPv4/IPv6, MAC & PHY8bit BUS, Fast SPI32KB8Max.25Mbps
W5500TCP/IPv4, MAC & PHYFast SPI32KB8Max 15Mbps
  1. W5100S/W6100 支持 8bit数据总线接口,网络传输速度会优于W5500。
  2. W6100 支持IPv6,与W5100S 硬件兼容,若已使用W5100S的用户需要支持IPv6,可以Pin to Pin兼容。
  3. W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存。

4 多路socket设置示例概述以及使用

4.1 流程图

  程序的运行框图如下所示:

在这里插入图片描述

4.2 准备工作核心

软件

  • Visual Studio Code
  • WIZnet UartTool
  • SocketTester

硬件

  • W5100SIO模块 + RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板
  • Micro USB 接口的数据线
  • TTL 转 USB
  • 网线

4.3 连接方式

  • 通过数据线连接PC的USB口(主要用于烧录程序,也可以虚拟出串口使用)

  • 通过TTL串口转USB,连接UART0 的默认引脚:

    • RP2040 GPIO0(UART0 TX) <----> USB_TTL_RX
    • RP2040 GPIO1(UART0 RX) <----> USB_TTL_TX
  • 使用模块连接RP2040 进行接线时

    • RP2040 GPIO16 <----> W5100S MISO
    • RP2040 GPIO17 <----> W5100S CS
    • RP2040 GPIO18 <----> W5100S SCK
    • RP2040 GPIO19 <----> W5100S MOSI
    • RP2040 GPIO20 <----> W5100S RST
  • 通过PC和设备都通过网线连接路由器LAN口

4.4 主要代码概述

  我们使用的是WIZnet官方的ioLibrary_Driver库。该库支持的协议丰富,操作简单,芯片在硬件上集成了TCP/IP协议栈,该库又封装好了TCP/IP层之上的协议,我们只需简单调用相应函数即可完成协议的应用。

第一步:tcp_server_multi_socket.c文件中加入对应的.h文件。

第二步:定义DHCP配置需要的宏。

第三步:网络信息的配置,开启DHCP模式。

第四步:编写定时器回调处理函数,用于 DHCP 1秒嘀嗒定时器处理函数。

第五步:主函数先是定义了一个定时器结构体参数用来触发定时器回调函数,对串口和SPI进行初始化,然后写入W5100S的网络配置参数,初始化DHCP后开始DHCP获取IP,获取到就打印获取到的IP,获取次数超过最大获取次数时就使用静态IP,主循环进行服务器运行函数中。

第六步:我们看到服务器的函数的运行函数,先是打开socket,创建服务器,然后开始监听,如果有客户连接socket号会进行加一操作,W5100S最多支持4路socket,W5500最多支持8路socket。循环检测客户端发来的消息,并打印出对应连接客户端的信息。

void do_tcp_server(void)
{
    static uint8_t sock_cof = 0;
    uint16_t len = 0;
    uint8_t destip[4];
    uint16_t destport;
    switch (getSn_SR(sock_cof)) /*Get the socket status*/
    {
    case SOCK_CLOSED:                                      /*The socket is closed*/
        socket(sock_cof, Sn_MR_TCP, local_port, Sn_MR_ND); // Open socket
        break;

    case SOCK_INIT:       /*The socket is in the initialization state*/
        listen(sock_cof); /*socket starts listening*/
        break;

    case SOCK_ESTABLISHED: /*The socket is in the connection establishment state*/

        if (getSn_IR(sock_cof) & Sn_IR_CON) /*Receive interrupt flags clearly*/
        {
            setSn_IR(sock_cof, Sn_IR_CON);
        }
        len = getSn_RX_RSR(sock_cof);
        if (len > 0)
        {
            recv(sock_cof, buff, len); /*print the receive data.*/
            buff[len] = 0x00;
            getSn_DIPR(sock_cof, destip);
            destport = getSn_DPORT(sock_cof);
            printf("socket%d form:%d.%d.%d.%d port: %d  message:%s\r\n", sock_cof, destip[0], destip[1], destip[2], destip[3], destport, buff);
            send(sock_cof, buff, len);
        }
        break;

    case SOCK_CLOSE_WAIT: /*The socket is waiting to be closed*/
        close(sock_cof);
        break;
    }
#if (_WIZCHIP_ == W5100S)
    if (sock_cof < 4)
    {
        sock_cof++;
    }
    else
    {
        sock_cof = 0;
    }
#elif (_WIZCHIP_ == W5500)
    if (sock_cof < 8)
    {
        sock_cof++;
    }
    else
    {
        sock_cof = 0;
    }
#endif
}

4.5 结果演示

在这里插入图片描述

在这里插入图片描述

5 注意事项

  • 如果想用WIZnet的W5500来实现本章的示例,我们只需修改两个地方即可:

​ (1)在library/ioLibrary_Driver/Ethernet/下找到wizchip_conf.h这个头文件,将_WIZCHIP_ 宏定义修改为W5500。

​ (2)在library下找到CMakeLists.txt文件,将COMPILE_SEL设置为ON即可,OFF为W5100S,ON为W5500。

6 相关链接

WIZnet官网

WIZnet官方库链接

本章例程链接

想了解更多,评论留言哦!

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

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

相关文章

centos虚拟机无法接受消息(防火墙)

1.利用wireshark抓包&#xff0c; 发现发送信息后&#xff0c; 虚拟机返回 :host administratively prohibited 2.发现是centos虚拟机未关闭防火墙 &#xff08;关闭后可正常接收消息&#xff09;

uni-app 使用vscode开发uni-app

安装插件 uni-create-view 用于快速创建页面 配置插件 创建页面 输入页面名称&#xff0c;空格&#xff0c;顶部导航的标题&#xff0c;回车 自动生成页面并在pages.json中注册了路由 pages\login\login.vue <template><div class"login">login</d…

【漏洞复现】​金和OA存在任意文件读取漏洞

漏洞描述 金和OA协同办公管理系统C6软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助企…

手把手教你搭建Maven私服

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 1. Maven私服简介 ①私服简介 Maven 私服是一种特殊的Maven远程仓库&#xff0c;它是架设在局域网内的仓库服务&#xff0c;用来代理位于外部的远程仓库&#xff08;中央仓库、其他远程公共仓库&#xff09;。 当然…

UE4动作游戏实例RPG Action解析一:角色移动,旋转,动画创建,创建武器,及武器配置

文末有git地址 一、角色移动,摄像机旋转 1.1、官方RPGAction Demo下载地址: ​ 1.2、在场景中创建一个空的角色 创建一个Character蓝图和一个PlayerController蓝图,添加弹簧臂组件和摄像机,并为网格体添加上一个骨骼网格体 ​ 1.3、如何让这个角色出现在场景中, 创建一…

混沌系统在图像加密中的应用(基于哈密顿能量函数的混沌系统构造1.4)

混沌系统在图像加密中的应用&#xff08;基于哈密顿能量函数的混沌系统构造1.4&#xff09; 前言一、逆时间对称性分析二、具有逆时间对称性的单晶格状混沌与拟周期流1.逆时间对称性及哈密顿能量函数2.数值仿真 python代码 前言 续接混沌系统在图像加密中的应用&#xff08;基…

cvf_使用lora方法增强能力

cvf_使用lora方法增强能力 实验对比图最终代码简介详细解析实验对比图 最终代码 import paddle import numpy as np import pandas as pd from tqdm import tqdmclass FeedFroward(paddle.nn.Layer)

Redis(集合Set和有序集合SortedSet)

SET集合中的元素是不允许重复的&#xff0c;SET中的命令都是以S开头的。 使用SADD 在集合中添加元素&#xff0c;使用SMEMBERS查看元素。 当添加重复元素时&#xff0c;会返回0代表添加失败&#xff0c;查询还是就Redis一个元素。 使用SISMEMBER查询元素是否在集合中&#xff…

Pytorch torch.exp()的使用举例

代码实验展示: Microsoft Windows [版本 10.0.18363.1256] (c) 2019 Microsoft Corporation。保留所有权利。C:\Users\chenxuqi>conda activate ssd4pytorch1_2_0(ssd4pytorch1_2_0) C:\Users\chenxuqi>python Python 3.7.7 (default, May 6 2020, 11:45:54) [MSC v.191…

企业应用集成

1.企业集成分类 按集成点分和按传输方式两种。 1.1按集成点分&#xff1a; 集成点 效果 解题关键点 界面集成 界面 统一入口&#xff0c;产生 "整体"感觉 "整体"感觉 最小代价实现一体化操作 数据集成 数据 不同来源的数据逻辑或物理上 "…

三十二、W5100S/W5500+RP2040树莓派Pico<UPnP示例>

文章目录 1 前言2 简介2 .1 什么是UPnP&#xff1f;2.2 UPnP的优点2.3 UPnP数据交互原理2.4 UPnP应用场景 3 WIZnet以太网芯片4 UPnP示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 随着智能家居、物联网等…

软件质量保护与测试(第2版)学习总结第十三章 集成测试

很多人都认为微软是一家软件开发公司&#xff0c;事实上我们是一家软件测试公司。 ---比尔盖茨 集成测试是在单元测试的基础上将多个模块组合在一起进行测试的过程。 13.1.1 区别 单元测试主要关注模块内部&#xff0c;系统测试则是在用户的角度来评价系统&#xff…

潇洒郎: 小白一次性成功——小米红米手机解BL锁+ ROOT-刷面具

一、账号与设备绑定 手机登录账号,绑定账号,使用手机卡流量,等待7天后解BL锁。 二、解BL锁 下载工具 申请解锁小米手机 (miui.com) https://www.miui.com/unlock/index.html 1、登录账号-与绑定的账号一样 2、驱动检测安装 驱动安装进入Fastboot模式后,会自动识别已连接…

头歌 MySQL数据库 - 初识MySQL

本章内容是为了完成老师布置的作业&#xff0c;同时也是为了以后考试的时候方便复习。 数据库部分一条一条的写&#xff0c;可鼠标手动粘贴&#xff0c;除特定命令外未分大小写。 第1关&#xff1a;创建数据库 在操作数据库之前&#xff0c;需要连接它&#xff0c;输入命令&a…

4.4 Windows驱动开发:内核监控进程与线程创建

当你需要在Windows操作系统中监控进程的启动和退出时&#xff0c;可以使用PsSetCreateProcessNotifyRoutineEx函数来创建一个MyCreateProcessNotifyEx回调函数&#xff0c;该回调函数将在每个进程的创建和退出时被调用。 PsSetCreateProcessNotifyRoutineEx 用于在系统启动后向…

物联网赋能:WIFI HaLow在无线连接中的优势

在探讨无线网络连接时&#xff0c;我们不难发现&#xff0c;WIFI已经成为我们日常生活中不可或缺的一部分&#xff0c;承载了半数以上的互联网流量&#xff0c;并在家庭、学校、娱乐场所等各种场合广泛应用。然而&#xff0c;尽管WIFI4、WIFI5和WIFI6等协议无处不在&#xff0c…

基于单片机智能液位水位监测控制系统设计

**单片机设计介绍&#xff0c; 基于单片机智能液位水位监测控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能液位水位监测控制系统可以用来检测和控制液位的高低&#xff0c;并可以用于水泵的控制和自…

业务架构、技术架构、项目管理的有机结合

新入职的创业公司一年不行了。 这一年来没有上班&#xff0c;也因为大龄的问题找不到合适的工作。然后考了几个项目管理证书&#xff0c;又思考了一个技术兑现的问题。 技术本身是架构的执行层面&#xff0c;如果上面的公司战略、业务架构变小&#xff0c;缩水&#xff0c;或者…

MySQL的执行器是怎么工作的

作为优化器后的真正执行语句的层&#xff0c;执行器有三种方式和存储引擎&#xff08;一般是innoDB&#xff09;交互 主键索引查询 查询的条件用到了主键&#xff0c;这个是全表唯一的&#xff0c;优化器会选择const类型来查询&#xff0c;然后while循环去根据主键索引的B树结…

go zero手把手教你入门案例

一、入门案例 1、在黑窗口上安装 go install github.com/zeromicro/go-zero/tools/goctllatest2、使用goland创建一个项目 3、在项目中安装依赖 go get -u github.com/zeromicro/go-zerolatest4、模拟创建一个user的项目 goctl api new user5、安装依赖包 go mod tidy6、补充代…